Az eljárási környezet generálásának feltárása az egységben

Az eljárásgenerálás rendkívül népszerű szerelő volt a legutóbbi játékokban. A legutóbbi tendencia nagy volt, l és a Minecraft sikere ösztönözte 2009 óta, de számos más címben is hatalmas sikert aratott. Az általam metszett játékok közül, amelyek a Minecraft felfedezés-kézműves-teremtés játékstílusát követték, a Terraria (a Minecraft 2D verziójának tekintem) és a Starbound (Terrariának látom az űrben). Még nem láttam, hogy egy játék teljes mértékben nyomon követi a Minecraft sikerét. Néhány újabb címet tartalmaz a hírhedt No Man’s Sky, amely „18 kvintillió” felfedezhető bolygót ígért – ami hatalmas technikai flopnak bizonyult.

Néhány hónappal ezelőtt új címre bukkantam, amelyet hozzá kellett adni az eljárásgenerációs halomhoz: Astroneer. Eljárási úton előállított bolygókkal és igazán érdekes kialakítással rendelkezik, amely a belső gyermekemnek szól, aki egyszer csillagász akart lenni.

Emellett, kiáltva ennek a játéknak a filmzenéjére, tökéletesen megragadja azt a gyermekkori ártatlanságot, amelyre mer merészkedni!

És így inspirálódtam, hogy kipróbálhassam, sikerül-e elkészítenem egy eljárási előállításon alapuló játékot a Unity-ben.

Az első dolog, amit tisztáznom kellett, az volt, hogy megértsem, hogy az eljárási generáció tágabb kifejezés, mint az a műfaj, amely ezeket a Minecraft-szerű játékokat leírja. Inkább a procedurális generálás a játék szokásos technikája, amely évtizedek óta létezik – még a 80-as évek elején! Ez egyszerűen az a folyamat, amelynek során a tartalmat véletlenszerűen, algoritmuson keresztül vezérlik. A játékban való alkalmazásának megértése érdekében, különös tekintettel a Minecraft stílusú játékokra, más irányból közelítettem meg.

Lorensen és Cline 1987-ben publikált egy cikket a „menetkockákról”, amely megértésem szerint a 3D-s adatok megjelenítésének folyamata kockák (vagy „voxelek”) tömbjén keresztül történő iterálás és egy szögletes sík azt. Megfelelően nagy felbontású tömbökkel meggyőző 3D-s képet hoz létre.

Ez a technika volt az alapja annak, hogy fejlettebb technikákat vezettek be, ideértve a „menetelő tetraédereket”, „felszíni hálókat” és „kettős kontúrozásokat”. A menetelő tetraéderek és kockák az úgynevezett „elsődleges” megközelítések a 3D-s felépítéshez, míg a felületi hálók és a kettős kontúrozás újabb „kettős” megközelítés. Megértésem szerint a „kettős” megközelítések lehetővé teszik a felület szorosabb közelítését, de hogy többet megértsek, azt javaslom, hogy vessen egy pillantást ide:

Ezek a technikák, különösen a kettős kontúrozás, a játékmotorokban a terepgenerálás elsődleges módszere volt, beleértve az Unity-t is (ez számomra hír). A Minecrafthoz hasonló játékok lebontják a módszert, és voksel alapú megközelítést alkalmaznak. Azt hiszem, hogy ez lehetővé tette, hogy nagyobb teljesítményt nyújtson a környezet eljárási előállításakor. Hogy tovább menjek, és megnézzem, hogyan történhetnek az eljárásban létrehozott környezetek a Unity-ben, a meglévő példák után néztem a Unity Asset áruházban.

A leghasznosabb eszközök közül néhányat találtam:

Néhány további hasznos mini példa:

Végül kutatásom során megtaláltam a leglehetetlenül tökéletes eljárási terepgenerátort. Ez valóban úgy tűnt, hogy egyablakos tökéletes a dobozból: TerrainEngine.

Sajnos úgy tűnik, hogy az alkotó elfoglalt, és soha nem jelentette meg a projektet az Asset áruházban. A száluk végigolvasása alapján úgy tűnik, hogy vita alakult ki olyan ügyfelek körében, akik magánfizetést fizettek az alkotónak, de soha nem kapták meg a terméket. Olyan közel, de eddig.

Mindenesetre ez nagyban hozzájárul ahhoz, hogy felfedezzem az eljárással létrehozott környezeteket a Unity-ben. Semmi esetre sem vagyok ezeknek a dolgoknak a szakértője, és úgy gondolom, hogy sértően korlátozott magyarázatot adtam arra, hogy mi is az eljárási generáció valójában. Mindig tanulni vágyom, ezért kérem, tájékoztasson, ha nem sikerült! Holnap azt hiszem, kitérek a VR és az eljárási környezetek kombinálásának feltárására.