MODUL 1 · MODELIRANJE DIGITALNIH OBJEKATA ZA VIRTUALNU STVARNOST
Nastavna jedinica 1.7
Priprema i optimizacija modela za virtualnu stvarnost
Posljednji korak prije uvoza: model mora stati u budžet okvira od 11,1 ms pri 90 Hz. Jedinica pokazuje kako se budžet scene dijeli na trokute i pozive za crtanje, kako se CAD mreža od 312 000 trokuta svodi na 28 000, kako rade razine detalja i spajanje mreža te što provjeriti prije nego što model uđe u razvojno okruženje.
- objasniti vezu frekvencije osvježavanja, vremena okvira i udobnosti korisnika
- raspodijeliti budžet trokuta i poziva za crtanje na skupine objekata scene
- smanjiti CAD mrežu na ciljani broj trokuta bez gubitka siluete i dijelova koji se hvataju
- zadati razine detalja s udaljenostima prijelaza prema veličini na zaslonu
- smanjiti broj poziva za crtanje spajanjem mreža, instanciranjem i atlasom
- provjeriti model prema kontrolnoj listi prije uvoza u razvojno okruženje
- izračunati vrijeme okvira i iskorištenost budžeta scene za zadani uređaj
Zašto model treba budžet
Na zaslonu računala igra koja padne s 60 na 45 slika u sekundi postaje manje ugodna. U naočalama za virtualnu stvarnost pad ispod frekvencije osvježavanja osjeti se tijelom: slika zaostaje za pokretom glave, svijet se trza ili „pliva“, a osjetljiviji korisnici dobivaju mučninu (kinetoza, engl. simulator sickness). Zato se u VR-u vrijeme okvira ne optimizira „koliko se stigne“, nego se zadaje unaprijed kao budžet.
Pri 90 Hz vrijeme okvira (engl. frame time) iznosi 1000 / 90 = 11,1 ms. U to vrijeme procesor mora obraditi logiku, fiziku i pripremu poziva za crtanje, a grafička kartica iscrtati scenu dvaput, za lijevo i desno oko. Za laboratorij VR-1 cilj je da i procesor (CPU) i grafička kartica (GPU) budu gotovi za najviše 9,0 ms, što ostavlja oko 19 % rezerve za kompozitor pokretača, sustav i povremene vrhove opterećenja. Vrijeme od pokreta do fotona (engl. motion-to-photon latency) mora ostati najviše 20 ms.
Kad aplikacija ne stigne na vrijeme, pokretač (engl. runtime) pokušava pomoći: ponovno prikazuje prethodni okvir pomaknut prema novom položaju glave (reprojekcija) ili prebacuje aplikaciju na pola frekvencije. To sprječava najgore, ali slika pokretnih objekata postaje dvostruka i mutna. Reprojekcija je sigurnosna mreža, a ne način rada. Model koji ulazi u scenu mora zato imati poznat „trošak“, a skupina modela zajedno ne smije prijeći budžet scene.
Budžet scene: trokuti i pozivi za crtanje
Vrijeme okvira ne može se izravno pripisati modelu, ali se može pratiti preko dviju veličina koje modelar kontrolira: broja trokuta u vidnom polju i broja poziva za crtanje (engl. draw calls). Trokuti opterećuju prvenstveno grafičku karticu, a pozivi za crtanje procesor, koji svaki objekt s materijalom mora pripremiti i poslati. Za laboratorij VR-1 zadane su ove granice:
| Uređaj | Trokuta u sceni | Poziva za crtanje | Paket aplikacije |
|---|---|---|---|
| A — PC-VR, 2 × 2448 × 2448 px, 90 Hz | ≤ 750 000 | ≤ 1000 | ≤ 1,5 GB |
| B — samostalne naočale, 2 × 2064 × 2208 px, 90 Hz | ≤ 300 000 | ≤ 150 | ≤ 500 MB |
Samostalne naočale imaju procesor mobilnog tipa, pa je razlika u pozivima za crtanje gotovo sedmerostruka, a u trokutima dvaipolstruka. Scena se zato planira za slabiji uređaj, a jači dobiva višu kvalitetu (veće teksture, sjene, više razine detalja). Primjer planske raspodjele za uređaj B:
| Skupina objekata | Trokuta | Poziva | Napomena |
|---|---|---|---|
| Okoliš: pod, zidovi, stol, police | 120 000 | 50 | statično, spojeno po zonama, atlas |
| Pribor i alat na stolu | 60 000 | 40 | instanciranje jednakih predmeta |
| Robot MR-1 (LOD0) | 28 000 | 12 | 12 dijelova, jedan materijal po dijelu |
| Ruke korisnika | 16 000 | 4 | dvije ruke s kosturom |
| Ploče točaka interesa i oznake | 4 000 | 12 | 6 ploča s tekstom |
| Plan ukupno | 228 000 | 118 | rezerva 72 000 trokuta i 32 poziva |
Rezerva nije višak. Izmjerena scena na uređaju B nakon optimizacije imala je 262 000 trokuta i 138 poziva za crtanje, više od plana, jer sjene, sučelje, zraka za hvatanje i luk teleporta također troše budžet. Budžet bez rezerve prestaje vrijediti čim se doda prvi efekt.
Od CAD mreže do ciljanog modela
CAD izvor robota MR-1 je datoteka STEP od 38 MB, a njezina fina teselacija ima 312 000 trokuta. Ciljani LOD0 ima 28 000, dakle oko jedanaest puta manje. Taj se omjer ne postiže jednim klikom na decimaciju, nego redom koraka u kojem je svaki jeftiniji i sigurniji od sljedećeg. Zajedničke osnove parametarskog i slobodnog modeliranja opisane su u jedinicama 1.2 i 1.3, a ovdje je naglasak na redoslijedu.
- Uklonite ono što se ne vidi. Zupčanici u reduktoru, unutarnji namoti motora, vijci ispod pločice i ćelije baterije nikad se ne pokazuju. Brisanje skrivenih tijela u sklopovima s mnogo unutarnjih dijelova može smanjiti mrežu i za više od polovice (procjena, ovisi o sklopu), bez ikakve vidljive promjene.
- Teselirajte grublje ono što je zaobljeno. Na izvozu iz CAD sustava kordna i kutna tolerancija određuju broj trokuta na valjcima i zaobljenjima. Rupa Ø3 mm ne treba 64 segmenta.
- Decimirajte ciljano, a ne svugdje jednako. Decimacija (engl. decimation) spaja vrhove dok ne postigne zadani broj trokuta. Silueta dijela i površine koje se hvataju zadržavaju gustoću; ravne plohe poklopca mogu se svesti na nekoliko trokuta.
- Po potrebi napravite retopologiju. Za dijelove s animacijom ili deformacijom, kao što su ruke, mreža se gradi iznova, s pravilnim tokom rubova.
- Prenesite detalj u teksturu. Zaobljenja rubova, sitna rebra i natpisi peku se u normalu iz fine mreže (vidi 1.5).
U stereu oko vidi dubinu, pa se previše decimirani obrub ne može sakriti normalom: zaobljeni rub od osam segmenata izbliza izgleda kao prizma. Dobra je praksa na dijelovima koji se drže u ruci ostaviti barem 16 do 24 segmenta po punom krugu vidljivih valjaka, a na skrivenim i dalekim površinama manje.
Razine detalja (LOD)
Razina detalja (engl. level of detail, LOD) je jednostavnija inačica istog modela koja se prikazuje kad je objekt daleko i zauzima malo piksela. Za robot MR-1 predviđene su tri razine: LOD0 s 28 000 trokuta za prikaz izbliza, LOD1 s 9 000 trokuta od 1,5 m i LOD2 s 2 500 trokuta od 4 m. Svaka je razina oko tri puta lakša od prethodne, što je uobičajen omjer.
Prijelaz se u razvojnim okruženjima najčešće ne zadaje udaljenošću, nego veličinom na zaslonu: udjelom visine ili širine slike koji objekt zauzima. Tako prijelaz ostaje ispravan i kad se promijeni vidno polje ili rezolucija uređaja. Udaljenosti od 1,5 i 4 m dogovorene su za laboratorij VR-1 i služe kao polazište za namještanje. Robot širok 220 mm na 1,5 m zauzima oko 8,4° i na uređaju A oko 177 piksela, a na 4 m oko 3,2° i oko 66 piksela. Na toj veličini 2 500 trokuta daje otprilike jedan trokut na piksel površine, što je gornja razumna granica: sitniji trokuti troše vrijeme grafičke kartice, a ne dodaju ništa vidljivo.
Dvije pojave treba spriječiti. Iskakanje (engl. popping) je vidljiva promjena oblika pri prijelazu; smanjuje se tako da razine imaju istu siluetu i iste UV mape, a prijelaz se radi postupnim pretapanjem ako ga okruženje podržava. Treperenje prijelaza nastaje kad korisnik stoji točno na granici i pomiče glavu; sprječava se histerezom, malim razmakom između udaljenosti ulaska u nižu i povratka u višu razinu.
U ispitivanju laboratorija VR-1 jedan od dva neuspjela testna slučaja bio je pad na 76 sl/s na uređaju B pri pogledu na cijeli laboratorij. Iz kuta korisnika svi predmeti bili su istodobno u vidnom polju u najvišoj razini detalja. Pogreška je ispravljena razinama detalja za okoliš i pribor, a ne smanjenjem kvalitete robota koji je u središtu pažnje.
Spajanje mreža i pozivi za crtanje
Poziv za crtanje nastaje za svaku kombinaciju mreže i materijala koja je u vidnom polju. Scena od tisuću sitnih predmeta s po jednim materijalom troši tisuću poziva, čak i ako svi zajedno imaju malo trokuta. Za procesor samostalnih naočala to je presudno ograničenje. Većina okruženja za VR podržava iscrtavanje oba oka u jednom prolazu (engl. single-pass stereo, instanced stereo); bez toga se svaki poziv za crtanje izvršava dvaput.
Broj poziva smanjuje se ovim postupcima, redom od najjednostavnijeg:
- Spajanje statičnih mreža (engl. mesh merging) — police, kutije i oznake na istom zidu postaju jedna mreža s jednim materijalom. Spajati treba po zonama, a ne cijeli laboratorij, kako bi okruženje moglo izostaviti ono što je izvan vidnog polja.
- Atlas tekstura — preduvjet za spajanje: spojeni predmeti moraju dijeliti materijal, dakle i teksturu.
- Instanciranje (engl. instancing) — jednaki predmeti, na primjer odvijači ili stolice, crtaju se jednim pozivom s popisom položaja.
- Jedan materijal po dijelu — dio s tri utora za materijal troši tri poziva; spojite utore prije izvoza.
- Sjene samo gdje se vide — svaki objekt koji baca dinamičku sjenu iscrtava se još jednom za mapu sjene.
Interaktivni dijelovi robota MR-1 ne spajaju se, jer se svaki zasebno hvata i sklapa; ostaju dvanaest objekata i dvanaest poziva. Uštede se zato traže u okolišu. Na uređaju B scena je prije optimizacije imala 214 poziva i 72 sl/s, a nakon optimizacije 138 poziva, 262 000 trokuta i stabilnih 90 sl/s. Takvo smanjenje tipično daju upravo spajanje okoliša po zonama, atlas i isključivanje sjena malih predmeta. Na uređaju A ista scena daje 90 sl/s uz 7,8 ms rada grafičke kartice i najmanje 88 sl/s u najzahtjevnijem pogledu.
Provjera prije uvoza
Model koji uđe u razvojno okruženje s pogreškom najskuplje se popravlja: treba ga ponovno izvesti, uvesti i iznova povezati s logikom. Zato se prije svakog izvoza prolazi kontrolna lista. Za robot MR-1 u zapisu glTF (3,2 MB) izgleda ovako:
- Mjerilo i jedinice: 1 jedinica = 1 m; sklop robota mjeri 220 × 180 × 110 mm; transformacije su primijenjene, mjerilo objekata je 1.
- Osi: glTF koristi desni koordinatni sustav s osi Y prema gore; ako CAD ili program za mrežu radi sa Z prema gore, pretvorba se provjerava na izvozu, a naprijed robota gleda u dogovorenom smjeru.
- Ishodišta: šasija na dnu između kotača, kotači u osi vrtnje, priključna mjesta na svojim položajima.
- Mreža: triangulirana, bez duplih vrhova i bez rupa; normale okrenute prema van; broj trokuta po razinama 28 000 / 9 000 / 2 500.
- UV i materijali: prvi UV kanal bez razvlačenja, jedan materijal po dijelu, teksture 1024 px, ispravni prostori boja.
- Kolizija i nazivi: kolizijski oblici prisutni i imenovani prema pravilu okruženja; nazivi dijelova jednoznačni.
- Datoteka: veličina u očekivanom rasponu; probni uvoz u praznu scenu prije uvoza u glavni projekt.
Pažnja
Ne ocjenjujte model u pregledniku programa za modeliranje ni u prozoru razvojnog okruženja na zaslonu. Mjerilo, oštrinu tekstura i siluetu izbliza provjerite u naočalama, stojeći uz stol u sceni: pogreška od 10 % u mjerilu na zaslonu se ne vidi, a u naočalama se odmah osjeti.
Vrijeme okvira i iskorištenost budžeta scene
Računski prikaz iz frekvencije osvježavanja izračunava vrijeme okvira i ciljno vrijeme rada procesora i grafičke kartice uz zadanu rezervu, a zatim uspoređuje trokute i pozive za crtanje scene s granicama odabranog uređaja.
T = 1000 / f [ms] · Tc = T · (1 − r) · U = N / Nmax · 100 %
Računa vrijeme okvira i ciljno vrijeme rada procesora i grafičke kartice te iskorištenost budžeta trokuta i poziva za crtanje za odabrani uređaj.
Za zadane vrijednosti (90 Hz, rezerva 19 %, uređaj B, 262 000 trokuta i 138 poziva) vrijeme okvira je 11,1 ms, a ciljno vrijeme 9,0 ms, koliko je zadano za laboratorij VR-1. Scena koristi oko 87 % budžeta trokuta i 92 % budžeta poziva za crtanje: stane, ali pozivi su blizu granice, pa svaki novi predmet u okolišu treba ući u postojeću spojenu mrežu ili atlas. Vrijednosti prije optimizacije, 214 poziva, daju 143 % budžeta, što objašnjava pad na 72 sl/s. Isti broj trokuta i poziva na uređaju A koristi manje od 35 % budžeta trokuta i 14 % budžeta poziva.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| vrijeme okvira (engl. frame time) | vrijeme za izradu jedne slike; pri 90 Hz 11,1 ms |
| poziv za crtanje (engl. draw call) | naredba procesora grafičkoj kartici da iscrta jednu mrežu s jednim materijalom |
| razina detalja (engl. level of detail, LOD) | jednostavnija inačica modela za prikaz na većoj udaljenosti ili manjoj veličini na zaslonu |
| decimacija (engl. decimation) | automatsko smanjenje broja trokuta spajanjem vrhova uz čuvanje oblika |
| spajanje mreža (engl. mesh merging) | objedinjavanje više statičnih objekata u jednu mrežu s jednim materijalom radi manje poziva |
| instanciranje (engl. instancing) | crtanje više jednakih objekata jednim pozivom s popisom položaja |
| reprojekcija (engl. reprojection) | zamjena zakašnjelog okvira prethodnim, pomaknutim prema novom položaju glave |
| iskakanje (engl. popping) | vidljiva promjena oblika objekta pri prijelazu između razina detalja |
Provjeri se
Kratka provjera prije prelaska na sljedeću jedinicu. Odgovor se potvrđuje klikom, a obrazloženje se prikazuje odmah.
Pitanje 1 od 4
Koliko iznosi vrijeme okvira pri frekvenciji osvježavanja od 90 Hz?
T = 1000 / 90 = 11,1 ms. Cilj od 9,0 ms za CPU i GPU ostavlja rezervu od oko 19 %; 20 ms je granica od pokreta do fotona.
Pitanje 2 od 4
Scena na samostalnim naočalama ima 214 poziva za crtanje uz granicu od 150. Koji je postupak najučinkovitiji?
Pozivi za crtanje ovise o broju kombinacija mreže i materijala, a ne o trokutima. Spajanje okoliša po zonama s atlasom izravno smanjuje broj poziva.
Pitanje 3 od 4
Zašto se interaktivni dijelovi robota MR-1 ne spajaju u jednu mrežu?
Spojena mreža miče se kao cjelina. Dijelovi koji se zasebno hvataju ostaju zasebni objekti; uštede se traže u okolišu.
Pitanje 4 od 4
Kako se sprječava treperenje prijelaza između razina detalja kad korisnik stoji na granici?
Histereza zahtijeva da se objekt primakne malo bliže za povratak u višu razinu nego što je bio kad je prešao u nižu, pa sitni pokreti glave ne mijenjaju razinu.
Odgovoreno 0 od 4.
Vježbe uz jedinicu
Gradivo ove jedinice priprema za sljedeće vježbe: