Performance was a constant constraint, especially on older devices. We profiled on low-end hardware, validated changes on-device, and used early player behavior to guide where to focus.
On the rendering side, I pushed GPU instancing across environment assets to reduce draw calls, and iterated on shader cost to keep performance predictable. We established LOD strategies to scale asset complexity, and I worked with artists to keep poly counts and material usage within budget.
We also reworked the spawn pipeline to move as much work out of runtime as possible. Data that did not need to be computed at runtime was pre-baked and cached, reducing per-encounter cost. Encounters needed to load immediately since catching is a fast interaction, so minimizing setup overhead was critical.
Alongside spawning, I helped guide supporting tech art systems including seasonal and weather variation, time-of-day tinting across environments and Pokémon, fog, shadows, and interaction details like trampling grass.
Throughout development, a few constraints stayed fixed. Pokémon could not be obscured or blocked. Large assets needed strong silhouettes. Scenes had to read instantly.