Prostorové mapování

Prostorové mapování poskytuje podrobnou reprezentaci povrchů reálného světa v prostředí kolem HoloLensu, což vývojářům umožňuje vytvořit přesvědčivé prostředí hybridní reality. Sloučením reálného světa s virtuálním světem může aplikace vytvářet hologramy jako skutečné. Aplikace také můžou přirozeněji odpovídat očekáváním uživatelů tím, že poskytují známé reálné chování a interakce.


Podpora zařízení

Funkce HoloLens (1. generace) HoloLens 2 Imerzivní náhlavní soupravy
Prostorové mapování ✔️ ✔️

Proč je prostorové mapování důležité?

Prostorové mapování umožňuje umístit objekty na reálné povrchy. To pomáhá ukotvit objekty v uživatelském světě a využívat upozornění na hloubku reálného světa. Occluding hologramů založených na jiných hologramech a objektech reálného světa pomáhá uživatele přesvědčit, že se tyto hologramy ve skutečnosti nacházejí ve svém prostoru. Hologramy plovoucí v prostoru nebo pohybující se s uživatelem se nebudou cítit jako skutečné. Pokud je to možné, umístěte předměty pro pohodlí.

Vizualizujte povrchy při umísťování nebo přesouvání hologramů (použijte promítanou mřížku). To uživatelům pomůže zjistit, kam nejlépe umístit hologramy, a ukáže, jestli místo, kam se hologram snaží umístit, není namapované. Pokud se dostanou do příliš velkého úhlu, můžete k uživateli použít "reklamní předměty".

Základní přehled

Okové povrchy pokrývající místnost
Příklad sítě prostorového mapování pokrývající místnost

Dva primární typy objektů používané pro prostorové mapování jsou "Spatial Surface Observer" a "Spatial Surface".

Aplikace poskytuje pozorovateli prostorového povrchu jeden nebo více ohraničující svazky, které definují oblasti prostoru, ve kterých chce aplikace přijímat data prostorového mapování. Pro každý z těchto svazků poskytne prostorové mapování aplikaci sadu prostorových ploch.

Tyto svazky můžou být nehybné (v pevném umístění na základě reálného světa) nebo mohou být připojené k HoloLensu (přesouvají se, ale neotáčí se, když holoLens prochází prostředím). Každý prostorový povrch popisuje skutečné povrchy v malém prostoru představované jako trojúhelníková síť připojená k světu uzamčenému prostorovým souřadnicovým systémům.

HoloLens shromažďuje nová data o prostředí a při změnách prostředí se objeví, zmizí a změní se prostorové povrchy.

Ukázka konceptů návrhu spatial awareness

Pokud se chcete podívat na koncepty návrhu prostorového povědomí v akci, podívejte se na video s ukázkou návrhu hologramů – Spatial Awareness níže. Až budete hotovi, pokračujte, abyste se podrobněji ponořili do konkrétních témat.

Toto video bylo převzato z aplikace "Navrhování hologramů" HoloLens 2. Stáhněte si a užijte si kompletní prostředí zde.

Prostorové mapování vs. world understanding worldmesh

Pro HoloLens 2 je možné dotazovat statickou verzi dat prostorového mapování pomocí sady SDK pro porozumění scéně (nastavení EnableWorldMesh). Tady jsou rozdíly mezi dvěma způsoby přístupu k datům prostorového mapování:

  • Rozhraní API prostorového mapování:
    • Omezený rozsah: Data prostorového mapování dostupná pro aplikace v omezené velikosti uložená v mezipaměti "bublina" kolem uživatele.
    • Poskytuje aktualizace oblastí změněné sítě s nízkou latencí prostřednictvím událostí SurfacesChanged.
    • Proměnná úroveň podrobností řízená parametrem Trojúhelníky na metr krychlový.
  • Sada SDK pro porozumění scéně:
    • Neomezený rozsah – poskytuje všechna naskenovaná data prostorového mapování v rámci poloměru dotazu.
    • Poskytuje statický snímek dat prostorového mapování. Získání aktualizovaných dat prostorového mapování vyžaduje spuštění nového dotazu pro celou síť.
    • Konzistentní úroveň podrobností řízená nastavením RequestedMeshLevelOfDetail

Co ovlivňuje kvalitu prostorového mapování?

Četnost a závažnost těchto chyb může ovlivnit několik faktorů, které jsou zde podrobně popsány. Aplikaci byste ale měli navrhnout tak, aby uživatel mohl dosáhnout svých cílů i v případě chyb v datech prostorového mapování.

Obvyklé scénáře použití

Ilustrace běžných scénářů použití prostorového mapování: Umístění, okluze, fyzika a navigace

Umístění

Prostorové mapování poskytuje aplikacím příležitost prezentovat uživateli přirozené a známé formy interakce; Co by mohlo být přirozenější než umístění telefonu na stůl?

Omezení umístění hologramů (nebo obecněji jakéhokoliv výběru prostorových umístění) tak, aby ležely na površích, poskytuje přirozené mapování z 3D (bod v prostoru) na 2D (bod na povrchu). Tím se sníží množství informací, které uživatel musí aplikaci poskytnout, a interakce uživatele se zkrátí, zjednoduší a zpřesní. To je pravda, protože "vzdálenost daleko" není něco, co bychom byli zvyklí na fyzickou komunikaci s jinými lidmi nebo s počítači. Když ukážeme prstem, určujeme směr, ale ne vzdálenost.

Důležitým upozorněním je, že když aplikace odvodí vzdálenost od směru (například pomocí raycastu podél směru pohledu uživatele, aby našla nejbližší prostorovou plochu), musí to přinést výsledky, které uživatel dokáže spolehlivě předpovědět. Jinak uživatel ztratí smysl pro kontrolu, což může být rychle frustrující. Jednou z metod, která s tím pomůže, je provést více raycastů místo jednoho. Agregační výsledky by měly být plynulejší a předvídatelnější, méně náchylné k vlivu přechodných "odlehlejších" výsledků (příčinou můžou být paprsky procházející malými otvory nebo dopadajícími na malé části geometrie, o které uživatel neví). Agregaci nebo vyhlazování lze také provádět v průběhu času; Můžete například omezit maximální rychlost, při které se hologram může lišit ve vzdálenosti od uživatele. Jednoduché omezení minimální a maximální hodnoty vzdálenosti může také pomoct, aby přesouvané hologramy náhle neodlétly do vzdálenosti nebo se nezhroutily zpět do obličeje uživatele.

Aplikace mohou také použít tvar a směr povrchů k vedení umístění hologramu. Holografická židle by neměla pronikat stěnami a měla by být zarovnaná s podlahou, i když je mírně nerovnoměrná. Tento druh funkcí by pravděpodobně závisel na použití fyzikálních kolizí místo paprskových přenosů, ale podobné aspekty budou platit. Pokud má umístěný hologram mnoho malých mnohoúhelníků, které vyčnívají, jako jsou nohy na židli, může mít smysl rozšířit fyzikální reprezentaci těchto mnohoúhelníků na něco širšího a plynulejšího, aby byly schopny klouzat po prostorových površích bez přichytávání.

V krajním případě je možné uživatelský vstup zcela zjednodušit a prostorové povrchy se dají použít k zcela automatickému umístění hologramů. Aplikace může například umístit holografický světelný spínač někam na zeď, aby ho uživatel mohl stisknout. Stejné upozornění ohledně předvídatelnosti platí i zde; Pokud uživatel očekává kontrolu nad umístěním hologramu, ale aplikace ne vždy umístí hologramy tam, kde očekává (pokud se přepínač světla objeví někde, kam se uživatel nemůže dostat), bude to frustrující. To může být ve skutečnosti horší udělat automatické umístění, které vyžaduje uživatele opravy určitou dobu, než jen vyžadovat, aby uživatel vždy dělat umístění sami; protože se očekává úspěšné automatické umístění, ruční oprava se cítí jako zátěž!

Mějte také na paměti, že schopnost aplikace používat prostorové povrchy k umístění závisí do značné míry na prostředí aplikace ke skenování. Pokud surface nebyl naskenován, nelze ho použít k umístění. Je na aplikaci, aby to uživateli vyjasnila, aby mohl buď skenovat nové povrchy, nebo vybrat nové umístění.

Vizuální zpětná vazba pro uživatele je při umísťování nejdůležitější. Uživatel potřebuje vědět, kde je hologram založený na nejbližší ploše s uzemňujícími efekty. Měl by pochopit, proč je pohyb hologramu omezený (například kvůli kolizím s jiným blízkým povrchem). Pokud nemůžou umístit hologram do aktuálního umístění, měla by vizuální zpětná vazba ujasnit, proč ne. Pokud se například uživatel pokouší umístit holografický gauč přilepený napůl do zdi, části gauče, které jsou za stěnou, by měly pulzovat rozzlobenou barvou. Nebo naopak, pokud aplikace nemůže najít prostorovou plochu v místě, kde uživatel vidí povrch skutečného světa, měla by to aplikace jasně uvést. Tohoto účelu může dosáhnout zjevná absence uzemnění v této oblasti.

Okluze

Jedním z hlavních použití prostorových mapových ploch je jednoduše zakryt hologramy. Toto jednoduché chování má obrovský dopad na vnímanou realismus hologramů a pomáhá vytvořit viscerální smysl, který ve skutečnosti zabírá stejný fyzický prostor jako uživatel.

Okluze také poskytuje informace uživateli; pokud se zdá, že je hologram zasutý povrchem reálného světa, poskytuje to další vizuální zpětnou vazbu, pokud jde o prostorové umístění tohoto hologramu ve světě. Naopak, okluze může také užitečné skrýt informace před uživatelem; Occluding hologramů za zdmi může intuitivním způsobem snížit vizuální nepotřebnost. Pokud chce uživatel hologram skrýt nebo zobrazit, musí jen pohnout hlavou.

Okluze lze také použít k vytvoření očekávání pro přirozené uživatelské rozhraní založené na známých fyzických interakcích; Pokud je hologram zakrytý povrchem, je to proto, že je tento povrch pevný, takže uživatel by měl očekávat, že se hologram s tímto povrchem srazí a neprojde přes něj.

Někdy je okluze hologramů nežádoucí. Pokud uživatel potřebuje pracovat s hologramem, musí ho vidět, i když je za povrchem reálného světa. V takových případech má obvykle smysl vykreslit takový hologram jinak, když je osamocený (například snížením jeho jasu). Uživatel tak bude moct hologram vizuálně najít, ale stále bude vědět, že je za něčím.

Fyzika

Použití fyzikální simulace je dalším způsobem, jak lze prostorové mapování použít k posílení přítomnosti hologramů ve fyzickém prostoru uživatele. Když se mi holografický gumový míček vyhodí ze stolu, odrazí se po podlaze a zmizí pod gaučem, může pro mě být těžké uvěřit, že tam není.

Fyzikální simulace také poskytuje možnost, aby aplikace používala přirozené a známé fyzikální interakce. Přesunutí kusu holografického nábytku po podlaze bude pro uživatele pravděpodobně jednodušší, pokud nábytek reaguje, jako by se klouzaly po podlaze s odpovídající setrvačností a třením.

Pokud chcete generovat realistické fyzické chování, budete pravděpodobně muset provést zpracování sítí , jako je vyplnění otvorů, odstranění plovoucích halucinací a vyhlazování hrubých povrchů.

Budete také muset zvážit, jak prostředí skenování vaší aplikace ovlivňuje její fyzikální simulaci. Za prvé, chybějící povrchy se s ničím nesrazí; co se stane, když se gumová koule vysune z chodby a z konce známého světa? Za druhé, musíte se rozhodnout, jestli budete i nadále reagovat na změny v prostředí v průběhu času. V některých případech budete chtít reagovat co nejrychleji. říká, jestli uživatel používá dveře a nábytek jako pohyblivé barikády v obraně před bouří příchozích římských šípů. V jiných případech ale budete chtít nové aktualizace ignorovat. Jízda holografického sportovního vozu kolem závodní dráhy na podlaze nemusí být najednou tak zábavná, pokud se váš pes rozhodne sedět uprostřed dráhy.

Aplikace můžou pomocí prostorových mapových dat udělit holografickým znakům (neboli agentům) možnost pohybovat se v reálném světě stejným způsobem jako skutečná osoba. To může pomoct posílit přítomnost holografických znaků tím, že je omezíte na stejnou sadu přirozeného a známého chování, jaké má uživatel a jeho přátelé.

Možnosti navigace můžou být užitečné i pro uživatele. Jakmile je v dané oblasti sestavena navigační mapa, může být sdílena, aby poskytovala holografické pokyny pro nové uživatele, kteří s tímto umístěním nejsou obeznámeni. Tato mapa by mohla být navržena tak, aby pomohla udržet plynulý provoz chodců nebo aby se zabránilo nehodám v nebezpečných místech, jako jsou staveniště.

Klíčovými technickými problémy souvisejícími s implementací navigačních funkcí bude spolehlivá detekce pochozích ploch (lidé nechodí po stolech!) a elegantní přizpůsobení změnám prostředí (lidé neprojdou zavřenými dveřmi!). Než bude síť použitelná pro plánování cest a navigaci pomocí virtuálního znaku, může vyžadovat určité zpracování . Vyhlazování sítě a odstranění halucinací může pomoct zabránit tomu, aby se znaky zasekaly. Můžete také chtít výrazně zjednodušit síť, abyste urychlili plánování cest a navigační výpočty vaší postavy. Těmto výzvám se dostalo velké pozornosti při vývoji technologie videoher a existuje spousta dostupné odborné literatury k těmto tématům.

Předdefinované funkce NavMesh v Unity nelze ve výchozím nastavení použít pro prostorové mapování povrchů, protože tyto povrchy nejsou známé, dokud aplikace nesstartuje. Za běhu ale můžete vytvořit NavMesh pomocí instalace NavMeshComponents. Všimněte si, že systém prostorového mapování neposkytuje informace o površích daleko od aktuálního umístění uživatele; Pokud chcete vytvořit mapu velké oblasti, musí si aplikace "zapamatovat" povrchy. Můžete také zvýšit nastavení rozsahů pozorování v profilu prostorového povědomí, čímž se zvětší oblast, na které můžete vytvořit NavMesh.

Vizualizace

Většinou je vhodné, aby prostorové povrchy byly neviditelné; Minimalizovat vizuální nepotřebné a nechat skutečný svět mluvit sám za sebe. Někdy je však užitečné vizualizovat plochy prostorového mapování přímo, i když jsou viditelné jejich skutečné protějšky.

Když se například uživatel pokouší umístit hologram na povrch (například umístit holografickou skříňku na zeď), může být užitečné hologram "uzemnění" tím, že na povrch odlijí stín. Uživatel tak získá mnohem jasnější představu o přesné fyzické blízkosti mezi hologramem a povrchem. Toto je také příklad obecnějšího postupu vizuálního "náhledu" změny před tím, než se k ní uživatel potvrdí.

Díky vizualizaci povrchů může aplikace s uživatelem sdílet své znalosti prostředí. Holografická desková hra může například vizualizovat vodorovné plochy, které identifikovala jako "tabulky", takže uživatel ví, kam má přejít, aby mohl pracovat.

Vizualizace povrchů může být užitečný způsob, jak zobrazit uživatelem blízké prostory, které jsou skryté v zobrazení. To by mohlo poskytnout uživateli přístup ke své kuchyni (a ke všem hologramům, které obsahují) z jejich obývacího pokoje.

Povrchové sítě poskytované prostorovým mapováním nemusí být zvlášť "čisté". Je důležité je správně vizualizovat. Tradiční výpočty osvětlení můžou vizuálně rušit chyby v normálu povrchu, zatímco "čisté" textury promítané na povrch mohou pomoci dodat jí přehlednější vzhled. Před vykreslením povrchů je také možné provést zpracování sítě , aby se zlepšily vlastnosti sítě.

Poznámka

HoloLens 2 implementuje nové prostředí Scene Understanding Runtime, které vývojářům Mixed Reality poskytuje strukturovanou reprezentaci prostředí na vysoké úrovni, která má zjednodušit implementaci umístění, okluze, fyziky a navigace.

Použití surface observeru

Výchozím bodem pro prostorové mapování je pozorovatel povrchu. Tok programu je následující:

  • Vytvoření objektu pozorovatele na povrchu
    • Zadejte jeden nebo více prostorových svazků, abyste definovali oblasti zájmu, ve kterých chce aplikace přijímat data prostorového mapování. Prostorový objem je jednoduše obrazec definující oblast prostoru, jako je například koule nebo krabice.
    • Pomocí prostorového svazku se světem uzamčeným prostorovým souřadnicovým systémem identifikujte pevnou oblast fyzického světa.
    • Pomocí prostorového svazku aktualizovaného každého snímku pomocí prostorového souřadnicového systému uzamčeného tělem identifikujte oblast prostoru, která se pohybuje (ale neotáčí) s uživatelem.
    • Tyto prostorové svazky mohou být později kdykoli změněny, když se změní stav aplikace nebo uživatele.
  • Použití dotazování nebo oznámení k načtení informací o prostorových površích
    • Pozorovateli povrchu se můžete kdykoli "dotázat" na stav prostorové plochy. Místo toho se můžete zaregistrovat k události "surface changed" pozorovatele povrchu, která aplikaci upozorní na změnu prostorových povrchů.
    • U dynamického prostorového svazku, například zobrazení frustum nebo svazku uzamčeného tělem, budou aplikace muset dotazovat na změny jednotlivých snímků nastavením oblasti zájmu a následným získáním aktuální sady prostorových povrchů.
    • U statického svazku, jako je světem uzamčená datová krychle pokrývající jednu místnost, mohou aplikace zaregistrovat událost změny povrchů, aby byly upozorněny, když se prostorové plochy uvnitř tohoto svazku mohly změnit.
  • Změny povrchů procesu
    • Iterujte poskytnutou sadu prostorových povrchů.
    • Klasifikujte prostorové povrchy jako přidané, změněné nebo odebrané.
    • Pro každou přidanou nebo změněnou prostorovou plochu v případě potřeby odešlete asynchronní požadavek na příjem aktualizované sítě představující aktuální stav povrchu na požadované úrovni podrobností.
  • Zpracujte požadavek asynchronní sítě (další podrobnosti najdete v následujících částech).

Ukládání do mezipaměti sítě

Prostorové povrchy jsou reprezentovány hustými trojúhelníkovými sítěmi. Ukládání, vykreslování a zpracování těchto sítí může využívat významné výpočetní prostředky a prostředky úložiště. Každá aplikace by proto měla přijmout schéma ukládání do mezipaměti sítě odpovídající jejím potřebám, aby se minimalizovaly prostředky používané pro zpracování sítě a ukládání. Toto schéma by mělo určit, které sítě se mají zachovat a které zlikvidovat a kdy aktualizovat síť pro jednotlivé prostorové plochy.

Mnoho důležitých informací, které tam probíráme, přímo informují o tom, jak by vaše aplikace měla přistupovat k ukládání do mezipaměti sítě. Měli byste zvážit, jak se uživatel pohybuje v prostředí, jaké povrchy jsou potřeba, kdy se budou sledovat různé povrchy a kdy by se měly zaznamenat změny v prostředí.

Při interpretaci události "surface changed" poskytované pozorovatelem na povrchu je základní logika ukládání do mezipaměti sítě následující:

  • Pokud aplikace uvidí ID prostorového povrchu, které ještě neviděla, měla by ho považovat za novou prostorovou plochu.
  • Pokud aplikace uvidí prostorovou plochu se známým ID, ale s novým časem aktualizace, měla by ji považovat za aktualizovanou prostorovou plochu.
  • Pokud aplikace už nevidí prostorovou plochu se známým ID, měla by ji považovat za odstraněnou prostorovou plochu.

Je na každé aplikaci, aby pak udělala následující volby:

  • Pro nové prostorové povrchy by měla být požadována síť?
    • Obecně platí, že síť by měla být požadována okamžitě pro nové prostorové povrchy, což může uživateli poskytnout užitečné nové informace.
    • Nové prostorové plochy v blízkosti a před uživatelem by však měly mít prioritu a jejich síť by měla být požadována jako první.
    • Pokud nová síť není potřebná, pokud například aplikace trvale nebo dočasně "zablokovala" model prostředí, nemělo by se o ni žádat.
  • Pro aktualizované prostorové povrchy by měla být požadována síť?
    • Prioritu by měly mít aktualizované prostorové plochy v blízkosti a před uživatelem a jako první by měly být požadovány jejich sítě.
    • Může být také vhodné dát novým povrchům vyšší prioritu než aktualizovaným povrchům, zejména během skenování.
    • Aby se omezily náklady na zpracování, aplikace můžou chtít omezit rychlost zpracování aktualizací prostorových povrchů.
    • Může být možné odvodit, že změny prostorového povrchu jsou malé, například pokud jsou hranice povrchu malé, v takovém případě nemusí být aktualizace dostatečně důležitá pro zpracování.
    • Aktualizace prostorových povrchů mimo aktuální oblast zájmu uživatele lze zcela ignorovat, i když v tomto případě může být efektivnější upravit prostorové ohraničující svazky používané pozorovatelem povrchu.
  • U odstraněných prostorových povrchů by se měla síť zlikvidovat?
    • Obecně platí, že síťka by měla být okamžitě vyřazena pro odstraněné prostorové povrchy, aby okluze hologramu zůstala správná.
    • Pokud má však aplikace důvod se domnívat, že prostorová plocha se zanedlouho znovu objeví (na základě návrhu uživatelského prostředí), může být efektivnější ji zachovat, než zahodit její síť a později ji znovu vytvořit.
    • Pokud aplikace vytváří rozsáhlý model prostředí uživatele, nemusí chtít zahodit vůbec žádné sítě. I tak ale bude potřeba omezit využití prostředků, například zařazováním sítí na disk, jakmile prostorové plochy zmizí.
    • Některé relativně vzácné události během generování prostorových povrchů můžou způsobit nahrazení prostorových povrchů novými prostorovými povrchy v podobném umístění, ale s různými ID. Aplikace, které se rozhodnou neodstranit odebraný povrch, by proto měly věnovat pozornost tomu, aby neskončily s několika vysoce překrývajícími se prostorovými sítěmi pokrývajícími stejné místo.
  • Měla by být síťovina zlikvidována pro jakékoli jiné prostorové povrchy?
    • I když prostorová plocha existuje, pokud už není pro uživatele užitečná, měla by se zahodit. Pokud například aplikace "nahradí" místnost na druhé straně dveří alternativním virtuálním prostorem, na prostorových plochách v této místnosti už nezáleží.

Tady je příklad strategie síťového ukládání do mezipaměti s využitím prostorové a dočasné hystereze:

  • Představte si aplikaci, která chce použít prostorový prostor ve tvaru frustum, který sleduje pohled uživatele, když se rozhlíží a prochází kolem.
  • Prostorová plocha může z tohoto svazku dočasně zmizet jednoduše proto, že se uživatel dívá od povrchu nebo se od něj vzdáli... jen se ohlédnout nebo se o chvíli později znovu přiblížit. V tomto případě zahození a opětovné vytvoření sítě pro tento povrch představuje mnoho redundantních zpracování.
  • Aby se snížil počet zpracovaných změn, aplikace používá dva pozorovatele prostorového povrchu, jednoho obsaženého v druhém. Větší objem je kulový a následuje uživatele "líně"; pohybuje se pouze v případě potřeby, aby se zajistilo, že jeho střed je do 2,0 m od uživatele.
  • Nové a aktualizované sítě prostorových povrchů se vždy zpracovávají z menšího pozorovatele vnitřního povrchu, ale sítě se ukládají do mezipaměti, dokud nezmizí z většího pozorovatele vnějšího povrchu. To aplikaci umožní vyhnout se zpracování mnoha redundantních změn kvůli místnímu přesunu uživatelů.
  • Vzhledem k tomu, že prostorový povrch může také dočasně zmizet kvůli ztrátě sledování, aplikace také odvrací odstraněné prostorové povrchy během ztráty sledování.
  • Obecně platí, že aplikace by měla vyhodnotit kompromis mezi nižším zpracováním aktualizací a zvýšeným využitím paměti, aby určila svou ideální strategii ukládání do mezipaměti.

Vykreslování

Existují tři hlavní způsoby, jak se sítě prostorového mapování používají pro vykreslování:

  • Pro vizualizaci surface
    • Často je užitečné vizualizovat prostorové povrchy přímo. Například přetypování "stínů" z objektů na prostorové povrchy může uživateli poskytnout užitečnou vizuální zpětnou vazbu při umísťování hologramů na povrchy.
    • Jedna věc, kterou je třeba mít na paměti, je, že prostorové sítě se liší od druhu sítí, které může vytvořit 3D umělec. Topologie trojúhelníku nebude tak čistá jako topologie vytvořená člověkem a síť bude trpět různými chybami.
    • Pokud chcete vytvořit příjemnou vizuální estetičnu, můžete chtít provést zpracování sítě, například vyplnit díry nebo hladké povrchové normály. Můžete také použít shader k promítání textur navržených umělcem na síť místo přímé vizualizace síťové topologie a normálů.
  • Pro occluding hologramů za reálnými povrchy
    • Prostorové povrchy je možné vykreslit při průchodu pouze do hloubky, což má vliv pouze na hloubkovou vyrovnávací paměť a neovlivňuje cíle barevného vykreslování.
    • Tím se hloubková vyrovnávací paměť doplní k následnému vykreslení hologramů za prostorovými plochami. Přesná okluze hologramů zvyšuje pocit, že hologramy skutečně existují ve fyzickém prostoru uživatele.
    • Pokud chcete povolit vykreslování pouze pro hloubku, aktualizujte stav prolnutí tak, aby nastavil RenderTargetWriteMask na nulu pro všechny cíle barevného vykreslování.
  • Pro úpravu vzhledu hologramů okrytých reálnými povrchy
    • Za normálních okolností je vykreslovaná geometrie při skrytí skryta. Dosáhnete toho nastavením hloubkové funkce ve stavu hloubkového vzorníku na "menší než nebo rovno", což způsobí, že geometrie bude viditelná pouze tam, kde je blíže k fotoaparátu než všechna dříve vykreslená geometrie.
    • Může však být užitečné zachovat určitou geometrii viditelnou i v případě, že je ochraná, a upravit její vzhled, aby bylo možné uživateli poskytnout vizuální zpětnou vazbu. To například umožňuje aplikaci zobrazit uživateli polohu objektu a zároveň jasně zjistit, že se nachází za reálným povrchem.
    • Chcete-li toho dosáhnout, vykreslete geometrii podruhé pomocí jiného shaderu, který vytvoří požadovaný "occluded" vzhled. Před druhým vykreslením geometrie proveďte dvě změny stavu hloubkového vzorníku. Nejprve nastavte hloubkovou funkci na "větší než nebo rovno" tak, aby geometrie byla viditelná pouze tam, kde je dále od kamery než všechna dříve vykreslovaná geometrie. Za druhé nastavte hloubkovou masku na nulu, aby se hloubková vyrovnávací paměť neupravovala (hloubková vyrovnávací paměť by měla i nadále představovat hloubku geometrie, která je nejblíže ke kameře).

Výkon je důležitým problémem při vykreslování sítí prostorového mapování. Tady jsou některé techniky výkonu vykreslování specifické pro vykreslování sítí prostorového mapování:

  • Úprava hustoty trojúhelníku
    • Při vyžádání prostorových povrchových sítí od pozorovatele na povrchu požádejte o nejnižší hustotu trojúhelníkových sítí, která bude stačit pro vaše potřeby.
    • Může být vhodné měnit hustotu trojúhelníků na jednotlivých plochách v závislosti na vzdálenosti povrchu od uživatele a její relevance pro uživatelské prostředí.
    • Snížení počtu trojúhelníků sníží využití paměti a zpracování vrcholů na GPU, ale neovlivní to náklady na zpracování pixelů.
  • Použití uřezávače frustum
    • Frustum culling přeskočí nakreslené objekty, které nelze vidět, protože jsou mimo aktuální zobrazení frustum. Tím se sníží náklady na zpracování procesoru i GPU.
    • Vzhledem k tomu, že se vyřezávání provádí na základě jednotlivých sítí a prostorové povrchy mohou být velké, může rozdělení každé prostorové povrchové sítě do menších bloků vést k efektivnějšímu vytěsnění (v tom, že se vykresluje méně trojúhelníků mimo obrazovku). Je tu však kompromis; Čím více sítí máte, tím více volání musíte provést, což může zvýšit náklady na procesor. V extrémním případě by samotné výpočty vymýceného výpočtu mohly mít dokonce měřitelné náklady na procesor.
  • Úprava pořadí vykreslování
    • Prostorové povrchy bývají velké, protože představují celé prostředí uživatele, které je obklopuje. Náklady na zpracování pixelů na GPU mohou být vysoké, zejména v případech, kdy existuje více než jedna vrstva viditelné geometrie (včetně prostorových povrchů a jiných hologramů). V takovém případě vrstva, která je nejblíže uživateli, bude osušovat všechny vrstvy dál, takže jakýkoli čas strávený vykreslováním těchto vzdálenějších vrstev gpu je zbytečný.
    • Aby se snížila tato nadbytečná práce na GPU, pomáhá vykreslovat neprůzné povrchy v pořadí před-zpět (bližší první, vzdálenější poslední). Pojmem "neprůhlhlá" rozumíme plochy, pro které je ve vašem podrobném vzorníku nastavená hodnota DepthWriteMask na jednu. Při vykreslení nejbližších povrchů doplní hloubkovou vyrovnávací paměť, aby byly vzdálenější povrchy efektivně přeskočeny pixelovým procesorem na GPU.

Zpracování sítě

Aplikace může chtít provádět různé operace se sítěmi prostorových povrchů, aby vyhovovaly jejím potřebám. Data indexu a vrcholů, která jsou součástí každé sítě prostorových povrchů, používají stejné známé rozložení jako vyrovnávací paměti vrcholů a indexů , které se používají pro vykreslování trojúhelníkových sítí ve všech moderních rozhraních API pro vykreslování. Jedním z klíčových skutečností, o kterých je třeba vědět, je, že trojúhelníky prostorového mapování mají pořadí vinutí ve směru hodinových ručiček. Každý trojúhelník je reprezentován třemi indexy vrcholů ve vyrovnávací paměti indexu sítě a tyto indexy budou identifikovat vrcholy trojúhelníku v pořadí po směru hodinových ručiček , když je trojúhelník zobrazen z přední strany. Přední strana (nebo vnější) prostorových povrchových sítí odpovídá tak, jak byste očekávali, přední (viditelná) strana povrchů reálného světa.

Aplikace by měly zjednodušit síť pouze v případě, že nejhrubší trojúhelníková hustota poskytovaná pozorovatelem na povrchu je stále nedostatečně hrubá – tato práce je výpočetně náročná a již provádí modul runtime, aby vygeneroval různé poskytované úrovně podrobností.

Vzhledem k tomu, že každý pozorovatel povrchu může poskytnout více nesouvisených prostorových povrchů, mohou některé aplikace chtít tyto sítě prostorových povrchů ořísit proti sobě a pak je zazipovat. Obecně platí, že krok oříznutí je nutný, protože blízké prostorové sítě povrchů se často mírně překrývají.

Raycasting a kolize

Aby fyzikální rozhraní API (například Havok) poskytovalo aplikaci funkce raycastingu a kolizí pro prostorové povrchy, musí aplikace poskytovat prostorové povrchové sítě rozhraní API pro fyziku. Sítě používané pro fyziku mají často následující vlastnosti:

  • Obsahují pouze malý počet trojúhelníků. Fyzikální operace jsou výpočetně náročnější než operace vykreslování.
  • Jsou "těsné vodou". Povrchy určené k pevnému povrchu by neměly mít malé díry; Dokonce i díry, které jsou příliš malé, aby byly viditelné, mohou způsobit problémy.
  • Jsou převedeny na konvexní trupy. Konvexní trupy mají málo mnohoúhelníku a jsou bez otvorů a jejich zpracování je mnohem výpočetně efektivnější než syrová trojúhelníková oka.

Při provádění paprsků proti prostorovým povrchům mějte na paměti, že tyto povrchy jsou často složité, nepřehledné obrazce plné neuspořádaných malých detailů - stejně jako váš stůl! To znamená, že jeden paprsek často nestačí k tomu, aby vám poskytl dostatek informací o tvaru povrchu a tvaru prázdného místa v jeho blízkosti. Obvykle je vhodné provést mnoho paprskových přenosů v malé oblasti a použít agregované výsledky k odvozování spolehlivějšího pochopení povrchu. Například použití průměru 10 paprskovýchcastů k vedení umístění hologramu na povrchu přinese mnohem hladší a méně "roztřesný" výsledek, který použijete pouze jeden raycast.

Mějte však na paměti, že každý raycast může mít vysoké výpočetní náklady. V závislosti na vašem scénáři použití byste měli vyměnit výpočetní náklady na další paprskové vysílání (provedené každý snímek) proti výpočetním nákladům na zpracování sítí , které vyhladí a odstraní díry na prostorových površích (provádí se při aktualizaci prostorových sítí).

Prostředí kontroly prostředí

Každá aplikace, která používá prostorové mapování, by měla zvážit poskytnutí "prostředí pro skenování". proces, kterým aplikace uživatele navadí ke skenování povrchů, které jsou nezbytné pro správné fungování aplikace.

Příklad kontroly
Příklad kontroly

Povaha tohoto prostředí skenování se může výrazně lišit v závislosti na potřebách jednotlivých aplikací, ale návrh by měl vést dvěma hlavními principy.

Za prvé, jasná komunikace s uživatelem je primárním zájmem. Uživatel by měl vždy vědět, jestli jsou splněny požadavky aplikace. Pokud nejsou splněné, mělo by být uživateli okamžitě jasné, proč tomu tak je, a měl by být rychle veden k provedení příslušné akce.

Za druhé, aplikace by se měly pokusit dosáhnout rovnováhy mezi efektivitou a spolehlivostí. Pokud je to možné spolehlivě, měly by aplikace automaticky analyzovat data prostorového mapování, aby se ušetřil čas uživatelů. Pokud to není možné spolehlivě provést, měly by aplikace místo toho uživateli umožnit rychlé poskytnutí dalších informací, které vyžaduje.

Pokud chcete usnadnit návrh správného prostředí skenování, zvažte, které z následujících možností platí pro vaši aplikaci:

  • Žádné možnosti procházení

    • Aplikace může fungovat dokonale bez jakéhokoli řízeného skenování zkušenosti; dozví se o površích, které jsou pozorovány v průběhu přirozeného pohybu uživatelů.
    • Například aplikace, která umožňuje uživateli kreslit na povrchy pomocí holografického spreje, vyžaduje znalost pouze povrchů aktuálně viditelných pro uživatele.
    • Prostředí už může být zkontrolováno, pokud se jedná o prostředí, ve kterém už uživatel strávil spoustu času používáním HoloLensu.
    • Mějte však na paměti, že kamera používaná při prostorovém mapování vidí před uživatelem pouze 3,1 m, takže prostorové mapování nebude vědět o žádných vzdálenějších površích, pokud je uživatel v minulosti nepozoroval z větší vzdálenosti.
    • Aby uživatel pochopil, které povrchy byly naskenovány, měla by aplikace poskytnout vizuální zpětnou vazbu k tomuto výsledku, například přetypování virtuálních stínů na skenované povrchy může uživateli pomoct umístit hologramy na tyto povrchy.
    • V tomto případě by měly být ohraničující svazky pozorovatele prostorové plochy aktualizovány každý rámec na prostorový souřadnicový systém uzamčený tělem, aby sledoval uživatele.
  • Najít vhodnou lokalitu

    • Aplikace může být navržena pro použití v umístění se specifickými požadavky.
    • Aplikace může například vyžadovat prázdnou oblast kolem uživatele, aby mohl bezpečně trénovat holografický kung-fu.
    • Aplikace by měly předem informovat uživatele o všech konkrétních požadavcích a posílit je jasnou vizuální zpětnou vazbou.
    • V tomto příkladu by aplikace měla vizualizovat rozsah požadované prázdné oblasti a vizuálně zvýraznit přítomnost jakýchkoli nežádoucích objektů v této zóně.
    • V tomto případě by ohraničující svazky pozorovatele prostorové plochy měly ve zvoleném umístění používat světem uzamčený prostorový souřadnicový systém .
  • Vyhledání vhodné konfigurace povrchů

    • Aplikace může vyžadovat specifickou konfiguraci povrchů, například dvě velké, ploché, protilehlé stěny k vytvoření holografického sálu zrcadla.
    • V takových případech bude aplikace muset analyzovat povrchy poskytované prostorovými mapováními, aby bylo rozpoznávat vhodné povrchy, a nasměrovat uživatele k nim.
    • Pokud analýza povrchu aplikace není spolehlivá, měl by uživatel mít záložní možnost. Pokud například aplikace nesprávně identifikuje dveře jako plochou zeď, uživatel potřebuje jednoduchý způsob, jak tuto chybu opravit.
  • Kontrola části prostředí

    • Aplikace může chtít zachytit jenom část prostředí podle pokynů uživatele.
    • Aplikace například naskenuje část místnosti, aby uživatel mohl publikovat holografický klasifikovaný inzerát na nábytek, který chce prodat.
    • V takovém případě by aplikace měla zaznamenávat data prostorového mapování v oblastech, které uživatel pozoroval během kontroly.
  • Prohledat celou místnost

    • Aplikace může vyžadovat skenování všech povrchů v aktuální místnosti, včetně povrchů za uživatelem.
    • Hra může například dát uživatele do role Gullivera, pod obležením stovek malých Lilliputianů, kteří se přibližují ze všech směrů.
    • V takových případech bude aplikace muset určit, kolik povrchů v aktuální místnosti již bylo naskenováno, a směrovat pohled uživatele, aby vyplnil významné mezery.
    • Klíčem k tomuto procesu je poskytnutí vizuální zpětné vazby, která uživateli dává jasně najevo, které povrchy ještě nebyly zkontrolovány. Aplikace může například použít mlhu založenou na vzdálenosti k vizuálnímu zvýraznění oblastí, které nejsou pokryty povrchy prostorového mapování.
  • Pořízení počátečního snímku prostředí

    • Aplikace může chtít ignorovat všechny změny v prostředí po pořízení počátečního snímku.
    • To může být vhodné, aby nedošlo k přerušení dat vytvořených uživatelem, která jsou úzce svázána s počátečním stavem prostředí.
    • V takovém případě by aplikace měla po dokončení kontroly vytvořit kopii dat prostorového mapování v počátečním stavu.
    • Aplikace by měly i nadále dostávat aktualizace dat prostorového mapování, pokud jsou hologramy stále správně odkryty prostředím.
    • Pokračující aktualizace dat prostorového mapování také umožňují vizualizaci všech změn, ke kterým došlo, a objasňují uživateli rozdíly mezi předchozím a stávajícím stavem prostředí.
  • Pořízení snímků prostředí iniciovaných uživatelem

    • Aplikace si může přát reagovat na změny prostředí pouze na základě pokynů uživatele.
    • Uživatel může například vytvořit několik 3D "soch" přítele tím, že zachytí jeho pozice v různých okamžicích.
  • Povolit uživateli změnu prostředí

    • Aplikace může být navržena tak, aby v reálném čase reagovala na jakékoli změny provedené v prostředí uživatele.
    • Například uživatel, který nakreslí oponu, může aktivovat "změnu scény" pro holografickou hru, která se odehrává na druhé straně.
  • Pokyny pro uživatele, aby se vyhnul chybám v datech prostorového mapování

    • Aplikace může chtít uživateli při kontrole prostředí poskytnout pokyny.
    • To může uživateli pomoct vyhnout se určitým druhům chyb v datech prostorového mapování, například tím, že se drží mimo okna nebo zrcadla.

Je potřeba si uvědomit, že rozsah dat prostorového mapování není neomezený. Prostorové mapování sice vytváří trvalou databázi velkých prostorů, ale zpřístupňuje tato data aplikacím pouze v "bublině" omezené velikosti kolem uživatele. Pokud začnete na začátku dlouhé chodby a půjdete dostatečně daleko od startu, pak nakonec prostorové povrchy na začátku zmizí. Tento problém můžete zmírnit uložením těchto ploch do mezipaměti v aplikaci poté, co zmizely z dostupných dat prostorového mapování.

Zpracování sítě

Může pomoct rozpoznat běžné typy chyb v površích a podle potřeby filtrovat, odebrat nebo upravit data prostorového mapování.

Mějte na paměti, že data prostorového mapování mají být maximálně věrná skutečným povrchům, takže jakékoli zpracování, které použijete, riskuje, že se vaše povrchy posunou dál od "pravdy".

Tady je několik příkladů různých typů zpracování sítě, které by pro vás mohly být užitečné:

  • Výplň otvoru

    • Pokud se malý předmět z tmavého materiálu nepodaří naskenovat, zůstane v okolním povrchu díra.
    • Díry ovlivňují okluzi: hologramy jsou vidět "skrz" díru na údajně neprůsvitné povrchu reálného světa.
    • Díry ovlivňují paprskové vysílání: pokud používáte paprskové vysílání, které uživatelům pomáhá v interakci s povrchy, může být nežádoucí, aby tyto paprsky procházely otvory. Jedním ze zmírnění je použití sady více raycastů pokrývajících oblast s odpovídající velikostí. To vám umožní filtrovat "odlehlé" výsledky, takže i když jeden raycast projde malým otvorem, agregovaný výsledek bude stále platný. Tento přístup má ale výpočetní náklady.
    • Díry ovlivňují fyzikální kolize: objekt řízený fyzikální simulací může propadnout otvorem v podlaze a ztratit se.
    • Takové díry v povrchové síti je možné algoritmicky vyplnit. Budete ale muset algoritmus vyladit tak, aby se "skutečné díry", jako jsou okna a dveře, nezaplnily. Může být obtížné spolehlivě odlišit "skutečné díry" od "imaginárních děr", takže budete muset experimentovat s různými heuristikami, jako je "velikost" a "tvar ohraničení".
  • Odstranění halucinace

    • Odrazy, světlá světla a pohybující se objekty mohou zanechat malé "halucinace" plovoucí uprostřed vzduchu.
    • Halucinace ovlivňují okluzi: halucinace se mohou stát viditelnými, když se tmavé tvary pohybují před jinými hologramy a zakrývají je.
    • Halucinace ovlivňují raycasty: pokud používáte paprskové přenosy, které pomáhají uživatelům pracovat s povrchy, můžou tyto paprsky místo povrchu za nimi narazit na halucinaci. Stejně jako u děr je jedním ze zmírnění problému použití mnoha raycastů místo jediného paprskového vysílání, ale opět to bude mít výpočetní náklady.
    • Halucinace ovlivňují fyzikální kolize: objekt řízený fyzikální simulací se může zaseknout proti halucinaci a nemusí se pohybovat ve zdánlivě jasném prostoru.
    • Takové halucinace je možné filtrovat z povrchové sítě. Stejně jako u děr budete muset algoritmus vyladit tak, aby se neodstranily skutečné malé objekty, jako jsou stojany na lampy a kliky dveří.
  • Vyhlazování

    • Prostorové mapování může v porovnání s reálnými protějšky vrátit povrchy, které se zdají být drsné nebo "hlučné".
    • Plynulost ovlivňuje fyzikální kolize: pokud je podlaha hrubá, nemusí se fyzicky simulovaný golfový míček hladce převalovat v rovné čáře.
    • Plynulost má vliv na vykreslování: pokud je povrch vizualizován přímo, normální drsné povrchy můžou ovlivnit jeho vzhled a narušit "čistý" vzhled. Tento problém je možné zmírnit použitím vhodného osvětlení a textur ve shaderu, který se používá k vykreslení povrchu.
    • V povrchové síti je možné vyhlazení drsnosti. To však může posunout povrch dále od odpovídajícího povrchu reálného světa. Udržování úzké korespondence je důležité pro vytvoření přesné okluze hologramu a umožnění uživatelům dosahovat přesných a předvídatelných interakcí s holografickými povrchy.
    • Pokud je nutná pouze kosmetická změna, může stačit vyhlazení normálních vrcholů beze změny poloh vrcholů.
  • Hledání roviny

    • Existuje mnoho forem analýzy, které si aplikace může přát provádět na površích poskytovaných prostorovými mapováními.
    • Jedním z jednoduchých příkladů je "hledání roviny"; identifikaci ohraničených, většinou planárních oblastí povrchů.
    • Planární oblasti se dají použít jako holografické pracovní plochy, do kterých může aplikace automaticky umístit holografický obsah.
    • Planární oblasti mohou omezit uživatelské rozhraní a vést uživatele k interakci s povrchy, které nejlépe vyhovují jejich potřebám.
    • Plošné oblasti se dají použít jako ve skutečném světě pro holografické protějšky funkčních objektů, jako jsou LCD obrazovky, tabulky nebo tabule.
    • Planární oblasti mohou definovat oblasti hraní, které tvoří základ úrovní videoher.
    • Planární oblasti můžou virtuálním agentům pomoci při navigaci v reálném světě tím, že identifikují podlahové oblasti, po kterých budou pravděpodobně chodit skuteční lidé.

Vytváření prototypů a ladění

Užitečné nástroje

  • Emulátor HoloLensu lze použít k vývoji aplikací pomocí prostorového mapování bez přístupu k fyzickému HoloLensu. Umožňuje simulovat živou relaci na HoloLensu v realistickém prostředí se všemi daty, která by vaše aplikace normálně spotřebovala, včetně pohybu HoloLensu, prostorových souřadnicových systémů a sítí prostorového mapování. To může být použito k poskytování spolehlivého a opakovatelného vstupu, který může být užitečný pro ladění problémů a vyhodnocení změn v kódu.
  • Pokud chcete reprodukovat scénář, zachyťte data prostorového mapování přes síť z živého HoloLensu, uložte je na disk a znovu je použijte v pozdějších ladicích relacích.
  • 3D zobrazení portálu zařízení s Windows poskytuje způsob, jak zobrazit všechny prostorové povrchy, které jsou aktuálně dostupné prostřednictvím systému prostorového mapování. To poskytuje základ pro porovnání prostorových povrchů uvnitř vaší aplikace; Můžete například snadno zjistit, jestli nějaké prostorové povrchy chybí nebo jsou zobrazeny na nesprávném místě.

Obecné pokyny k vytváření prototypů

  • Vzhledem k tomu, že chyby v datech prostorového mapování můžou výrazně ovlivnit uživatelské prostředí, doporučujeme otestovat aplikaci v široké škále prostředí.
  • Nenechte se uvíznout ve zvyku vždy testovat na stejném místě, například u stolu. Nezapomeňte testovat na různých površích různých poloh, tvarů, velikostí a materiálů.
  • Podobně platí, že i když syntetická nebo zaznamenaná data mohou být užitečná pro ladění, nenechte se příliš spoléhat na několik stejných testovacích případů. To může zpozdit nalezení důležitých problémů, které by dříve zachytilo pestřejší testování.
  • Je vhodné provést testování se skutečnými (a ideálně nevyužitými) uživateli, protože nemusí používat HoloLens nebo vaši aplikaci úplně stejným způsobem jako vy. Ve skutečnosti vás může překvapit, jak odlišné chování, znalosti a předpoklady lidí mohou být!

Poradce při potížích

  • Aby bylo možné sítě povrchů správně zorientovat, musí být každý Objekt GameObject před odesláním na surfaceObserver aktivní, aby bylo možné vytvořit jeho síť. V opačném případě se sítě zobrazí ve vašem prostoru, ale otočí se v divných úhlech.
  • Objekt GameObject, který spouští skript, který komunikuje se serverem SurfaceObserver, musí být nastavený na origin. V opačném případě budou mít všechny objekty GameObject, které vytvoříte a odešlete na surfaceObserver, aby byly vytvořeny jejich sítě, posun rovnající se posunu nadřazeného herního objektu. To může způsobovat, že se vaše sítě zobrazí o několik metrů dál, což ztěžuje ladění toho, co se děje.

Viz také