Preskoči na sadržaj
FORTRONIQ

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.

Moći ću:
  • 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.

11,1 ms cilj 9,0 0 ms 7,8 ms 13,9 ms ≤ 11,1 A: GPU B prije: 72 sl/s B poslije: 90 sl/s 90 Hz
Slika 1.7.1 — Budžet okvira laboratorija VR-1. Tirkizna crta je granica od 11,1 ms pri 90 Hz, iscrtkana cilj od 9,0 ms. Uređaj B prije optimizacije trošio je 13,9 ms po okviru (72 sl/s), nakon nje drži 90 sl/s.

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đajTrokuta u sceniPoziva za crtanjePaket 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 objekataTrokutaPozivaNapomena
Okoliš: pod, zidovi, stol, police120 00050statično, spojeno po zonama, atlas
Pribor i alat na stolu60 00040instanciranje jednakih predmeta
Robot MR-1 (LOD0)28 0001212 dijelova, jedan materijal po dijelu
Ruke korisnika16 0004dvije ruke s kosturom
Ploče točaka interesa i oznake4 000126 ploča s tekstom
Plan ukupno228 000118rezerva 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.

  1. 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.
  2. 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.
  3. 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.
  4. Po potrebi napravite retopologiju. Za dijelove s animacijom ili deformacijom, kao što su ruke, mreža se gradi iznova, s pravilnim tokom rubova.
  5. 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.

LOD0 · 28 000 LOD1 · 9 000 LOD2 · 2 500 650 px na 0,4 m 177 px na 1,5 m 66 px na 4 m 0 1,5 m 4 m udaljenost oko
Slika 1.7.2 — Razine detalja robota MR-1 po udaljenosti. Ispod svake razine je približna širina robota (220 mm) na zaslonu uređaja A s oko 21 piksela po stupnju.

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:

  1. Mjerilo i jedinice: 1 jedinica = 1 m; sklop robota mjeri 220 × 180 × 110 mm; transformacije su primijenjene, mjerilo objekata je 1.
  2. 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.
  3. Ishodišta: šasija na dnu između kotača, kotači u osi vrtnje, priključna mjesta na svojim položajima.
  4. Mreža: triangulirana, bez duplih vrhova i bez rupa; normale okrenute prema van; broj trokuta po razinama 28 000 / 9 000 / 2 500.
  5. UV i materijali: prvi UV kanal bez razvlačenja, jedan materijal po dijelu, teksture 1024 px, ispravni prostori boja.
  6. Kolizija i nazivi: kolizijski oblici prisutni i imenovani prema pravilu okruženja; nazivi dijelova jednoznačni.
  7. 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 %

Vrijeme okvira i budžet sceneRačunski prikaz

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.

Vrijeme okvira—
Ciljno vrijeme CPU i GPU—
Iskorištenost budžeta trokuta—
Iskorištenost budžeta poziva—

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

PojamZnač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: