Připíná místa
Problémy, které se mají vyřešit
Chyba škálování
I když tradiční prostorové ukotvení přístupu ke sladění Hologramy s funkcemi reálného světa funguje skvěle v malém měřítku, bojuje s tím, jak se škála rozrůstá tak, aby zahrnovala více než měřič nebo tak.
Chyba škálování v prostoru pro sledování hlavy znamená, že i když prostorová kotva udržuje jeden konec virtuálního objektu, má velikost jen pár metrů dlouhou, dokonale zarovnanou s funkcí reálného světa, druhý konec pravděpodobně nebude zarovnaný s odpovídající funkcí reálného světa. Toto chybné zarovnání je způsobeno tím, že vzdálenost cestovaná hlavou sledovaným prostorem se obvykle liší od vzdálenosti cestované přes fyzický prostor s chybovou vazbou +-10 %. Skutečná chyba je často menší (závisí na mnoha vlastnostech prostředí a zařízení), ale obecně bude významná a bude růst bez omezení, jak roste měřítko projektu.
Jinak řečeno, pokud uživatel, který má HoloLens procházky 10 metrů ve skutečném světě, vzdálenost cestovaná ve virtuálním prostoru, jak je hlášeno sledováním hlavy, bude mezi 9 a 11 metrů. Pokud uživatel provede 50 metrů, chyba se zvětšuje na +-5 metrů. Tím, co uživatel provede, tím větší bude chyba růst.
10metrový paprsek (v prostoru modelování) s jedním koncovým bodem dokonale zarovnaný k nulovému konci páskové míry v reálném prostoru bude mít druhý konec zaregistrovaný na pásce někde mezi 9 a 11 metrů.
Ze stejných důvodů bude více objektů, každý svět uzamčen pomocí prostorových ukotvení, různé vzdálenosti od sebe ve virtuálním prostoru než v reálném prostoru.
Libovolný souřadnicový systém
Je tu další obava. Souřadnicový systém Unity v HoloLensu je neurčitý. Je založena výhradně na hlavní pozici na začátku aplikace.
Tato libovolnost není problémem pro mnoho úkolů. Pokud je cílem přetypovat paprsek do prostorového mapování místnosti a umístit hologram na pozici hitu, pak číselné hodnoty pozice hitu jsou irelevantní.
Stejně tak při poskakování prvků uživatelského rozhraní kolem uživatele, absolutní souřadnice pro umístění prvku uživatelského rozhraní nezáleží, pouze souřadnice relativní k uživateli.
Nepředvídatelný souřadnicový systém ale může komplikovat více zahrnutých scénářů. Načtení velké kolekce objektů, například plochy uživatele nebo celé kancelářské místnosti, do virtuálního prostoru s pevným vztahem k fyzickému prostoru, vyžaduje určitou kompenzační transformaci, která zarovná objekty prostoru modelování s souřadnicovým rámem založeným na hlavicích.
Tato kompenzace se často provádí připojením všech objektů k jedné transformaci Unity a úpravou této jediné transformace na umístění a orientaci virtuálních objektů v souladu s reálným světem.
Stejně tak se dá použít jedna transformace v hierarchii kamery k skutečnému zarovnání kamery tak, aby se při zobrazení referenčního bodu skutečného světa zobrazil virtuální objekt s požadovanými souřadnicemi modelování na této funkci.
Řešení
Funkce Připnutí prostoru řeší oba tyto problémy najednou. Dělá to tak, že využívá světem uzamčenou povahu globálního prostoru nástroje World Lock Tools a libovolnou povahu tohoto prostoru.
Sladění prostoru Unity s reálným světem
World Lock Tools v jeho jádru poskytuje stabilní svět uzamčený souřadnicový systém. Virtuální objekt umístěný do prostoru World Locked zaregistrovaného pomocí funkce reálného světa zůstane v průběhu času zaregistrovaný s danou funkcí z reálného světa.
Existuje ale nekonečný počet mezer, které vyhovují danému cíli. Vzhledem k tomu, že jeden svět uzamčený prostor, transformuje ho libovolnou polohou a otočením vytvoří další stejně platný světem uzamčený prostor.
Funkce Space Pin používá další omezení, které odebere nedeterminovat povahu transformace zamykání světa.
Toto omezení spočívá v tom, že když se "blízko" připínáčku mezery, bude pozice tohoto špendlíku prostoru ve světě uzamčeného prostoru stejná jako pozice pinu prostoru v modelování prostoru.
Představte si datovou krychli ve scéně Unity modelovanou na globálních souřadnicích (0, 0, 1). Když se scéna načte do HoloLensu, zobrazí se datová krychle před počáteční hlavou 1 metr. V závislosti na počáteční pozici hlavy může být kdekoli ve fyzické místnosti.
Mezerník umožňuje, aby byla tato datová krychle uzamčena na skutečnou funkci v místnosti, například v rohu konkrétního stolu. Na rozdíl od uzamčení datové krychle prostorovým ukotvením přesune pin prostorový kolík celý prostor Unity tak, aby byla datová krychle zarovnaná se stolním rohem. Takže například ostatní desktopové položky modelované vzhledem k datové krychli v Unity budou správně rozptýleny napříč skutečnou plochou.
Řešení chyby škálování
Zatímco jeden mezerník odebere nedeterminaci vztahu mezi virtuální souřadnicí a reálným světem, neřeší chybu škálování.
To znamená, že zatímco mohl přesunout původ do fyzického světa zarovnané polohy a orientace, chůze 10 metrů ve skutečném světě může stále přesunout uživatele pouze 9 metrů ve virtuálním prostoru.
V takovém případě poskytuje kompletní řešení několik špendlíků mezerník. Když se uživatel blíží ke konkrétnímu pinu prostoru, svět se bude shodovat s tímto pinem prostoru. Ostatní špendlíky prostoru budou špatně zarovnané, ale jsou vzdálenější, které obecně ukazují, že jsou přijatelné a často nečitelné.
Když se uživatel pohybuje mezi špendlíky mezer, bezproblémová interpolace minimalizuje chybu škálování v libovolném bodě v prostoru. S odpovídající hustotou space pinů jako referenčních bodů je chybné zarovnání reálného světa a virtuálních funkcí sníženo na pořadí chyb sledování hlavy.
I když požadovaná hustota špendlíků prostoru závisí na kvalitě sledování podpora prostředí i požadavcích na přesnost aplikace, některá čísla zde můžou pomoct nastavit očekávání. V kancelářském prostředí s odpovídajícími světelnými a viditelnými funkcemi, které je třeba sledovat, mezera mezi mezerami 10 metrů mezi mezerami snižuje chybu z akumulace 10–20 cm nad 10 metrů až po milimetrové chyby (max. chyba l.t. 0,5 cm, chyba 0,0 cm v koncových bodech).
Uchování
Funkce Space Pin funguje společně se zbytkem trvalosti nástroje World Locking Tools. Existují jak ruční volání pro vyvolání ukládání a načítání ze skriptu, tak příznaky pro automatické ukládání a načítání v jednotlivých relacích.
Pokud je tato možnost povolená, funkce automatického ukládání a automatického načítání ve Správci nástrojů World Locking Tools umožní úplné prostorové zarovnání virtuálního světa do reálného světa, aby se obnovilo v dalších relacích.
V praxi trvalost znamená, že jeden nebo malý počet předběžných zasedání lze použít k vytvoření odpovídající kontroly fyzického prostředí a zarovnání tohoto fyzického prostředí se souřadnicovým prostorem modelování Unity. Následné relace pak načtou virtuální prostředí správně v souladu s reálným světem bez nutnosti další akce uživatele.
Interpolace a extrapolace
Interpolace a extrapolace jsou obě techniky pro odhad hodnot dat, kdy nebyla provedena žádná přímá měření. Špendlíky prostoru, jak je popsáno dosud, jsou umístění, kde byla měření provedena. Virtuální souřadnice jsou požadované souřadnice a fyzické souřadnice jsou měřené souřadnice, na kterých chceme, aby se tyto virtuální souřadnice zobrazovaly.
Systém provádí interpolaci, ale ne extrapolaci, jak je popsáno níže. Interpolace je obecně bezpečnější a stabilnější než extrapolace. Poskytnutá lineární interpolace bude naplnit většinu potřeb aplikací. Extrapolace je méně bezpečná a její ideální implementace obecně vyžaduje znalosti na úrovni aplikace. Aplikace je proto ponechána na zpracování extrapolace, jak je popsáno níže.
Bez přidání extrapolačních kolíků se mimo hranice špendlíků připne mezera výhradně hodnotou na nejbližší hranici. Pokud existují pouze dva špendlíky, A a B, pak když se uživatel přesune z A na B, připnutí se prolíná mezi zarovnáním určeným A a zadaným B (interpolace). Ale když uživatel předá B, pak se připnutí uzamkne přesně podle B (konstantní rozšíření).
Interpolace
V oblasti 2D mezi kolíky se prostorová lokalizace lineárně interpoluje. Pokud jsou špendlíky místa přesně umístěné a chyba sledování je rovnoměrně rozdělena do oblasti, oprava použitá mezi špendlíky mezery bude přesně správná.
Zde je třeba zdůraznit, že předpoklad rovnoměrného rozdělení chyb není přesně správný. Jako aproximace však lineární model poskytuje vynikající výsledky opravy.
Extrapolace
Systém neposkytuje žádnou integrovanou službu extrapolace s použitím konstantního rozšíření hodnot mimo konvexní trupu vesmírných kolíků. Tato aproximace je ekvivalentní předpokladu, že samozřejmě neexistuje žádná chyba škálování mimo aplikaci poskytnuté špendlíky místa.
Pokud ale aplikace má znalosti o distribuci chyb nebo je s odhadem spokojená, může vytvořit jakoukoli extrapolaci požadovanou přidáním dalších špendlíků místa na okraji.
Příklad extrapolace
Představte si scénu se čtyřmi mezerníkovými kolíky umístěnými na čtverec s okraji o délce 4 metry.
Teď řekněme, že skutečný prostor, ve které se uživatel bude pohybovat, je 12 metrů x 12 metrů, přičemž fyzické značky odpovídající čtyř kolíkům obklopujícím střed prostoru.
Pokud je aplikace spokojená s konstantní aproximací chyb, pak má všechny informace, které potřebuje přidat čtyři nebo více špendlíků mezer, aby bylo možné zajistit pokrytí v celém prostoru 12x12m.
Připínáčky v rozích čtverce 4x4 označíme jejich směry kardinality, NE, NW, SW a SE. Také budeme označovat virtuální pozice v jednotlivých bodech virtualNE atd. a fyzické pozice v jednotlivých bodech fyzických sítí atd.
Jednou strategií by bylo přidat vnější kardinaly, které vytvoří čtvercový čtverec o 12 metrech x 12 metrů kolem vnitřního čtverce, přidáním čtyř dalších kardinalových bodů, vnějšího sítě, vnějšíhoNW, vnějšíhoSW a vnějšíhoSE. Virtuální a fyzické pozice každého z nich se můžou jednoduše vypočítat. Například při přebírání vnějšího
virtualOuterNE = virtualNE + (virtualNE - virtualSW);
physicalOuterNE = physicalNE + (physicalNE - virtualSW);
Vytvoření extrapolačního prostoru 20 × 20 metrů změní pouze měřítko použitého rozdílu:
scale = (outerSize - innerSize) / innerSize / 2;
virtualOuterNE = virtualNE + (virtualNE - virtualSW) * scale;
physicalOuterNE = physicalNE + (physicalNE - virtualSW) * scale;
S vnější velikostí 20 m a vnitřní velikostí 4 m by měřítko bylo 2.
Alternativní strategií může být přidání osmi dalších bodů kromě rohů, jak je znázorněno níže. Výpočet nových umístění připnutí z existujících umístění je přesně stejný jako výše. Buďte opatrní, že i když je pravda, že přidání dalších kolíků obecně zlepšuje stabilitu, nemusí nutně zlepšit přesnost.
Zarovnání podmnožina scény
Dosud se diskuze týká globálního Objektu AlignmentManager, který vlastní a spravuje WorldLockingManager.GetInstance(). Jak jsme už popsali dříve, připne se celý globální prostor Unity ke fyzickým prvkům na strategických referenčních bodech.
Při použití stejného konceptu na podmnožinu scény však existují situace.
Představte si například scénář, ve kterém se mají načítat poznámky pro dva automobily. Přesné umístění dvou fyzických automobilů nemůže být předem známo, protože se může lišit podle rozložení různých prodejců. Po nasazení jednoho z fyzických vozidel je však známo umístění všech součástí v porovnání s danou polohou nasazení.
V tomto scénáři se pak dají mezerníky použít k připnutí virtuální skříně a poznámek pro každou z vozidel nezávisle. V Unity lze nastavit celou virtuální reprezentaci jednotlivých vozidel a pak je namapovat na fyzické vozidlo za běhu. Toto zarovnání může být ruční pomocí uživatelského rozhraní MRTK nebo automatizované pomocí kódů QR nebo jakékoli jiné strategie. Bez ohledu na to, jak jsou data korespondence mezi virtuálními a fyzickými referenčními body určena, bude WLT po odeslání do rozhraní WLT prostřednictvím rozhraní API space pins udržovat virtuální a fyzické objekty v souladu s perceptuálně optimalizovaným způsobem.
V případě zarovnání globálního souřadnicového prostoru se zarovnání provede manipulací s uzlem Úpravy (obecně nadřazeným objektem nadřazeného objektu kamery). Tento uzel by měl být považován za vyhrazený pro použití WLT. Jakákoli jiná manipulace s tímto transformací způsobí nedefinované chování.
Podobně když zarovnáte podstrom, musí zarovnání vlastnit transformaci v kořenovém (pod)kořenu podstromu, který se má zarovnat. Jakákoli externí manipulace s tímto transformací způsobí nedefinované chování.
Než se připnou nezávislé mezery, přetáhne se spolu s připnutím globálního prostoru. Jakmile je však připnuto nezávislé místo, považuje se to za připnuté k fyzickému světu, takže následné úpravy připnutí globálního prostoru na fyzický svět to neovlivní.