Skip to content
digital_developer
Game DevUnity 6.3Universal Render PipelineGPU Resident DrawerSEED

Klang Games details how SEED renders player-built worlds in Unity 6.3 with URP

Unity's blog describes how Klang Games renders SEED, a persistent MMO sandbox, across PC and mobile using URP, BatchRendererGroup and Mesh LOD. The team also explains how server snapshots of real player societies exposed a CPU bottleneck tied to LOD Groups and GPU Resident Drawer.

Digital Developer Desk, 2d ago, 5 min read

Image: Unity blog

SEED is Klang Games's persistent MMO sandbox, and its simulation runs on the studio's servers. The Unity client reads the streamed state and renders it, so the workload depends on what players have built. In an interview published on the Unity blog on Nov 6, 2026, graphics engineer Artem Dyadichkin and senior game engineer Nikita Fetisov explained how the team handles that.

The art style does much of the scaling work. SEED is low-poly and stores most color and material data in vertex data instead of textures, which saves shading work and memory bandwidth. Buildings are made of small modules on a one-meter grid. Each player-placed voxel expands into around 15 modules. The largest society on one of the busiest islands has 172 buildings, roughly 12,500 voxels or 190,000 modules. The team renders them with BatchRendererGroup, batched through jobs on the C# Job System and compiled with Burst. Dyadichkin says buildings have never really been a bottleneck in pure rendering performance.

The team stays close to Unity's defaults in URP, upgrading Unity roughly once or twice a year, and extends URP with custom renderer features where needed. Nature assets use the default Lit shader. Characters and objects use Unlit Shader Graph shaders with a custom lighting pass. Dyadichkin says Shader Graph shaders won't break SRP batching or GPU Resident Drawer. For object picking, the client uses a custom renderer feature that draws unique object IDs to an off-screen render target when zoomed in. On mobile it also checks pixels around a tap and offers a list if several objects are nearby. When zoomed out, it falls back to physics raycasts against colliders created with Unity Physics.

Klang Games restores server snapshots, kept for disaster recovery, to test large player-built societies. Loading one locally showed a CPU rendering bottleneck on PC. The Unity Profiler showed the render thread spending longer than expected on draw calls, and the Frame Debugger showed SRP batching where hybrid batching was expected. GPU Resident Drawer was missing objects because almost all Prefabs have LOD Groups, and animated LOD cross-fading was the cause. The team disabled the animation but kept cross-fading with manually set transitions, and draw calls are instanced again.

On mobile, the constraint is memory rather than CPU. Using the Memory Profiler and snapshot diffs, the team found textures stored three times because of a broken reference, Addressables dependencies duplicating a material, and oversized C# collections. Because Addressables are built per platform, mobile can ship simplified trees without code changes. SEED's mobile variants now use Mesh LOD, introduced in Unity 6.2, exclusively. It stores all levels of detail in one mesh. Fetisov calls the switch a crucial step in rendering the game world on mobile devices.

Sources

Get the daily brief

The five stories that matter, every weekday morning. Free.