Prostorové mapování

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 skutečné povrchy. To pomáhá ukotvit objekty v uživatelském světě a využívat výhod skutečných podnětů do hloubky. Occluding your holograms based on other holograms and real world objects helps convince the user that these holograms are actually in their space. Hologramy plovoucí desetinnou čárkou ve vesmíru nebo když se přesunete s uživatelem, nebudete se cítit tak skuteční. Pokud je to možné, umístěte položky pro komfort.

Vizualizujte povrchy při umísťování nebo přesouvání hologramů (použijte projektované mřížky). Díky tomu uživatelé znají, kam mohou hologramy umístit nejlépe, a ukazuje, jestli není namapovaný bod, na který se hologram pokouší umístit. Pokud se položky vyúčtují uživateli příliš pod úhlem, můžete je "naúčtovat".

Základní přehled

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

Dva hlavní 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í svazků, které definují oblasti prostoru, ve kterých si aplikace přeje přijímat data prostorového mapování. Prostorové mapování poskytne aplikaci sadu prostorových povrchů pro každý z těchto svazků.

Tyto svazky mohou být pevné (v pevném umístění na základě reálného světa) nebo mohou být připojeny k HoloLens (přesouvají se, ale neotáčí se, s HoloLens při pohybu v prostředí). Každý prostorový povrch popisuje reálné povrchy v malém objemu prostoru reprezentované jako trojúhelníková síť připojená ke světem uzamknutému prostorovému souřadnicovému systému.

Když HoloLens nová data o prostředí, a když dojde ke změnám prostředí, prostorové povrchy se zobrazí, zmizí a změní.

Ukázka konceptů návrhu prostorového povědomí

Pokud chcete vidět koncepty návrhu prostorového povědomí v akci, podívejte se níže na naši ukázku návrhu řešení Hologramy – Spatial Awareness. Až budete hotovi, pokračujte podrobnějším popisem konkrétních témat.

Toto video bylo pořízeno z aplikace "Návrh Hologramy" HoloLens 2. Úplné prostředí si můžete stáhnout a využívat tady.

Prostorové mapování vs. scene 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 "bublině" kolem uživatele.
    • Poskytuje aktualizace změněných oblastí se změněnou sítí s nízkou latencí prostřednictvím událostí SurfacesChanged.
    • Proměnlivá úroveň podrobností řízená parametrem Triangles Per Triangle Meter
  • Sada SDK pro porozumění scéně:
    • Neomezený rozsah – poskytuje všechna naskenovaná data prostorového mapování v okruhu 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 chybmůže ovlivnit několik faktorů, které jsou zde podrobně uvedené. 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 může být přirozenější než umístění telefonu na schůdku?

Omezení umístění hologramů (nebo obecněji jakéhokoli výběru prostorových umístění) na povrch 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 potřebuje poskytnout aplikaci, a zrychlí, usnadní a zpřesní interakce uživatele. To je pravda, protože "vzdálenost od" není něco, co bychom použili k fyzické komunikaci s jinými lidmi nebo počítači. Když nasměrujeme prstem, určujeme směr, ale ne vzdálenost.

Důležité upozornění je, že když aplikace odvodí vzdálenost od směru (například pomocí paprskového vysílání podél pohledu uživatele k nalezení nejbližšího prostorového povrchu), musí to přinést výsledky, které uživatel dokáže spolehlivě předpovědět. Jinak uživatel ztratí smysl pro kontrolu a to může být rychle frustrující. Jednou z metod, která s tím pomůže, je provést více paprskových vysílání místo pouze jedné. Agregované výsledky by měly být plynulejší a předvídatelnější a méně náchylné k vlivu z přechodných výsledků "odlehlé hodnoty" (což může být způsobeno paprsky procházejícími malými otvory nebo malými částmi geometrie, o kterých uživatel neví). Agregaci nebo vyhlazování je také možné provádět v průběhu času. Můžete například omezit maximální rychlost, s jakou se hologram může od uživatele lišit. Jednoduché omezení minimální a maximální hodnoty vzdálenosti může také pomoct, takže se hologram, který se přesouváním nachází, náhle nezapadne do vzdálenosti nebo se vrátí zpět do tváře uživatele.

Aplikace mohou také pomocí tvaru a směru povrchů řídit umístění hologramu. Holografická smyčka by neměla proniknout zdí a měla by být zarovnaná s podlahou, i když je poněkud nerovnoměrná. Tento druh funkčnosti by se pravděpodobně spoléhá na použití fyzikálních kolizí místo paprsků, ale podobné obavy budou platit. Pokud je u hologramu umístěný mnoho malých mnohoúhelníků, které se vylepšují, jako je smyšlený bod na schůdce, může mít smysl rozšířit fyzikální reprezentaci těchto mnohoúhelníků na něco širšího a plynulejšího, aby se dokázaly více posouváním přes prostorové povrchy bez snagging.

V extrémních případech je možné uživatelský vstup úplně zjednodušit a prostorové povrchy je možné použít k zcela automatickému umísťování hologramů. Aplikace může například umístit holografický přepínač světla někam na zeď, aby uživatel mohl stisknout tlačítko. V tomto případě platí stejné upozornění týkající se předvídatelnosti. Pokud uživatel očekává kontrolu nad umístěním hologramu, ale aplikace neumisťuje hologramy tam, kde očekává (pokud se přepínač světla objeví někde, kde se uživatel nemůže dostat), bude to frustrující. Ve skutečnosti může být horší provést automatické umísťování, které vyžaduje po určité době opravy uživatelem, než jen vyžadovat, aby uživatel vždy sám umístění udělal. vzhledem k tomu, že se očekává úspěšné automatické umísťování, je ruční oprava jako zátěž!

Všimněte si také, že schopnost aplikace používat prostorové povrchy pro umístění do značné míry závisí na prostředí skenování aplikace. Pokud se povrch nenaskenoval, nelze ho použít k umístění. Je na aplikaci, aby to uživateli bylo jasné, aby mohl buď pomoct s prohledáváním nových povrchů, nebo vybrat nové umístění.

Vizuální zpětná vazba pro uživatele má při umísťování prvořadý význam. Uživatel musí vědět, kde je hologram založený na nejbližším povrchu s uzemněním efektů. Měli by pochopit, proč se pohyb hologramu omezuje (například kvůli kolizím s jiným blízkým povrchem). Pokud hologram v aktuálním umístění umístit nemůže, měla by vizuální zpětná vazba jasně zjistit, proč ne. Pokud se například uživatel pokouší umístit holografický poháněk zablokované na zeď, měly by se části poschůdků, které jsou za zdí, vybarvat v barvě stěny. Nebo naopak, pokud aplikace nemůže najít prostorový povrch v místě, kde uživatel vidí skutečný povrch, měla by to aplikace jasně ukázat. K tomuto účelu může dojít zřejmou absencí zřejmých efektů v této oblasti.

Okluze

Jedním z primárních použití prostorového mapování povrchů je jednoduše oklamaní hologramů. Toto jednoduché chování má obrovský dopad na vnímanou realismus hologramů, což pomáhá vytvořit viscerální pocit, že ve skutečnosti obývá stejný fyzický prostor jako uživatel.

Okluze také poskytuje informace uživateli. Když se hologram jeví jako zachovaný skutečným povrchem, poskytuje to další vizuální zpětnou vazbu týkající se prostorového umístění hologramu ve světě. Naopak okluze může uživateli také užitečně skrýt informace. Díky ořízaných hologramům za zdmi může intuitivním způsobem zmenšovat vizuální nepotřebné prvky. Aby uživatel hologram skryl nebo odhalil, musí jen posunout svou hlavičku.

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

V některých případech je okluze hologramů nežádoucí. Pokud uživatel potřebuje pracovat s hologramem, musí ho vidět – i když je za skutečným povrchem. V takových případech obvykle dává smysl takový hologram vykreslit jinak, když je occludovaný (například snížením jeho jasu). Tímto způsobem může uživatel hologram vizuálně najít, ale pořád 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íče reálně přehodí ze stolu, vrátí se na zem a zmizí pod poschodí, může být pro mě obtížné si říct, že tam není.

Fyzikální simulace také poskytuje aplikaci příležitost používat přirozené a známé interakce založené na fyzice. Přesunutí holografického mihotu na podsíť bude pro uživatele pravděpodobně jednodušší, pokud se posouvá přes podlahu s odpovídající nesnázemi a třecími plochy.

Pokud chcete vygenerovat realistické fyzické chování, budete pravděpodobně muset provést určité zpracování sítě, například vyplňování otvorů, odstranění plovoucích halucií a vyhlazování hrubých povrchů.

Budete také muset zvážit, jak prostředí kontroly vaší aplikace ovlivňuje její fyzikální simulaci. Zaprvé, chybějící povrchy se nebudou sbalovat s nic; Co se stane, když gumový míč sádne dolů po a z konce známého světa? Za druhé se musíte rozhodnout, jestli budete v průběhu času reagovat na změny v prostředí. V některých případech budete chtít reagovat co nejrychleji. řekněme, že uživatel používá dveře a dech jako vyměnitelné baroky v obraně proti tempestu příchozích anemských šipek. V jiných případech ale můžete chtít nové aktualizace ignorovat. Když se váš pes rozhodne posedit uprostřed cesty, nemusí být najednou tak zábavné, když se holografický sportovní vůz posoudí na stopě.

Aplikace mohou pomocí dat prostorového mapování udělit holografickým znakům (nebo 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ých a známých chování jako uživatel a jeho přátelé.

Navigační funkce mohou být užitečné i pro uživatele. Jakmile je navigační mapa vytvořená v dané oblasti, může být sdílena tak, aby novým uživatelům, kteří toto umístění nepouili, poskytovala holografické pokyny. Tato mapa může být navržená tak, aby pomohla plynule udržovat plynulý tok provozu nebo zabránit nehodám v nebezpečných lokalitách, jako jsou místa na stavbě.

Klíčovými technickými výzvami při implementaci navigačních funkcí bude spolehlivá detekce pochůdných povrchů (lidé nešli po tabulkách).) a elegantní adaptace na změny v prostředí (lidé prochádí zavřenými dveřmi!). Smísť může před použitím vyžadovat určité zpracování pro plánování cest a navigaci pomocí virtuálního znaku. Vyhlazování sítě a odstranění halucií může pomoct vyhnout se zablokování znaků. Možná budete chtít síť výrazně zjednodušit, abyste urychlovali plánování cesty a výpočty navigace vaší postavy. Těmto výzvám se věnovala velká pozornost při vývoji technologií videohry a k těmto tématům existuje velká množství výzkumných literatuře.

Integrovanou funkci NavMesh v Unity nelze použít s povrchy prostorového mapování. Je to proto, že plochy prostorového mapování nejsou známé, dokud se aplikace nezačne, ale datové soubory NavMesh je potřeba předem vygenerovat ze zdrojových prostředků. Upozorňujeme také, že systém prostorového mapování neposkytuje informace o povrchu daleko od aktuální polohy uživatele. Pokud tedy má aplikace vytvořit mapu velké oblasti, musí si ji "zapamatovat".

Vizualizace

Ve většině času je vhodné, aby prostorové povrchy měly být neviditelné. aby se minimalizovaly nepotřejné prvky vizuálů a aby skutečný svět mluví sám za sebe. Někdy je ale užitečné vizualizovat prostorové mapovací plochy přímo, i když jsou jejich skutečné protějšky viditelné.

Například když se uživatel pokouší umístit hologram na povrch (například holografický skříň na zeď), může být užitečné hologram "uzemnění" přetypovat stín na povrch. Díky tomu má uživatel mnohem jasnější přehled o přesné fyzické blízkosti hologramu a povrchu. Toto je také příklad obecnějšího postupu vizuálního náhledu změny před tím, než se do ní uživatel potvrdí.

Vizualizací povrchů může aplikace sdílet informace s uživatelem o prostředí. Holografická desková hra by například mohla vizualizovat vodorovné povrchy identifikované jako "tabulky", aby uživatel věděl, kam má přejít.

Vizualizace povrchů může být užitečným způsobem, jak zobrazit prostory uživatele v okolí, které jsou před zobrazením skryté. To by mohlo poskytnout způsob, jak uživateli poskytnout přístup do kuchyně (a ke všem obsaženým hologramům) z jeho obýváku.

Sítě povrchu poskytované prostorovým mapováním nemusí být obzvláště "čisté". Je důležité je odpovídajícím způsobem vizualizovat. Tradiční výpočty osvětlení můžou vizuálně rušivě zvýraznit chyby v normálech povrchu, zatímco "čisté" textury promítající se na povrch můžou pomoct s lepším vzhledem. Je také možné provést zpracování sítě za účelem zlepšení vlastností sítě před vykreslením povrchů.

Poznámka

HoloLens 2 implementuje nový modul runtime Scene Understanding Runtime,který vývojářům Mixed Reality poskytuje strukturované znázornění prostředí vysoké úrovně navržené tak, aby zjednodušilo implementaci umístění, okluze, fyziky a navigace.

Použití pozorovatele Surface

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

  • Vytvoření objektu pozorovatele povrchu
    • Poskytujte jeden nebo více prostorových svazků, které definují oblasti zájmu, ve kterých chce aplikace přijímat data prostorového mapování. Prostorový objem je jednoduše tvar definující oblast prostoru, například kouli nebo krabici.
    • K identifikaci pevné oblasti fyzického světa použijte prostorový objem se systémem prostorových souřadnic uzamknutým světem.
    • Pomocí prostorového svazku, který aktualizuje každý snímek o prostorový souřadnicový systém uzamčený na tělo, identifikujte oblast prostoru, která se přesune (ale nebude se obměnět) s uživatelem.
    • Tyto prostorové svazky je možné kdykoli později změnit, protože se změní stav aplikace nebo uživatele.
  • Použití dotazování nebo oznámení k načtení informací o prostorových površích
    • Kdykoli můžete "dotazovat" pozorovatele povrchu na stav prostorového povrchu. Místo toho se můžete zaregistrovat k události "změnily se povrchy" pozorovatele, která aplikaci upozorní, když se prostorové povrchy změní.
    • U dynamického prostorového svazku, jako je například zobrazení frustum nebo svazek uzamčený tělem, se budou aplikace muset dotazovat na změny jednotlivých snímků nastavením oblasti zájmu a získáním aktuální sady prostorových povrchů.
    • U statického svazku, jako je například uzamknutá datová krychle pokrývající jednu místnost, mohou aplikace zaregistrovat událost "změněných povrchů", aby byly informovány v případě, že se prostorové povrchy uvnitř tohoto objemu změnily.
  • Zpracování změn povrchů
    • Iteruje poskytnutou sadu prostorových povrchů.
    • Klasifikovat prostorové povrchy jako přidané, změněné nebo odebrané.
    • Pro každý přidaný nebo změněný prostorový prostorový prostor 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í.
  • Zpracování asynchronního požadavku sítě (další podrobnosti najdete v následujících částech).

Mesh Ukládání do mezipaměti

Prostorové plochy jsou reprezentovány silnými trojúhelníkovými sítěmi. Ukládání, vykreslování a zpracování těchto sítí může spotřebovávat významné výpočetní prostředky a prostředky úložiště. Proto by každá aplikace měla použít schéma ukládání do mezipaměti podle svých potřeb, aby se minimalizovaly prostředky používané ke zpracování a ukládání sítě. Toto schéma by mělo určit, které sítě se mají zachovat a které se mají zahodit a kdy aktualizovat síť pro každý prostorový povrch.

Mnohé z zde probíranou oblasti vás přímo informují o tom, jak by vaše aplikace měla přistupovat k ukládání do síťové mezipaměti. Měli byste zvážit, jak uživatel prochází prostředím, které povrchy jsou potřeba, kdy se budou sledovat různé povrchy a kdy se mají zachytit změny v prostředí.

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

  • Pokud aplikace vidí ID prostorového povrchu, které předtím neviděl, měla by se s tímto prostorovým povrchem zacházet jako s novým prostorovým povrchem.
  • Pokud aplikace vidí prostorový prostorový prostor se známým ID, ale s novým časem aktualizace, měla by s tím zacházet jako s aktualizovaným prostorovým povrchem.
  • Pokud už aplikace nevidí prostorový prostorový prostor se známým ID, měla by s tím zacházet jako s odebraným prostorovým povrchem.

Je na každé aplikaci, aby pak volby zněla:

  • U nových prostorových povrchů by se měla vyžádat síť?
    • Obecně platí, že u nových prostorových povrchů by se měla okamžitě zadat smísit, což může uživateli poskytnout užitečné nové informace.
    • Nové prostorové povrchy blízko a před uživatelem by však měly mít prioritu a jejich síť by se měla vyžádat jako první.
    • Pokud není nová síť potřeba, pokud například aplikace trvale nebo dočasně zamrzla svůj model prostředí, neměla by se o to požádat.
  • V případě aktualizovaných prostorových povrchů by se měla vyžádat síť?
    • Aktualizované prostorové povrchy blízko a před uživatelem by měly mít prioritu a jejich síť by se měla vyžádat jako první.
    • Může být také vhodné dát novému povrchu vyšší prioritu než aktualizovaným povrchům, zejména během skenování.
    • Aby se omezily náklady na zpracování, mohou aplikace chtít omezit rychlost, s jakou zpracovávají aktualizace prostorových ploch.
    • Je možné odvodit, že změny prostorového povrchu jsou menší, například pokud jsou hranice povrchu malé, v takovém případě aktualizace nemusí být natolik důležitá, aby se zpracuje.
    • Aktualizace prostorových povrchů mimo aktuální oblast zájmu uživatele je možné zcela ignorovat, i když v tomto případě může být efektivnější upravit prostorové ohraničující svazky, které používá pozorovatel povrchu.
  • U odebraných prostorových povrchů by se měla zahodit síť?
    • Obecně platí, že by se u odebraných prostorových povrchů měla okamžitě zahodit síť, aby okluze hologramu zůstala správná.
    • Pokud má ale aplikace důvod se domnívá, že se za chvíli znovu objeví prostorový povrch (na základě návrhu uživatelského prostředí), může být efektivnější ji zachovat, než ji zahodit a znovu vytvořit později.
    • Pokud aplikace buduje rozsáhlý model uživatelského prostředí, možná nebude chtít zahodit žádné smísené sítě. Stále ale bude muset omezit využití prostředků, například zařazováním sítí na disk, když prostorové povrchy zmizí.
    • Některé relativně vzácné události během generování prostorového povrchu mohou způsobit, že prostorové povrchy nahradí nové prostorové povrchy v podobném umístění, ale s různými ID. Aplikace, které se rozhodnete nezahodit odebraný povrch, by proto měly mít na výběr, aby nekončí více vysoce překrývajících se prostorových ploch, které pokrývají stejné umístění.
  • Měla by se síť zahodit pro jakékoli jiné prostorové povrchy?
    • I když prostorový povrch existuje, pokud už pro uživatelské prostředí není užitečný, měl by se zahodit. Pokud například aplikace "nahradí" místnost na druhé straně dveře alternativním virtuálním prostorem, prostorové povrchy v této místnosti už nejsou důležité.

Tady je příklad strategie ukládání do mezipaměti pomocí prostorových a dočasných řemezí:

  • Představte si aplikaci, která chce použít prostorový objem zájmu ve tvaru frustum, který sleduje pohled uživatele při pohledu a obchádování.
  • Prostorový povrch může z tohoto objemu dočasně zmizet, protože se uživatel podívá z povrchu nebo z něj o krok dál... jen pro pozdější pohled nebo se ještě o chvíli později přiblížíte. V tomto případě zahození a opětovné vytvoření sítě pro tuto plochu 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 uvnitř druhého. Větší svazek je šiferický a následuje uživatele laxně. Přesune se jenom v případě potřeby, aby se zajistilo, že jeho střed je v okruhu 2,0 metru od uživatele.
  • Nové a aktualizované sítě prostorových ploch se vždy zpracovávají z menšího pozorovatele vnitřního povrchu, ale sítě se uchová v mezipaměti, dokud nezmizí z většího pozorovatele vnějšího povrchu. Díky tomu se aplikace může vyhnout zpracování mnoha redundantních změn kvůli přesunu místních uživatelů.
  • Vzhledem k tomu, že prostorový povrch může také dočasně zmizet kvůli ztrátě sledování, aplikace také odhazuje odstraněné prostorové plochy během ztráty sledování.
  • Obecně platí, že aplikace by měla vyhodnotit kompromis mezi menším zpracováním aktualizací a zvýšeným využitím paměti a určit tak 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í k vykreslování:

  • Pro vizualizaci povrchu
    • Často je užitečné vizualizovat prostorové povrchy přímo. Například přetypování "Shadows" z objektů na prostorové povrchy může uživateli poskytnout užitečnou vizuální zpětnou vazbu, když umísťují hologramy na povrchy.
    • Je třeba mít na paměti, že prostorové sítě se liší podle druhu sítí, které může vytvořit 3D umělec. Trojúhelníková topologie nebude jako "vyčistit" jako topologie vytvořená uživatelem a síť bude mít za následek různé chyby.
    • Chcete-li vytvořit přitažlivé vizuální zrak, může být vhodné provést některé zpracování sítě, například k vyplnění děr nebo hladkého normálního povrchu. Můžete také chtít použít shader k provedení textur navržených texturou na síť místo přímé vizualizace topologie sítě a normálních.
  • Pro occluding hologramy za reálné povrchy
    • Prostorové povrchy lze vykreslit pouze v rámci hloubky, který ovlivňuje pouze vyrovnávací paměť hloubky a nemá vliv na cíle vykreslování barev.
    • Tím se velikost vyrovnávací paměti rozocclude následně vykreslí na hologramy za prostorové plochy. Přesná překrytí hologramů vylepšuje smysl, že hologramy skutečně existují v rámci fyzického prostoru uživatele.
    • Chcete-li povolit vykreslování pouze hloubky, aktualizujte stav Blendu tak, aby nastavení RenderTargetWriteMask na hodnotu nula pro všechny cíle vykreslování barev.
  • Úprava vzhledu zastíněna hologramů z reálných ploch
    • Po zastíněna je normální vykreslená geometrie skrytá. Toho dosáhnete tak, že nastavíte funkci hloubky ve stavu vzorníku hloubky na hodnotu menší než nebo rovno, což způsobí, že geometrii bude viditelná jenom tam, kde je blíž ke kameře než všechna dříve vykreslená geometrie.
    • Může být ale vhodné zachovat určitou geometrii, i když je zastíněna, a změnit její vzhled, když zastíněna jako způsob poskytnutí vizuální zpětné vazby pro uživatele. Například umožňuje aplikaci zobrazit uživateli umístění objektu a zrušit jeho zaškrtnutí, které je za reálným povrchem.
    • Chcete-li toho dosáhnout, vykreslete geometrii podruhé s jiným shaderem, který vytvoří požadovaný vzhled ' zastíněna '. Předtím, než geometrii vyhledáte podruhé, udělejte dvě změny ve stavu vzorníku hloubky. Nejdřív nastavte funkci Depth na "větší než nebo rovnou", aby se geometrie zobrazovala jenom tam, kde je dál z kamery, než všechny dříve vykreslené geometrie. Potom nastavte DepthWriteMask na hodnotu nula, aby se nezměnila vyrovnávací paměť hloubky (hloubka vyrovnávací paměti by měla dál reprezentovat hloubku geometrie nejbližší k fotoaparátu).

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

  • Upravit hustotu trojúhelníku
    • Při požadavku na přechody prostorových ploch z pozorovatele na Surface si vyžádejte nejnižší hustotu sítí trojúhelníku, která bude dostačující pro vaše potřeby.
    • Může být vhodné odlišit hustotu trojúhelníku na povrchu podle povrchu, v závislosti na vzdálenosti plochy od uživatele a s ohledem na činnost koncového uživatele.
    • Snížení počtu trojúhelníků sníží využití paměti a náklady na zpracování vrcholu na GPU, i když to nijak neovlivní náklady na zpracování v pixelech.
  • Použití odfrustum odstran
    • Frustum odstran přeskočí kreslené objekty, které nelze zobrazit, protože jsou mimo aktuální Frustum zobrazení. Tím se sníží náklady na zpracování CPU i GPU.
    • Vzhledem k tomu, že odstranění odkladu se provádí na bázi jednotlivých sítí a prostorové povrchy můžou být velké, může být rozdělení každé sítě prostorové plochy do menších bloků lepší, což znamená, že se vykreslují méně trojúhelníkové trojúhelníky. Existují však kompromisy, větší počet sítí, které máte, je potřeba vykreslit, což může zvýšit náklady na procesor. V extrémních případech by frustum odstranované výpočty mohly mít i na měřitelné náklady na procesor.
  • Upravit pořadí vykreslování
    • Prostorové povrchy mají největší velikost, protože představují celé prostředí uživatele, které ho obklopuje. Náklady na zpracování pixelů na GPU můžou být vysoké, zejména v případech, kdy je k dispozici více než jedna vrstva viditelné geometrie (včetně prostorových povrchů a dalších hologramů). V takovém případě se vrstva nejbližší uživateli occluding do všech vrstev, takže veškerá vzdálená vrstva přestane být využívána při vykreslování těchto více vzdálených vrstev.
    • Chcete-li omezit tuto redundantní práci na GPU, pomáhá vykreslovat neprůhledné povrchy v pořadí od začátku do začátku (u nich jsou navýšené). Po "neprůhledně" jsme znamenali povrchy, pro které je DepthWriteMask ve stavu vzorníku hloubkynastaven na jednu. Když se vykreslí nejbližší povrchy, naplní se tím vyrovnávací paměť hloubky tak, aby se v grafickém procesoru v GPU efektivně přeskočily víc vzdálených ploch.

Zpracování sítě

Aplikace může chtít provádět různé operace s mřížkou prostorových ploch podle svých potřeb. Data indexu a vrcholu dodaná s každou mřížkou prostorového prostoru používají stejné známé rozložení jako vyrovnávací paměti vrcholů a indexů , které se používají pro vykreslování sítí trojúhelníků ve všech moderních rozhraních pro vykreslování. Nicméně jedna z klíčových faktů, o které je třeba vědět, je, že prostorový mapový trojúhelník má Pořadí vinutí zepředu po směru. Každý trojúhelník je reprezentován třemi indexy vrcholů v 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 mimo ni) mřížky prostorových ploch odpovídá tomu, jak byste čekali na přední (viditelnou) stranu reálného světa.

Aplikace by měly provádět pouze zjednodušení sítě, pokud je hustota trojúhelníku coarsest, kterou poskytuje pozorovatel pozorovatele, stále nedostatečně hrubá – Tato práce je výpočetně náročná a je již prováděna modulem runtime, aby vygenerovala různé poskytnuté úrovně podrobností.

Vzhledem k tomu, že jednotlivé pozorovatelé Surface můžou poskytovat několik nepřipojených prostorových povrchů, můžou některé aplikace vystřihnout tyto sítě s prostorovou plochou mezi sebou a pak je Zipper dohromady. Obecně se vyžaduje krok oříznutí, protože se okolní sítě plošných prostorů často překrývají.

Raycasting a kolizí

Aby rozhraní API pro fyzika (například Havok) poskytovalo aplikaci s funkcí raycasting a kolizí pro prostorové povrchy, musí aplikace poskytnout sítě prostorového Surface do rozhraní API fyziky. Sítě používané pro fyzika často mají následující vlastnosti:

  • Obsahují pouze malý počet trojúhelníků. Operace fyzika jsou více výpočetními prostředky, než operace vykreslování.
  • Jedná se o "vodu – těsné". Povrchy, které mají být plné, by neměly mít v nich malé díry; sudá moc malý otvor, který by mohl být viditelný, může způsobit problémy.
  • Jsou převedeny na vypouklé trupy. Vypuklé trupy mají několik mnohoúhelníků a jsou bez děr a jsou mnohem efektivnější pro zpracování než nezpracované sítě trojúhelníku.

Při raycastsí na prostorové povrchy mějte na paměti, že tyto povrchy jsou často složité, zcela mnoho podrobností – stejně jako váš stůl! To znamená, že jeden raycast je často nedostatečný, aby vám poskytl dostatek informací o tvaru povrchu a tvaru prázdného prostoru blízko něj. Je obvykle dobré provádět mnoho raycasts v malých oblastech a používat agregované výsledky k odvození spolehlivější porozumění povrchu. Například použití průměru 10 raycasts pro vodítko umístění hologramu na povrchu bude mít za následek mnohem hladší a menší výsledek kolísání, který používá pouze jeden raycast.

Je však třeba mít 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 obsloužit výpočetní náklady za extra raycasts (hotový každý rámec) proti výpočetním nákladům na zpracování sítě , aby se vyplynuly a odstranily otvory na prostorech na pracovišti (hotové při aktualizaci prostorových mřížek).

Prostředí pro kontrolu prostředí

Každá aplikace, která používá prostorové mapování, by měla zvážit poskytnutí "možnosti prohledávání"; proces, pomocí kterého aplikace provede uživateli kontrolu nad povrchy, které jsou nezbytné, aby aplikace správně fungovala.

Příklad kontroly
Příklad kontroly

Povaha tohoto skenovacího prostředí se může výrazně lišit v závislosti na potřebách aplikace, ale k návrhu by se měly vytvořit dva hlavní zásady.

Nejprve je důležité zrušit komunikaci s uživatelem. Uživatel by měl vždy vědět, zda jsou splněny požadavky aplikace. Pokud nejsou splněné, mělo by být uživateli okamžitě jasné, proč je to tak a mělo by se rychle vyřídit, aby provedl příslušnou akci.

Aplikace by se měly pokusit přeškrtnout rovnováhu mezi efektivitou a spolehlivostí. V případě, že je to možné spolehlivě, aplikace by měly automaticky analyzovat data prostorového mapování a ušetřit tak čas uživatele. Pokud není možné to spolehlivě udělat, aplikace by jim místo toho umožnily uživatelům rychle poskytnout aplikaci s dalšími informacemi, které vyžaduje.

Aby bylo možné navrhnout správné prostředí pro kontrolu, zvažte, který z následujících možností platí pro vaši aplikaci:

  • Bez možnosti kontroly

    • Aplikace může fungovat dokonale bez prověřování s asistencí. Dozvíte se o površích, které jsou pozorovány v průběhu pohybu přirozeného uživatele.
    • Například aplikace, která umožňuje uživateli kreslit na povrchu pomocí holografického štětce, vyžaduje znalost jenom těch, které jsou aktuálně viditelné pro uživatele.
    • Prostředí může být zkontrolováno již v případě, že uživatel již strávil spoustu času pomocí HoloLens.
    • Uvědomte si, že fotoaparát, který používá prostorové mapování, může před uživatelem zobrazit jenom 3,1 m, takže prostorové mapování nebude znát o všech vzdálených plochách, pokud je uživatel nepozorovaný z bližší vzdálenosti v minulosti.
    • Takže uživatel rozuměle, které povrchy byly zkontrolovány, měla by tato aplikace poskytnout vizuální zpětnou vazbu k tomuto efektu, například přetypování virtuálních stínů na naskenované plochy může uživatelům dát hologram na těchto površích.
    • V takovém případě by se svazky s rozsahem pozorovatele v prostorové rovině měly aktualizovat každý snímek na systém prostorové souřadnicovéjednotky, aby postupoval uživatel.
  • Najít vhodné umístění

    • Aplikace může být navržena pro použití v umístění se specifickými požadavky.
    • Například aplikace může vyžadovat prázdnou oblast kolem uživatele, aby mohl bezpečně vyzkoušet holografický kung-fu.
    • Aplikace by měly sdělit uživateli všechny konkrétní požadavky a posílit je pomocí jasné vizuální zpětné vazby.
    • V tomto příkladu by aplikace měla vizualizovat rozsah požadované prázdné oblasti a vizuálně zvýraznit přítomnost všech nežádoucích objektů v rámci této zóny.
    • V takovém případě by se svazky na hranicích pozorovatele v prostorové rovině měly ve zvoleném umístění používat jako prostorový integrovaný systém souřadnic .
  • Najít vhodnou konfiguraci povrchů

    • Aplikace může vyžadovat specifickou konfiguraci povrchů, například dvě velké, nerovné a protichůdné zdi, a vytvořit tak holografické zrcátko.
    • V takových případech bude aplikace potřebovat analyzovat povrchy poskytnuté prostorovým mapováním pro detekci vhodných povrchů a nasměrovat uživatele k nim.
    • Pokud analýza povrchu aplikace není spolehlivá, měl by mít uživatel možnost Fallback. Například pokud aplikace nesprávně identifikuje určitou 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í, jak je uživatel přesměrován.
    • Aplikace například prohledává část místnosti, takže uživatel může zveřejnit holografickou klasifikovanou reklamu pro nábytek, které chtějí prodávat.
    • V takovém případě by měla aplikace zachytit data geografického mapování v rámci oblastí zjištěných uživatelem během jejich prohledávání.
  • Prohledat celou místnost

    • Aplikace může vyžadovat skenování všech povrchů v aktuální místnosti, včetně těch, které jsou za uživatele.
    • Hra může například dát uživateli do role Gulliver v části Siege ze stovky drobných Lilliputians přístupů ze všech směrů.
    • V takových případech bude aplikace muset určit, kolik z povrchů v aktuální místnosti již bylo zkontrolováno, a nasměrovat pohledu uživatele tak, aby vyplnil významné mezery.
    • Klíč k tomuto procesu poskytuje vizuální zpětnou vazbu, který uživateli vymaže, které povrchy ještě nebyly zkontrolovány. Aplikace může například využít mlhovou dráhu k vizuálnímu zvýraznění oblastí, na které se nevztahují prostorové mapové plochy.
  • Pořízení počátečního snímku prostředí

    • Aplikace může chtít po pořízení počátečního snímku ignorovat všechny změny v prostředí.
    • To může být vhodné, aby nedošlo k přerušení uživatelem vytvořených dat, která jsou pevně spojená s počátečním stavem prostředí.
    • V takovém případě by aplikace měla po dokončení kontroly vytvořit kopii prostorových mapování dat v počátečním stavu.
    • Aplikace by měly dál získávat aktualizace pro data prostorového mapování, pokud jsou hologramy stále správně zastíněna prostředím.
    • Pokračující aktualizace dat prostorového mapování umožňují také vizualizovat změny, ke kterým došlo, a objasnit uživatele rozdíly mezi předchozími a stávajícími stavy prostředí.
  • Vezměte uživatelem iniciované snímky prostředí.

    • Aplikace může chtít na změny v prostředí reagovat pouze v případě, že uživatel zadá pokyn.
    • Uživatel například může vytvořit více 3D "Statues" přítele zachycením jejich pozice v různou chvíli.
  • Umožní uživateli změnit prostředí.

    • Aplikace může být navržena tak, aby reagovala v reálném čase na všechny změny provedené v uživatelském prostředí.
    • Například uživatel, který kreslí zákulisí, může aktivovat "změnu scény" pro holografické přehrávání na druhé straně.
  • Průvodce uživatele, aby se předešlo chybám v datech prostorového mapování

    • Aplikace může chtít poskytnout uživateli pokyny při prohledávání svého prostředí.
    • To může uživatelům přispět, aby se předešlo určitým druhům chyb v prostorových mapováních dat, například opuštěním Sunlit oken nebo zrcadel.

Dalším podrobnostem, o které je třeba vědět, je to, že data "rozsah" prostorových mapování nejsou omezena. I když prostorové mapování vytváří trvalou databázi velkých prostorů, zpřístupňuje tato data pouze aplikacím, které mají v případě omezené velikosti kolem uživatele k dispozici. Pokud začnete na začátku dlouhé chodby a provedete si dost místa na začátku, pak se nakonec zmizí prostorové povrchy na začátku. To můžete zmírnit tím, že tyto povrchy do své aplikace uložíte do mezipaměti poté, co zmizely z dostupných prostorových mapování dat.

Zpracování sítě

Může vám usnadnit detekci běžných typů chyb v povrchech a filtrovat, odebrat nebo upravit data prostorového mapování podle potřeby.

Uvědomte si, že data prostorového mapování jsou zamýšlená tak, aby byla co nejvěrnější pro reálné povrchy, takže jakékoli zpracování, které použijete, přechází na vaše plochy od "pravdy".

Tady je několik příkladů různých typů zpracování sítě, které můžete najít užitečné:

  • Vyplnění otvorem

    • Pokud se nepovede najít malý objekt z tmavého materiálu, ponechá se na okolní ploše otvor.
    • Díry ovlivňují překrytí: hologramy se dají zobrazit přes otvor v nadřízeném prostoru reálného světa.
    • Díry ovlivňují raycasts: Pokud používáte raycasts k tomu, aby uživatelé mohli pracovat s povrchy, může být nežádoucí, aby tyto paprsky prošly otvory. Jedním z rizik je použití sady více raycastsů, které pokrývají patřičnou velikost oblasti. To vám umožní filtrovat výsledky izolované, takže i když jeden raycast projde malým otvorem, agregovaný výsledek bude i nadále platný. Tento přístup však přináší výpočetní náklady.
    • Díry ovlivňují kolizí: objekt řízený simulací fyziky může proniknout otvorem v podlaze a bude ztracen.
    • Je možné algorithmically vyplnit otvory na Surface povrchu. Budete ale muset svůj algoritmus vyladit tak, aby se nesestavily reálné díry, jako je třeba Windows, nebo dveře. Může být obtížné spolehlivě odlišit "reálné otvory" od "imaginárních děr", takže budete muset experimentovat s různými heuristickými metodami, jako je ' size ' a ' tvar hranice '.
  • Odebrání Hallucination

    • Odrazy, světlé světla a přesuny objektů můžou zanechat malé dlouhodobé "hallucinations" plovoucí v polovině vzduchu.
    • Hallucinations ovlivňuje překrytí: Hallucinations se může zobrazit jako tmavé obrazce, které se přesunou před a occluding dalších hologramů.
    • Hallucinations má vliv na raycasts: Pokud používáte raycasts, které uživatelům pomůžou s povrchy pracovat, můžou se tyto paprsky narazit hallucination místo na povrchu na pozadí. Stejně jako u děr je jedno omezení zmírňování místo jediného raycast, které se dá použít hodně raycasts, ale to se bude projevit za výpočetní náklady.
    • Hallucinations má vliv na kolizi fyziky: objekt řízený simulací fyzika se může zablokovat proti hallucination a nemůže se pohybovat po zdánlivě jasné oblasti prostoru.
    • Je možné tyto hallucinations filtrovat ze sítě Surface. Stejně jako u děr budete ale muset vyladit algoritmus tak, aby se reálné malé objekty, jako jsou například světlomety nebo popisovače dveří, neodebraly.
  • Vyhlazování

    • Územní mapování může vracet povrchy, které vypadají jako hrubá nebo "vysokou úroveň", v porovnání se svými skutečnými protějšky.
    • Plynulost má vliv na kolizi fyziky: Pokud je podlahová plocha hrubá, nemusí fyzicky simulovaná koule Golf v přímce v přímém směru zcela plynule.
    • Plynulost má vliv na vykreslování: Pokud je povrchově vizuální, Hrubá povrchová plocha může ovlivnit jeho vzhled a rušit "čištění". To je možné zmírnit pomocí vhodného osvětlení a textur v shaderu, který se používá k vykreslení povrchu.
    • Je možné plynule vyhladit hrubou kapacitu v síti Surface. To však může doručovat plochu ještě od příslušného reálného povrchu. Udržování těsné korespondence je důležité pro vytvoření přesného překrytíového hologramu a umožnění uživatelům dosáhnout přesné a předvídatelné interakce s holografickými povrchy.
    • Pokud se vyžaduje jenom změna kosmetického typu, může být dostačující pro hladké normálních vrcholů bez změny pozic vrcholu.
  • Hledání roviny

    • Existuje mnoho forem analýzy, které může aplikace chtít provést na površích poskytovaných podle prostorového mapování.
    • Jedním jednoduchým příkladem je "zjištění roviny"; identifikují se hranice, hlavně planární oblasti povrchu.
    • Oblasti planární se dají použít jako holografické pracovní povrchy, oblasti, kde může aplikace automaticky umístit holografický obsah.
    • Oblasti planární můžou omezit uživatelské rozhraní, aby uživatelé mohli pracovat s povrchy, které nejlépe vyhovují jejich potřebám.
    • Oblasti planární se dají použít stejně jako v reálném světě pro holografické protějšky na funkční objekty, jako jsou obrazovky LCD, tabulky nebo tabule.
    • Oblasti planární mohou definovat oblasti přehrávání, které tvoří základ pro úrovně videohry.
    • Oblasti planární můžou přispět k tomu, že virtuálním agentům umožní přejít na reálný svět, a to tak, že identifikují oblasti patry, na které se můžou docházet.

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

Užitečné nástroje

  • emulátor HoloLens lze použít k vývoji aplikací pomocí prostorového mapování bez přístupu k fyzickému HoloLens. umožňuje simulovat živou relaci na HoloLens ve realistickém prostředí, kde jsou všechna data, která by měla aplikace normálně spotřebovat, včetně HoloLens pohybu, prostorových souřadnicových systémů a mřížek mapování prostorů. To lze použít k zajištění spolehlivého a opakovaného vstupu, který může být užitečný pro ladění problémů a hodnocení změn kódu.
  • pro reprodukování scénáře zachyťte data prostorového mapování přes síť z živého HoloLens a pak ji uložte na disk a znovu ji použijte v pozdějších ladicích relacích.
  • 3d zobrazení portálu Windows zařízení nabízí způsob, jak zobrazit všechny prostorové povrchy, které jsou aktuálně k dispozici prostřednictvím systému pro mapování prostorových dat. To poskytuje základ pro porovnání prostorových ploch v rámci vaší aplikace. Můžete například snadno zjistit, jestli nějaké prostorové povrchy chybí nebo se zobrazují 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 silně ovlivnit uživatelské prostředí, doporučujeme otestovat aplikaci v nejrůznějších prostředích.
  • Nevytvářejte přesahy ve stejném umístění, ve kterém je vždycky testování ve stejném umístění, například ve vašem oddělení. Ujistěte se, že testujete různé plochy různých poloh, tvarů, velikostí a materiálů.
  • Podobně, zatímco syntetická nebo zaznamenaná data mohou být užitečná pro ladění, nepoužívejte je příliš nezávislá na stejném několika testovacích případech. To může zpozdit nalezení důležitých problémů, které byly zachyceny více než dříve.
  • je vhodné provést testování pomocí reálných uživatelů (a ideálně neautokarů), protože nemůžou používat HoloLens nebo vaši aplikaci přesně stejným způsobem jako vy. Může se stát, že nebudete mít na vědomí, jak se může jednat o stejné chování, znalosti a předpoklady.

Řešení potíží

  • Aby bylo možné správně docházet k plochám, musí být každý GameObject aktivní před odesláním do SurfaceObserver, aby měla vytvořenou síť. V opačném případě se sítě budou zobrazovat v prostoru, ale budou otočeny na divné úhly.
  • GameObject, který spouští skript, který komunikuje s SurfaceObserver, musí být nastavené na počátek. V opačném případě všechny GameObjects, které vytvoříte a odešlete do SurfaceObserver, aby byly vytvořeny sítě, bude posun rovný posunu nadřazeného objektu hry. Díky tomu můžou vaše sítě zobrazit několik měřičů, takže je těžké ladit, co se stane.

Viz také

prostorové mapování poskytuje podrobné znázornění reálných ploch v prostředí kolem HoloLens a umožňuje vývojářům vytvářet přesvědčivé prostředí hybridní reality. Díky sloučení reálného světa s virtuálním světem může aplikace vytvářet hologramy jako reálné. Aplikace jsou také mnohem přirozeně zarovnané se očekáváním uživatele díky tomu, že poskytují známé reálné chování a interakce.


Zařízení podporuje