Optimizacija svjetova koje grade igrači: strategija renderiranja SEED u Unity

  • PublicPublic
  • 06 Nov, 2026
Optimizacija svjetova koje grade igrači: strategija renderiranja SEED u Unity

SEED je perzistentna MMO sandbox igra od Klang Games, razvijena u Unityju. Akcija se odvija na udaljenoj planeti gdje igrači upravljaju autonomnim likovima zvanim sadnice. Igra nudi ekonomiju vođenu igračima, izgradnju društva i neprekidno širenje svijeta koje traje čak i nakon što igrači izađu iz igre. Svaka nova struktura, stablo ili lik koji dodaju igrači povećavaju opterećenje renderiranja u Unity klijentu, koji mora obraditi to dinamičko stanje na širokom spektru hardvera, od visokoučinkovitih PC-ja do pametnih telefona. Simulacija se pokreće na posvećenim serverima, dok klijent odgovara za renderiranje strimiranog stanja i proslijeđivanje interakcija igrača, poput klikova i pokreta kamere.

Umetnički stil SEED namjerno je stiliziran i niskopoligonalan, pri čemu se većina podataka o površinama pohranjuje izravno u geometriji, a ne u teksturama. Ovaj pristup smanjuje troškove sjenčanja i korištenje propusnog opsega memorije, što je ključno za performanse na mobilnim uređajima. Zgrade se grade od malih, ciglastih modula na mreži s korakom od jednog metra, pri čemu se svaki voxel koji postavi igrač razvija u otprilike 15 modula, a interijeri se generiraju samo kada se promatraju. Najveće društvo na prometnom otoku sadrži 172 zgrade, otprilike 12.500 voxela i 190.000 modula. Oni se renderiraju pomoću BatchRendererGroup, s poslovima koji se pokreću u C# Job Systemu i kompiliraju Burst kompilatorom kako bi se osigurala učinkovitost unatoč velikom broju objekata.

Klang Games koristi Universal Render Pipeline (URP) i strogo se pridržava standardnih rješenja Unityja kako bi osigurala kompatibilnost s budućim ažuriranjima. Igra trenutačno radi na Unity 6.3, a tim ažurira engine otprilike jednom ili dva puta godišnje kako bi dobio pristup novim funkcijama renderiranja. Prilagođeni efekti implementirani su putem vlastitih renderer features, a ne zamjenom URP-a, čime se osigurava da osnovni mehanizmi poput SRP batchinga i GPU Resident Drawera ostaju netaknuti. Za prirodne elemente koristi se Shader Graph s standardnim Lit shaderom, dok likovi koriste Unlit shadere s prilagođenim prolazom osvjetljenja. Ova strategija osigurava da kreiranje vlastitih shader grafova ne narušava osnovne mehanizme performansi, pružajući stabilan temelj za svijet u kojem igrači određuju složenost renderiranja.

Interakcija s gustoćom okoline koju su izgradili igrači zahtijeva precizne metode odabira objekata. Kada se zumira uvećano, igra koristi pikselno precizan odabir crtanjem objekata u off-screen render target s jedinstvenim ID-ovima, što omogućuje klijentu da točno identificira objekt ispod kursora. Na mobilnim uređajima, gdje je dodirni ulaz manje precizan, sustav provjerava susjedne piksele i prikazuje popis odabira ako se otkrije više objekata. Kada se zumira u manje, sustav prelazi na fizikalne raycastove, koristeći Unity Physics za pokretanje i upitivanje ogromnog broja kolajdera za stabla, objekte i cigle zgrada. Posao koji neprestano radi određuje nalaze li se objekti unutar zgrada kako bi upravljao slojevima renderiranja i osvjetljenjem, omogućujući funkcije poput isključivanja GameObjectova ili prilagodbe vidljivosti ovisno o položaju igrača unutar strukture.

Optimizacija performansi uvelike se oslanja na realistične podatke iz snimaka užih servera, koji se lokalno obnavljaju za testiranje velikih društava. Ovaj pristup otkrio je da igra na PC-ju često nailazi na ograničenja CPU-a zbog slanja draw calla, unatoč korištenju GPU Resident Drawera. Problem je pronađen u animiranom međusobnom prigušenju LOD-a, koje je onemogućavalo instanciranje objekata. Isključivanjem animacijskog dijela i korištenjem ručnih prijelaza, tim je obnovio instanciranje, čime je značajno smanjen opterećenje CPU-a. Na mobilnim uređajima glavno ograničenje je memorija, a ne CPU. Koristeći Memory Profiler, tim je identificirao probleme poput dupliciranih tekstura i prevelikih C# kolekcija. Kako bi riješili pitanje korištenja memorije za geometriju, zamijenili su klasične LOD Groups s Mesh LOD u Unity 6.2, što pohranjuje sve razine detalja u jednoj mesh modelu, smanjujući potrošnju memorije i pojednostavljujući upravljanje resursima za mobilne platforme.