Sdílet prostřednictvím


Principy relaceOrigin

SessionOrigin je relativně nová implementace, představená v AR Foundation, ale myšlenka se objevila ve kamerových soupravách, které se vrátily desetiletí vykreslovacích motorů. Možná ho znáte jako uzel MRTK Playspace. Je to docela výkonné, ale bohužel špatně vysvětlené a následně špatně pochopitelné.

Co je SessionOrigin?

SessionOrigin je pouze transformační objekt, ke kterému je fotoaparát připojen. Ve většině případů umožňuje umístění kamery ve virtuální scéně. Více subtly definuje speciální souřadnicový prostor.

Stejně jako obvykle u transformační relace nadřazenosti a podřízenosti v Unity (a všechny moderní vykreslovací moduly) přesune nadřazený objekt podřízený prvek. Významem termínu "přesunutí" v tomto kontextu je, že změna globální pozice nadřazeného objektu změní globální souřadnice podřízeného objektu a když se globální souřadnice jednoho objektu změní, bude se zdát, že se tento objekt přesunul vzhledem k objektům, jejichž globální souřadnice se nezměnily.

Fotoaparát je v tomto smyslu spíše zvláštní, protože se nevykresluje. Určuje zobrazení vykreslovacího modulu. Konkrétní příklad by to mohl objasnit.

Nejjednodušší příklad SessionOrigin

Představte si velmi jednoduchou scénu, ve které je fotoaparát na počátku při spuštění (jak je normální v aplikacích AR) a na ose Z je umístěná jedna červená koule 10 metrů před kamerou (position=(0,0,10)).

Nejjednodušší virtuální scéna

Z jakéhokoli důvodu si představte, že chceme, aby uživatel místo toho spustil 1 měřič od koule.

Máme dvě zajímavé možnosti:

  1. Přesuňte fotoaparát na nové místo (0,0,9).
  2. Přesuňte kouli na novou pozici (0,0,1).

Dvě možnosti

Je poměrně zřejmé, že obě možnosti jsou nakonec ekvivalentní bez jakéhokoli jiného kontextu. V oboupřípadechch Jediným rozdílem jsou absolutní globální souřadnice těchto dvou objektů. Jejich relativní souřadnice, tj. vektor mezi těmito dvěma, je v obou případech stejný.

Kdybychom chtěli použít možnost 1., jak bychom se o tom mohli pustit? Pokud nastavíme souřadnice kamery, systém sledování je přepíše. Místo toho připojíme kameru k nadřazeného objektu a pak přesuneme nadřazenou položku. Tracker nastaví místní pozici kamery, která ji přesune vzhledem k nadřazené. Nadřazený objekt je nyní SessionOrigin.

Proč přesunout kameru místo koulí?

V tomto jednoduchém případě jsou tyto dvě možnosti jasně zaměnitelné. Ale nezapomeňte, že "koule" opravdu představuje "všechno ve scéně, ale kamera". S rostoucí složitostí scény se přesouvání všeho stává složitější. Přesunutí kamery přes SessionOrigin je vždy úplně stejná operace.

Kromě toho existují typy objektů, které jsou obtížné nebo nemožné přemístit, například částicové systémy nebo navigační sítě. Ale i když se žádný z nich nezajistit, existují jasné výhody pro změnu souřadnic jednoho objektu ve scéně, SessionOrigin, versus změna globálních souřadnic všeho ostatního.

SessionOrigin by neměl přesouvat všechno

Zvažte znovu náš nejjednodušší příklad. Jedná se ale o aplikaci rozšířené reality, takže spolu s vykreslovanou červenou koulí uvidí uživatel také fyzické prostředí. V zájmu jednoduchosti bude naše fyzické prostředí omezeno na jednu zelenou židli, jak je znázorněno.

Virtuální i fyzické objekty

Když teď přesuneme kameru přes SessionOrigin, přesunuli jsme ji vzhledem k červené kouli, ale samozřejmě jsme nezvedli uživatele a přesunuli je vzhledem k zelené židli. Koule se teď zobrazuje blíž, ale židle je ve stejné pozici.

Fyzické objekty opravené vzhledem k fyzickému uživateli

Co když je na křesle kotva? Měla by se kotva pohybovat s červenou koulí nebo zůstat pevná vzhledem k sedadlu židle? Celý bod kotvy je zůstat pevný vzhledem k fyzickému světu, takže by měl zůstat s židlí.

Dalším příkladem je prostorová síť. To je síť vygenerovaná tak, aby poskytovala virtuální verzi fyzického prostředí pro kontext, přetypování paprsků atd. Určitě chceme, aby prostorová síť zůstala pevná pro fyzický svět.

Další příklady jsou v rozsahu od ručních ok až po vektory pohledů. Všechny sdílejí společnou vlastnost, že pokud jsou souřadnice kamery upraveny (transformovány), měly by souřadnice těchto objektů obdržet stejnou úpravu.

Tak koncepčně, všechny tyto objekty, které se pohybují v koordinaci s kamerou, jsou také připojeny k SessionOrigin. Když se SessionOrigin přesune vzhledem k globálním objektům, jako je červená koule, všechny tyto objekty se spolu s ním přenesou.

Je důležité zdůraznit, že to je nezávislé na pohybu kamery kvůli sledování hlavy. Tracker přesune kameru vzhledem k SessionOrigin.

Trochu více matematických vysvětlení

Globální souřadnicový systém Unity je ve výchozím nastavení v aplikaci rozšířené reality poněkud libovolně umístěný. Kromě zarovnání vektoru závažnosti (osa Y) s "nahoru" je pozice a orientace zcela určena místem, kde tracker umístí fotoaparát při spuštění.

I když to může být v pořádku pro mnoho aplikací, široká škála možností se otevírá díky tomu, že dokáže odebrat tuto libovolnost globálního souřadnicového prostoru.

Podívejte se na předchozí příklad, představte si, že je pro aplikaci významné, že virtuální červená koule je umístěná vzhledem k fyzické židli, jak je znázorněno. Toho můžeme dosáhnout úpravou SessionOrigin.

Požadované rozložení

Pokud chceme, aby koule na ose X (0,0,10) byla 1 metr podél osy X, pak chceme, aby židle byla v (-1,0,10). Pokud zjistíme, že fotoaparát má být 2 metry zpět od křesla přímo podél záporné osy Z, když je fotoaparát na počátku, pak židle je aktuálně na (0,0,2). (Mějte na paměti, že fyzické objekty nemají žádné innate souřadnice, pouze souřadnice odvozené z blízkosti fotoaparátu a virtuálních objektů).

Počáteční rozložení

Pokud ale nastavíme transformaci SessionOrigin na (-1,0,8), pozice kamery je (-1,0,8). Židle, 2 metry přímo před, je v (-1,0,10). A červená koule v (0,0,10) se zobrazí 1 metr vpravo od židle podle potřeby.

Upravené rozložení

Takže jsme efektivně použili transformaci SessionOrigin k přemístění globálního prostoru Unity tak, aby se červená koule a všechny ostatní globální objekty zobrazovaly ve správném umístění vzhledem k fyzickému světu.

Tento jednoduchý, ale výkonný mechanismus pro sladění globálního souřadnicového prostoru Unity s fyzickým světem lze využít k podpoře komplexního rozložení, trvalosti prostorů souřadnic, souřadnicových prostorů sdílených napříč zařízeními a dalších.

Viz také