Kezdőoldal » Számítástechnika » Programozás » Unity -ben Occlusion Culling...

Unity -ben Occlusion Culling helyett saját megoldás, mert az objektumok nem lehetnek statikussak?

Figyelt kérdés
Képzeljük el, hogy van egy hatalmas világ, amiben nem lehet statikus egyetlen objektum sem, függetlenül attól, hogy ez kedvezne a teljesítménynek. Az ok egyszerű. Ha a világ akkora, hogy átlépi a "floating point precision" határvonalat, akkor az egész világot (vagy legalább is az éppen aktív részét), a játékossal együtt vissza kell mozgatni az origó közelébe, emiatt bukom az olyan megoldásokat, mint az előre sütött árnyékok, fények, és magát a statikus objektumok jelenlétét. Ehelyett arra gondoltam, hogy ahol a játék megköveteli érzékenyebb régiókban, ahol magas az FPS drop, ott manuálisan hoznék létre selejtezést, mégpedig úgy, hogy trigger collidereket pakolnék a megfelelő helyre, és előre meghatározott objektumokat letiltanék ezekbe belépve, vagy legalább a renderelésüket. Így hirtelen egyszerűen nem tudok jobb megoldást. Úgy tudom a frustum culling automatikusan működik minden esetben, de ez csak a kamera látószögére vonatkozik, így a többit nekem kell megoldani. Mennyire jó vagy éppen buta ötlet sok trigger colliderrel megoldani ezt a problémát? Mellesleg érdekes az is, hogy az Unity az editorban 100 000 egység fölött kezd el figyelmeztetést küldeni a precíziós hiba miatt, hogy maradjunk inkább e tartományon belül, ehhez képest már 10 000 egység fölött is érzékelni az objektumok enyhe remegését, valahol 50 000 fölött meg már a textúrázatlan sík felületek (default material) is villódznak. Nem tudom mennyire lenne jó ötlet jelenetekre bontani az egész térképet, ha a játékos viszonylag elég gyorsan el tudja érni egy irányban a 10 000 egységet. Új jelenet betöltésekor csak hosszabb idő a betöltés, mint a meglévőt átmozgatni.

febr. 2. 22:06
 1/4 anonim ***** válasza:
En azt hiszem hogy mar maga a kerdes is annyira specifikus, hogy onmagaban meghaladja ennek az egesz weboldalnak a lehetosegeit.
febr. 2. 22:16
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:

Ahogy 1# írta ez elég specifikus.


Lehet, hogy ezt megtaláltad te is.

3 éves cikk, de kiindulásnak jó lehet, ha ilyesmit szeretnél csinálni.

[link]


Nem valószinű, hogy itt bárki is tudna érdemben ehhez hozzászólni.


Esetleg reddit unitys csoportjába rakd ki a kérdést ott nagyobb valószinűséggel többen tudnak hozzá szólni, mint itt.

Még a Quora-ra is kiteheted angolul a kérdésed.

febr. 3. 15:39
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:

2# -es, köszönöm a választ, ezt konkrétan még nem láttam.

Viszont felmerült egy sokkal komolyabb probléma, szóval most az occlusion culling a legkisebb gondom. :/ Egy egyszerűbb teszt során hamar kiderült, hogy a Unity nagyon rosszul kezeli a nagy mennyiségű objektumot az editoron belül. Konkrétan csontra fagy az editor, és tele lesz a 16GB RAM, ha megpróbálok sűrűn feltölteni objektumokkal 4 darab 10 000 x 10 000 egységnyi területet. Azért pont ennyit, hogy pozitív és negatív irányba is kihasználhassam a precíziós limitet X és Z síkon. Úgy tűnik, hogy ez nem járható út. Pedig direkt egy idő után elkezdtem editorban letiltogatni azokat az objektumokat, amiket már a helyükre pozícionáltam (sok kisebb objektum külön szülő objektumokba pakolva, majd egy idő után ezek is egy még nagyobb szülő objektumba), viszont ez csak az editorban lévő FPS –en javított, de egy örökkévalóság a projekt mentése, a Play módba való lépés, vagy onnan kilépés. Ráadásul ez rengeteg RAM –ot fogyaszt, a build verziót sem tervezném ennyire súlyosra. Bár a játék ha nagynehezen el tud indulni, láthatóan hozná a kellő mennyiségű FPS –t, ha sikerülne a build és elég lenne a RAM, de itt már teljesen megáll a folyamat, el sem jut a végéig.

Így hirtelen, amatőr fejjel, két megoldást látok. Az egyik az, hogy hagyom ezt az egész ötletet, hogy az egész térkép egyetlen jelenetben van, és elkezdem felépíteni azt sok kis különálló jelenetben. Ebben az esetben az új jelenet ott kezdődne, ahol az előző véget ért, de minden jelenet egy kicsit a széleken, újra tartalmazná a szomszédos jelenetek részeit is. A másik ötlet, hogy kell írnom saját megoldást, ami tárolt adatokból, vagyis kisebb, mentett fájlokból építi fel a világot futásidőben. Az editorban csak a szerkeszteni kívánt világ egy kisebb részét hoznám létre, majd amikor biztos vagyok benne, hogy ez így jó lesz, akkor lenne egy függvény, ami Play módban végigiterál az összes objektumon, és kiírja egy fájlba a hozzá tartozó információkat, hogy milyen transform adatok, milyen mesh, milyen material, stb. Ugyanígy hasonlóan működne a beolvasás. Az első megoldás egyszerűbbnek tűnik, a második hatékonyabbnak de nehezebbnek. Mondjuk, ha a Unity elég gyorsan tudna váltogatni a jelenetek között a beépített megoldással (gondolom minél kisebb egy jelenet, annál gyorsabb az átkapcsolás), akkor nyilván ezt preferálnám inkább. Hisz semmi sem garantálja, hogy a saját megoldásom zökkenőmentesebben töltögetné be az adatokat futásidőben, egyetlen nagy jelenetben.

Tudom, ez egy olyan probléma, ami lehet, hogy a gyakorlatban soha nem merül fel majd végül a saját játkomban (mert soha nem lesz olyan hatalams a világ), de amikor elkezdek valami új dologgal foglalkozni, akkor szeretek felkészülni a legrosszabb esetekre is.

febr. 3. 19:39
 4/4 anonim ***** válasza:

Esetleg add egy kis ötletet a késöbbiekben ebbe is érdemes lehet belenézni.

https://www.youtube.com/watch?v=YOtDVv5-0A4


2#-es vagyok, nagyon minimálisan használtam csak a Unity-t. A tervem nekem is az volt, hogy valami nagyobb pálya legyen. Viszont mikor jött minnél több dolog: fák, fűvek és ezeket a szél mozgassa, illetve esetleg ha a játékos karakter megy akkor lenyomja a füvet stb. Ezt HDRP-vel, hogy szép megvilágítást lehessen elérni. Post-processing nagyon király, de sajnos annyira erőforrás igényes, hogy csak na. Valószinűleg aki nagyon régóta játékfejlesztő sokkal jobb az optimalizálásban. Tényleg csak néha néha nekiállok és csinálgatok magamnak ilyen teszt projekteket. Egyszer majd talán elkezdek valami nagyon egyszerű játékot, de még nagyon sokat kell tanulnom hozzá az biztos.

A gépem egy krumpli laptop amiben 8GB(ez bővíthető) i5 11. generációs procihoz tartozó integrált grafika van. Amin mindenféle elképzelés megvalósítása már fájdalmasan alacsony grafikán és kevés fps mellet lehetséges :D


Jó lenne tudni nekem is, hogy lehet a legtöbbet kihozni egy adott gépből. Amúgy a jelenetekre szétszedés ötlet legjobb. Sajnos ami projekt volt abban nem tudtam alkalmazni ezt a dolgot, hogy kisebb jelenetekre szedjem szét. Valószinűleg rossz volt a kiindulási alap.


Optimalizácóhoz kapcsolódóan annyi információt találtam, de az alkalmazásuk nem volt nekem egyszerű, egyértelmű.


A játék mentés és betöltés nagyon jó volt mikor sikeresen megvolt egy nagyon alap szkript amit sikerült összehoznom. Nekem 3D-s irány volt meg, de volt itt probálkozás egy kevés autós utána egy karakterrel mászkálós játék terrain-en(amit egy térképről leszedett magasságot akartam megvalósítani amire van több eszköz is, úgy ahogy működik)

Hátha téged is érdekel ide rakom a videót: https://www.youtube.com/watch?v=eD2Ojp98UK4


Megkérdezhetem, hogy milyen játékot szeretnél majd elkészíteni?

3D-s autós játékot vagy egy karakterrel mászkálósat, fegyveres, csak szimplán túlélős?

febr. 3. 20:25
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!