Hologramstabilizálás – MRTK2

Teljesítmény

Ahhoz, hogy a mögöttes vegyes valóság platformja és eszköze a legjobb eredményt hozza, fontos a képkockasebesség elérése. A célkockasebesség (pl. 60 FPS vagy 90 FPS) platformonként és eszközönként eltérő lehet. A képkockasebességű vegyes valósági alkalmazások azonban stabil hologramokkal, valamint hatékony fejkövetéssel, kézkövetéssel és egyebekvel rendelkeznek.

Környezetkövetés

A stabil holografikus renderelés nagymértékben támaszkodik a platform & eszköz által történő fej-pózok nyomon követésére. A Unity a kamera által becsült és az alapul szolgáló platform által biztosított összes képkockát megjeleníti a jelenetben. Ha ez a nyomon követés nem követi megfelelően a tényleges fejmozgást, akkor a hologramok vizuálisan pontatlanok lesznek. Ez különösen nyilvánvaló és fontos az olyan AR-eszközök esetében, mint a HoloLens, ahol a felhasználók virtuális hologramokat kapcsolhatnak a valós világhoz. A teljesítmény jelentős a megbízható fejkövetéshez, de más fontos funkciók is lehetnek. A felhasználói élményt befolyásoló környezeti elemek típusai a megcélzott platformspecifikusaktól függnek.

Windows Mixed Reality

A Windows Mixed Reality platform néhány referenciaanyagot biztosít a platformon található hologramok stabilizálásához. Vannak azonban néhány kulcsfontosságú eszköz, amelyeket a fejlesztők a hologramos vizualizáció felhasználói élményének javítására használhatnak.

Mélységi puffer megosztása

A Unity-fejlesztők megoszthatják az alkalmazás mélységi pufferét a platformmal. Ez információt nyújt, ahol hologramok léteznek egy aktuális kerethez, amelyet a platform a hologramok stabilizálására használhat a Late-Stage Reprojection nevű hardveresen támogatott folyamaton keresztül.

Késői fázisú újraprojection

A keret renderelésének végén a Windows Mixed Reality platform felveszi az alkalmazás által létrehozott szín & mélységi renderelési célokat, és átalakítja a végső képernyőkimenetet, hogy figyelembe vegyék az utolsó fej-előrejelzés óta eltelt enyhe fejmozgást. Az alkalmazás játékhurkjának végrehajtása időt vesz igénybe. Például 60 FPS-nél ez azt jelenti, hogy az alkalmazás ~16,667 ms-et vesz igénybe a keret megjelenítéséhez. Bár ez úgy tűnhet, mint egy minimális idő, a felhasználó helyzete és tájolása a fej megváltozik, ami új vetítési mátrixok a kamera renderelés. A késői fázisú újraprojection átalakítja a végső kép képpontjait, hogy figyelembe vegyék ezt az új perspektívát.

Képpontonként és stabilizálósíkonkénti LSR

Az Windows Mixed Reality eszközön futó eszközvégponttól és operációsrendszer-verziótól függően a Late-Stage Reprojection algoritmust képpontonként vagy stabilizációs síkon hajtja végre a rendszer.

Képpontonkénti mélységalapú

A képpontonkénti mélységalapú reprojection magában foglalja a mélységi puffert a kép képpontonkénti kimenetének módosításához, és ezáltal a hologramok különböző távolságokban történő stabilizálásához. Egy 1 m-re lévő gömb például egy 10 m-re lévő oszlop előtt lehet. A gömböt jelképező képpontok eltérő átalakítást kapnak, mint az oszlopot jelképező távoli képpontok, ha a felhasználó kissé megbillentette a fejét. A képpontonkénti újraprojection minden képpontnál figyelembe veszi ezt a távolságkülönbséget a pontosabb eredmény érdekében.

Stabilizációs sík

Ha nem lehet pontos mélységi puffert létrehozni a platformmal való megosztáshoz, az LSR egy másik formája egy stabilizációs síkot használ. A jelenet összes hologramja kap némi stabilizálódást, de a kívánt síkban található hologramok a maximális hardverstabilizálást kapják. A sík pontja és normál értéke a Unity által biztosítottHolographicSettings.SetFocusPointForFrame API-val adható meg a platformnak.

Mélységpuffer formátuma

Ha a HoloLenst fejlesztésre célozza, erősen ajánlott a 16 bites mélységi pufferformátumot használni a 24 biteshez képest. Ez rendkívül sokat takaríthat meg a teljesítményen, bár a mélységi értékek kevésbé lesznek precizitásban. Az alacsonyabb pontosság és a z-harc elkerülése érdekében javasoljuk, hogy csökkentse a Unity által beállított 1000 m alapértelmezett értéktől távol eső klipsíkot .

Megjegyzés

Ha 16 bites mélységi formátumot használ, a rajzsablonpuffer szükséges effektusai nem működnek, mert a Unity ebben a beállításban nem hoz létre rajzsablonpuffert. Ha a 24 bites mélységi formátumot választja, általában egy 8 bites rajzsablonpuffert hoz létre, ha van ilyen a végpont grafikus platformján.

Mélységi puffer megosztása a Unityben

A mélységalapú LSR használatához két fontos lépést kell elvégezniük a fejlesztőknek.

  1. AProjektbeállítások>szerkesztése>Lejátszó>XR-beállításai>Virtuális valóság SDK-k>mélységi puffermegosztás engedélyezése területen
    1. Ha a HoloLenst célozza meg, javasoljuk, hogy a 16 bites mélységi formátumot is válassza.
  2. A képernyő színének megjelenítésekor a mélység megjelenítése is

Az átlátszatlan GameObjects a Unityben általában automatikusan mélyre ír. A transzparens & szöveges objektumok azonban alapértelmezés szerint nem írnak mélységbe. Az MRTK Standard Shader vagy Text Mesh Pro használata esetén ez könnyen orvosolható.

Megjegyzés

Ha gyorsan meg szeretné állapítani, hogy egy jelenet mely objektumai nem írnak vizuálisan a mélységi pufferbe, használhatja a Mélységpuffer renderelése segédprogramot az MRTK konfigurációs profil szerkesztőbeállításai alatt.

Átlátszó MRTK Standard shader

Ha átlátszó anyagokat szeretne használni az MRTK Standard shaderrel, válassza ki az anyagot az Inspector ablakban való megtekintéshez. Ezután kattintson a Javítás most gombra az anyag mélységi írássá alakításához (azaz Z-Write On).

Előtte

Mélységi puffer az MRTK Standard Shader javítása előtt

Utána

Mélységi puffer rögzített MRTK Standard Shader

Text Mesh Pro

Text Mesh Pro-objektumok esetén válassza a TMP GameObject lehetőséget, hogy megtekintse az ellenőrben. Az anyagösszetevő alatt váltson a hozzárendelt anyag árnyékolójára az MRTK TextMeshPro shader használatára.

Text Mesh Pro mélységpuffer javítása

Egyéni árnyékoló

Ha egyéni árnyékolót ír, adja hozzá a ZWrite jelzőt a Pass blokkdefiníció tetejére, hogy konfigurálja az árnyékolót úgy, hogy a mélységi pufferbe írjon.

Shader "Custom/MyShader"
{
    SubShader
    {
        Pass
        {
            ...
            ZWrite On
            ...
        }
    }
}
Átlátszatlan háttérrendszer

Ha a fenti metódusok nem működnek egy adott forgatókönyv esetében (azaz a Unity felhasználói felületének használatával), lehetséges, hogy egy másik objektum írható a mélységi pufferbe. Gyakori példa a Unity felhasználói felületi szövegének használata egy jelenet lebegő paneljén. Ha a panel átlátszatlan, vagy legalábbis a mélységbe ír, akkor a panel & mindkét szöveget stabilizálni fogja a platform, mivel z-értékeik annyira közel vannak egymáshoz.

WorldAnchors (HoloLens)

A vizuális stabilitás biztosítása érdekében a megfelelő konfigurációk biztosítása mellett fontos biztosítani, hogy a hologramok a megfelelő fizikai helyeken is stabilak maradjanak. Annak érdekében, hogy a platformot egy fizikai térben fontos helyeken tájékoztassák, a fejlesztők a WorldAnchorst használhatják a GameObjectsen, amelyeknek egy helyen kell maradniuk. A WorldAnchor a GameObjecthez hozzáadott összetevő, amely abszolút irányítást vesz át az objektum átalakítása felett.

Az olyan eszközök, mint a HoloLens, folyamatosan figyelik és megismerik a környezetet. Így, ahogy a HoloLens nyomon követi a mozgást & helyet az űrben, a becslések frissülnek, és a Unity koordinátarendszert módosítják. Ha például egy GameObject 1 m-re van a kamerától az indításkor, mivel a HoloLens nyomon követi a környezetet, észreveheti, hogy a GameObject fizikai helye valójában 1,1 m-re van. Ez a hologram eltolódását eredményezné. A WorldAnchor gameObjectre való alkalmazása lehetővé teszi a horgony számára az objektum átalakításának szabályozását, hogy az objektum a megfelelő fizikai helyen maradjon (azaz futásidőben 1,1 m-re frissítsen az 1m helyett). A WorldAnchorok alkalmazás-munkamenetek közötti megőrzéséhez a fejlesztők a WorldAnchorStore-thasználhatják a WorldAnchors mentéséhez és betöltéséhez.

Megjegyzés

Miután hozzáadtak egy WorldAnchor-összetevőt a GameObjecthez, nem lehet módosítani a GameObject átalakítóját (pl. transform.position = x). A fejlesztőnek el kell távolítania a WorldAnchort az átalakítás szerkesztéséhez.

WorldAnchor m_anchor;

public void AddAnchor()
{
    this.m_anchor = this.gameObject.AddComponent<WorldAnchor>();
}

public void RemoveAnchor()
{
    DestroyImmediate(m_anchor);
}

Ha alternatívát szeretne a Horgonyok manuális használata helyett, tekintse meg a Microsoft World Locking Tools (Microsoft World Locking Tools) című témakört.

Lásd még