MODUL 3 · RAZVOJ OKRUŽENJA PROŠIRENE STVARNOSTI
Nastavna jedinica 3.1
Izrada softverskih segmenata tehnologije proširene stvarnosti
Programski dio okruženja proširene stvarnosti ne nastaje pisanjem koda nego slaganjem scene. Prvo se bira razvojno okruženje i okvir koji prati prostor, zatim se postavlja projekt, uvoze model i materijali te se objekti slože u stablo s kamerom i izvorima svjetla. Tek na to dolaze sastavnice i skripte koje sceni daju ponašanje.
- odabrati razvojno okruženje i okvir prema zahtjevima primjene
- postaviti projekt s ispravnim mjernim jedinicama i ciljnom platformom
- uvesti model i materijale te provjeriti mjerilo i ishodište
- složiti scenu s kamerom, izvorima svjetla i hijerarhijom objekata
- objasniti ulogu sastavnica i skripti u ponašanju scene
- procijeniti opterećenje prikaza prema broju trokuta i vrsti uređaja
Od zahtjeva do projekta
Programski dio okruženja proširene stvarnosti obično se naziva softverskim segmentom. Taj segment nije jedan program nego pet poslova koji rade zajedno: praćenje prostora, prikaz sadržaja, logika zadatka, korisničko sučelje i veza s podacima. Ako bilo koji od njih zakaže, korisnik to vidi kao istu pogrešku — uputa nije na mjestu ili je nema.
Posao počinje zahtjevom, ne programom. Za projekt AR-1 zahtjev glasi: tehničar tabletom snimi natpisnu pločicu na ogradi ćelije paletizacije i dobije osam koraka zamjene prihvatnice na robotu ZR-1. Robot ima šest osi, nosivost 20 kg i doseg 1650 mm, a u ćeliji radi uz CNC glodalicu. Iz te jedne rečenice slijedi gotovo sve ostalo: potrebna je meta, potreban je model prihvatnice, potrebno je osam koraka s prelaskom naprijed i natrag te uređaj koji se može nositi u pogon.
Prije otvaranja projekta korisno je napisati popis onoga što scena mora sadržavati. Za AR-1 taj popis ima šest stavki: meta, model prihvatnice, osam ploča s uputom, strelice koje pokazuju mjesto zahvata, gumbi za kretanje po koracima i zapis o dovršenom poslu. Popis je kratak, ali svaka stavka poslije postaje objekt u sceni, pa se time dobiva i prva gruba građa projekta.
| Posao softverskog segmenta | Što obavlja | Na projektu AR-1 |
|---|---|---|
| Praćenje prostora | određuje gdje je uređaj i što je prepoznao | prepoznavanje natpisne pločice i ploha ograde |
| Prikaz sadržaja | iscrtava modele, tekst i oznake u vidnom polju | model prihvatnice i ploče s uputom |
| Logika zadatka | vodi redoslijed i stanja | osam koraka, naprijed, natrag, dovršeno |
| Korisničko sučelje | prima naredbe i daje povratnu obavijest | gumbi, natpisi, poruka o gubitku praćenja |
| Veza s podacima | dohvaća i šalje podatke izvan aplikacije | oznaka ćelije, potvrda o obavljenom zahvatu |
Ovih pet poslova nisu zasebne aplikacije nego slojevi iste aplikacije. U razvojnom okruženju oni se vide kao skupine objekata u sceni i skripte koje su im pridružene. Zato se i redoslijed rada drži tog rasporeda: prvo praćenje i prikaz, pa logika, pa sučelje, a veza s podacima na kraju.
Odabir razvojnog okruženja i okvira
Za izradu treba dvoje. Razvojno okruženje (engine) je program u kojem se slaže scena, uvoze modeli, postavljaju materijali i pokreće izgradnja aplikacije. Okvir za proširenu stvarnost (AR framework) je programski sloj koji od kamere i inercijskih osjetnika uređaja daje položaj uređaja u prostoru, popis prepoznatih ploha i obavijest da je meta pronađena.
Okvir dolazi od proizvođača operacijskog sustava ili od proizvođača naočala. Razvojno okruženje ga ne zamjenjuje nego mu pristupa preko svojeg paketa. Zbog toga vrijedi pravilo koje početnici često previde: mogućnosti okruženja ne znače ništa ako ih okvir na odabranom uređaju ne podržava. Ako uređaj nema dubinski osjetnik, zaklanjanje digitalnog objekta stvarnim predmetom neće raditi ma koliko dobar bio program.
Između okruženja i okvira često stoji i međusloj (middleware), paket koji istu scenu prevodi za više okvira. Prednost je da se isti projekt izgradi i za tablet i za naočale. Cijena je jedan sloj više, sporija dijagnostika pogrešaka i kašnjenje za novim mogućnostima okvira.
| Mjerilo pri odabiru | Pitanje koje se postavlja | Odluka na AR-1 |
|---|---|---|
| Ciljni uređaj | radi li okvir na tabletu, na naočalama ili na oboma | tablet kao glavni uređaj, naočale kao druga inačica |
| Vrsta prepoznavanja | treba li meta, ploha ili oboje | meta na ogradi, ploha poda za odlaganje modela |
| Rad s 3D modelima | koje formate uvozi i kako obrađuje materijale | glTF s teksturama 1024 × 1024 |
| Sučelje | ima li gotove sastavnice za prostorne ploče i gumbe | ploče s uputom i gumbi naprijed i natrag |
| Izgradnja | koliko traje i koliko je koraka do instalacije | izgradnja za Android, poslije za naočale |
| Znanje ekipe | u čemu su članovi već radili | okruženje poznato iz prijašnjih vježbi |
Zapamtite
Prvo se bira uređaj, pa okvir, pa razvojno okruženje — a ne obrnuto. Odabir okruženja prije uređaja redovito završi otkrićem da tražena mogućnost na uređaju ne postoji, i to tek pri prvoj izgradnji, kad je scena već složena.
Postavke projekta
Novi projekt ne počinje objektima nego postavkama. Prva i najvažnija je mjerna jedinica. U okruženjima za proširenu stvarnost jedna jedinica scene odgovara jednom metru stvarnog prostora. Ako je model izvezen u milimetrima, prihvatnica duljine 180 mm pojavit će se kao predmet od 180 metara. Zato se mjerilo provjerava odmah, na prvom uvezenom modelu.
Druga postavka je ciljna platforma. Ona određuje kako se scena prevodi, koje su najveće dopuštene veličine tekstura i koje se knjižnice uključuju u paket. Za AR-1 ciljna je platforma Android, jer je uređaj A tablet od 10,5 inča s 6 GB radne memorije i kamerom 1920 × 1080 pri 30 sličica u sekundi.
Treća skupina postavki odnosi se na prikaz: način osvjetljenja, razina zaglađivanja rubova, sjene i najveći broj sličica u sekundi. Na mobilnom uređaju te postavke izravno određuju hoće li aplikacija dosegnuti cilj od 30 sličica u sekundi. Sjene u stvarnom vremenu i visoko zaglađivanje najčešće su prvo što se isključi kad prikaz ne stigne.
Četvrta skupina je red u projektu. Mape se imenuju unaprijed — modeli, materijali, teksture, skripte, scene, zvuk — a nazivi datoteka dobivaju oznaku projekta. Projekt se od prvog dana vodi u sustavu za praćenje inačica, jer se scena mijenja svaki dan, a povratak na prethodno stanje inače nije moguć.
AR-1/
modeli/ prihvatnica.gltf (12 000 trokuta)
teksture/ prihvatnica_boja_1024.png
skripte/ UpraviteljKoraka, PratiteljMete
scene/ glavna.scena
postavke/ jedinica = 1 m, platforma = AndroidPažnja
Postavke prikaza i mjerne jedinice mijenjaju se na početku, dok je scena prazna. Promjena mjerila kad je u sceni već pedeset objekata znači ručno ispravljanje svakoga od njih, jer se položaji ne skaliraju sami.
Uvoz modela i materijala
Model prihvatnice dolazi iz prvog modula, pripremljen za prikaz u stvarnom vremenu: 12 000 trokuta, teksture 1024 × 1024, zapis glTF sa sažimanjem, ukupno 2,1 MB. Uvoz se ne svodi na povlačenje datoteke u projekt. Nakon uvoza provjeravaju se četiri stvari: mjerilo, ishodište, orijentacija i materijali.
Mjerilo se provjerava usporedbom s poznatom mjerom. U scenu se postavi kocka stranice 0,1 m i uz nju model; ako je prihvatnica približno dvostruko dulja od kocke, mjerilo je ispravno. Ishodište mora biti na mjestu kojim se model prislanja uz stvarni predmet — kod prihvatnice je to prirubnica, a ne središte obuhvatnog kvadra.
Orijentacija se usklađuje s okruženjem, jer se programi razlikuju po tome koja je os okomita. Model uvezen iz programa u kojem je okomita os Z u okruženju s okomitom osi Y pojavljuje se položen. Ispravak se radi jednom, pri uvozu, a ne rotacijom u sceni pri svakom postavljanju.
Materijali se pri uvozu često izgube ili zamijene zamjenskim materijalom. Teksturu treba provjeriti na uređaju, ne samo na zaslonu računala: zaslon tableta u pogonu ima drukčiju svjetlinu, a ono što na monitoru izgleda kao jasna razlika dviju nijansi na suncu se stopi.
| Što se provjerava pri uvozu | Kako se provjerava | Vrijednost na AR-1 |
|---|---|---|
| Mjerilo | usporedba s kockom poznate stranice | duljina prihvatnice 180 mm |
| Ishodište | postavljanje modela u ishodište scene | na prirubnici prihvatnice |
| Orijentacija | pogled odozgo i sa strane | okomita os Y, prirubnica prema gore |
| Broj trokuta | podatak o mreži u prozoru uvoza | 12 000 |
| Teksture | pregled u sceni i na uređaju | 1024 × 1024, jedan skup |
| Veličina zapisa | podatak o datoteci | 2,1 MB sa sažimanjem |
Građa scene: kamera, svjetlo i hijerarhija
Scena u proširenoj stvarnosti razlikuje se od obične 3D scene po jednoj stvari: kamera nije slobodna. Kamera proširene stvarnosti vezana je uz uređaj, a njezin položaj računa okvir iz slike i osjetnika. Programer je ne pomiče; pomiče je korisnik kad se kreće po pogonu. Zbog toga se sadržaj ne postavlja prema kameri nego prema sidru.
Izvori svjetla postoje i dalje, ali im je uloga drukčija. Cilj nije osvijetliti prostor — prostor je stvaran i već je osvijetljen — nego model uklopiti u zatečeno osvjetljenje. Zato se najčešće koristi jedan usmjereni izvor i blago ambijentno svjetlo, a moderni okviri procjenjuju jakost i smjer stvarnog svjetla iz slike kamere pa te vrijednosti prenose u scenu.
Objekti se slažu u stablo. Roditelj nosi dijete: kad se pomakne roditelj, pomiče se i dijete. U proširenoj stvarnosti to je ključno jer se sve što mora ostati na mjestu objesi ispod sidra. Model prihvatnice, ploče s uputom i strelice djeca su istog sidra, pa ih ispravak položaja sidra pomiče zajedno.
Uz stablo ide i red u imenima. Objekt nazvan Kocka (3) nakon dva tjedna nitko ne zna čemu služi. Nazivi se sastavljaju od uloge i broja: Korak_03_Ploca, Korak_03_Strelica. Time se dobiva i mogućnost da skripta objekte pronalazi po nazivu, pa se osam koraka ne mora ručno povezivati.
Sastavnice i skripte
Objekt sam po sebi ne radi ništa. Ponašanje mu daju sastavnice (components), dijelovi koji se objektu pridružuju i svaki mu dodaju jedno svojstvo: položaj i mjerilo, prikaz mreže, materijal, sudarač za dodir, zvuk, skriptu. Objekt je time popis sastavnica, a scena popis objekata.
Skripta je sastavnica koja se piše. Njezin je posao reagirati na događaje: meta je pronađena, korisnik je pritisnuo gumb, prošla je sekunda, praćenje je izgubljeno. Za AR-1 dovoljne su tri skripte. Prva prati metu i javlja je li vidljiva. Druga vodi osam koraka i pamti na kojem se trenutno stoji. Treća upravlja prikazom ploča i strelica prema trenutnom koraku.
Skripta se ne piše kao jedan dugačak niz naredbi nego kao odgovor na stanje. Upravitelj koraka drži broj trenutnog koraka i na svaku promjenu radi tri stvari: sakrije sadržaj prethodnog koraka, prikaže sadržaj novoga i osvježi natpis s brojem koraka. Time se osam koraka rješava jednim postupkom, a ne osmerostrukim ponavljanjem istog koda.
na promjenu koraka (n):
sakrij sadrzaj koraka (n - 1)
prikazi sadrzaj koraka (n)
natpis = "Korak " + n + " od 8"
ako je n = 8: omoguci gumb ZavrsenoOpterećenje prikaza ovisi o tome koliko se trokuta iscrtava i koliko objekata istodobno stoji u sceni. Zato se sadržaj koraka koji nije na redu ne samo skriva nego i isključuje, kako ga uređaj ne bi obrađivao. Sljedeći prikaz pokazuje kako broj trokuta i vrsta uređaja utječu na očekivanu brzinu prikaza.
Prikaz procjenjuje kako broj trokuta u sceni, vrsta uređaja i broj koraka upute utječu na brzinu prikaza i zauzeće memorije. Cilj na projektu AR-1 je najmanje 30 sličica u sekundi i najviše 850 MB radne memorije.
Prikaz je gruba procjena, ali dobro pokazuje red veličine. Model od 12 000 trokuta uz osam koraka na tabletu daje oko 35 sličica u sekundi, dakle tek pet iznad cilja. To je malo, jer se u pogonu brzina dodatno smanji kad se uređaj zagrije. Na naočalama, koje sliku moraju iscrtati za svako oko, ista scena već pada ispod cilja, pa se za njih smanjuje razina detalja.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| Softverski segment | Programski dio okruženja: praćenje, prikaz, logika, sučelje i veza s podacima. |
| Razvojno okruženje | Program u kojem se slaže scena i izgrađuje aplikacija za odabrani uređaj. |
| Okvir za proširenu stvarnost | Sloj koji iz kamere i osjetnika daje položaj uređaja, plohe i mete. |
| Međusloj | Paket koji istu scenu prevodi za više okvira i uređaja. |
| Hijerarhija objekata | Stablo u kojem pomak roditelja pomiče svu njegovu djecu. |
| Sastavnica | Dio pridružen objektu koji mu daje jedno svojstvo ili ponašanje. |
| Kamera proširene stvarnosti | Kamera čiji položaj u sceni računa okvir iz slike i osjetnika uređaja. |
Provjeri se
Kratka provjera prije prelaska na sljedeću jedinicu. Odgovor se potvrđuje klikom, a obrazloženje se prikazuje odmah.
Pitanje 1 od 5
Čemu u okruženju za proširenu stvarnost odgovara jedna jedinica scene?
Jedinica scene jednaka je metru stvarnog prostora, pa se model izvezen u milimetrima mora preračunati pri uvozu.
Pitanje 2 od 5
Zašto se sav sadržaj koji mora ostati na mjestu objesi ispod sidra?
Roditelj u stablu nosi djecu, pa ispravak položaja sidra pomiče sve objekte ispod njega odjednom.
Pitanje 3 od 5
Što određuje okvir za proširenu stvarnost, a ne razvojno okruženje?
Okvir iz slike kamere i osjetnika daje položaj uređaja, plohe i pronađene mete.
Pitanje 4 od 5
Koja se postavka projekta mora ispraviti prije nego što se u scenu unese više objekata?
Promjena mjerila kasnije traži ručni ispravak položaja svakog objekta, jer se položaji ne skaliraju sami.
Pitanje 5 od 5
Koja je uloga izvora svjetla u sceni proširene stvarnosti?
Prostor je stvaran i već osvijetljen; svjetlo u sceni služi da se digitalni model uklopi u njega.
Odgovoreno 0 od 5.