Wszystkie artykuły
Tutoriale · 2 min read

Zerowy koszt w czasie działania: jak Numivo zapieka wszystko do natywnych assetów silnika

Decyzja architektoniczna stojąca za Numivo, dlaczego każdy scatter, blend i grid staje się zwykłym assetem silnika, i co to oznacza dla twoich buildów, repozytorium i zespołu.

Illustration of Numivo scene data being baked into engine-native asset files

Najważniejsza funkcja Numivo jest niewidoczna: twoja wydana gra nie zawiera jej ani trochę. Każde narzędzie w zestawie (scatter, mesh blending, grids) tworzy zwykłe assety silnika i nic więcej. Ten wpis wyjaśnia, co to oznacza technicznie i dlaczego uważamy to za nienegocjowalne.

Co „natywny" oznacza konkretnie

Gdy zapiekasz przebieg scattera w Unreal, Numivo zapisuje komponenty Hierarchical Instanced Static Mesh lub instancje foliage, te same struktury, które uzyskałbyś, umieszczając rzeczy ręcznie. W Unity to standardowe instancje prefabów lub detale terenu. Materiały z mesh blendingu kompilują się do zwykłych materiałów silnika z idealnymi co do piksela przejściami normalnych; nie ma żadnego niestandardowego przebiegu shadera, żadnej pracy pluginu na klatkę, żadnego modułu „runtime Numivo" w twoim Build.cs ani w manifeście pakietu.

Liczby, które z tego wynikają:

  • 0 linii kodu Numivo w twoim buildzie
  • 0 ms dodanego czasu klatki, nie ma czego wykonywać
  • < 150 MB RAM edytora w typowych scenach, ponieważ narzędzia edytora to cały ślad
  • 1 wspólny rdzeń dla Unreal i Unity, dzięki czemu presety przechodzą między silnikami

Dlaczego odmawiamy zależności w czasie działania

Zależności w czasie działania to dług, który ktoś inny musi spłacić:

  1. Certyfikacja. Zespoły certyfikacji konsolowej pytają, co robi każdy moduł innego producenta. „Nie ma żadnego" to najkrótsza możliwa odpowiedź.
  2. Trwałość. Gry przeżywają subskrypcje narzędzi. Ponieważ zapieczone wyniki to zwykłe assety, scena zbudowana w Numivo otwiera się i wydaje za dziesięć lat, z nami albo bez nas. Jeśli zrezygnujesz, zachowujesz wszystko, co zrobiłeś: to nie obietnica w naszych warunkach, to właściwość architektury.
  3. Kontrola nad wydajnością. Twój profiler pokazuje prymitywy silnika, które już umiesz optymalizować: dystanse cullingu, LOD-y, ustawienia Nanite, a nie czarną skrzynkę.

Co to oznacza dla twojego repozytorium

Zapieczone wyniki wersjonują się jak każdy inny asset: da się je diffować, mergować, recenzować. Presety gatunków i gridów Numivo to małe, proste pliki, które możesz commitować i udostępniać zespołowi. Jedyne, co nie powinno trafiać do kontroli wersji, to lokalny cache indeksu treści (odbudowuje się sam); jedna reguła ignorowania i gotowe.

Kompromis, uczciwie nazwany

Nieniszcząca edycja proceduralna wymaga pluginu: raz zapieczone zbocze to dane silnika, a ponowna edycja proceduralna oznacza otwarcie go ponownie w Numivo. Uważamy, że to właściwy kompromis, alternatywa (utrzymywanie scen zależnych od warstwy runtime) po cichu bierze twój projekt jako zakładnika. Twoje poziomy powinny należeć do twojej gry, a nie do twoich narzędzi.

Jeśli ta filozofia pasuje do sposobu pracy twojego zespołu, darmowy poziom to najprostszy sposób, by ją przetestować: rozsyp coś, zapiecz to, usuń plugin i patrz, jak scena ma to w nosie.