Megosztás a következőn keresztül:


Hologramstabilizálás – MRTK2

Teljesítmény

Annak érdekében, hogy a mögöttes vegyes valóság platform és eszköz a legjobb eredményt hozza, fontos, hogy teljesítsen keretsebességeket. A célkockasebesség (például 60 FPS vagy 90 FPS) platformonként és eszközönként eltérő lesz. A vegyes valóság alkalmazásainak keretsebessége azonban stabil hologramokkal, valamint hatékony fejkövetéssel, kézkövetéssel és egyebekvel fog rendelkezni.

Környezetkövetés

A stabil holografikus renderelés nagyban támaszkodik a platform > eszköz fej-pózok követésére. A Unity a kamera pózának becsült és a mögöttes platform által biztosított minden képkockáját rendereli. Ha ez a nyomon követés nem követi megfelelően a tényleges fejmozgatá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üggenek.

Windows Mixed Reality

A Windows Mixed Reality platform néhány referenciaanyagot biztosít a hologramok stabilizálásához a platformon. 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ői megoszthatják az alkalmazás mélységi pufferét a platformmal. Ez olyan információt nyújt, ahol hologramok léteznek egy aktuális kerethez, amelyet a platform a hologramok stabilizálására használhat egy hardveresen támogatott folyamat, az úgynevezett Late-Stage Reprojection segítségével.

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- és mélységi renderelési célokat, és átalakítja a végső képernyőkimenetet, hogy figyelembe vehesse az utolsó fej-póz előrejelzése óta bármilyen 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-t vesz igénybe a keret megjelenítéséhez. Annak ellenére, hogy ez úgy tűnhet, mint egy minimális idő, a felhasználó helyzete és tájolása a fejük 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

A Windows Mixed Reality-eszközön futó eszközvégponttól és operációsrendszer-verziótól függően a késői fázisú újraprojektelési algoritmus képpontonként vagy egy stabilizálósíkon lesz végrehajtva.

Képpontonkénti mélységalapú

Képpontonkénti mélységalapú reprojection magában foglalja a mélységi puffert a kép kimenetének képpontonkénti 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 reprojection minden képpontnál figyelembe veszi ezt a távolságkülönbséget a pontosabb ismétlés érdekében.

Stabilizáló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áló 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 maximális hardverstabilizálást kapnak. A síkhoz tartozó pont és normál a Unity által biztosított HolographicSettings.SetFocusPointForFrame API-val adható meg a platformnak.

Mélységi puffer formátuma

Ha a HoloLens-t fejleszti, erősen ajánlott a 16 bites mélységi pufferformátum használata 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 kompenzálása és a z-verés elkerülése érdekében javasoljuk, hogy csökkentse a unity által beállított 1000m alapértelmezett értéktől távol eső vágósíkot.

Feljegyzé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 alkalmazható a végpont grafikus platformján.

Mélységi puffermegosztás a Unityben

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

  1. A Project Settings Player XR Settings>Virtual Reality SDKs Enable Depth Buffer Sharing (Projektbeállítások>szerkesztése>) területen A>Virtuális valóság SDK-k lehetővé teszik a> mélységi puffermegosztást
    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 általában nem írnak a mélységbe. Ha az MRTK Standard Shadert vagy a Text Mesh Pro-t használja, ez könnyen orvosolható.

Feljegyzés

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

Átlátszó MRTK Standard árnyékoló

Ha átlátszó anyagokat szeretne használni az MRTK Standard árnyékolóval, válassza ki az anyagot a Felügyelő ablakban való megtekintéshez. Ezután kattintson a Javítás gombra az anyag mélységgé 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 ki a TMP GameObjectet, hogy megtekintse az ellenőrben. Az anyagösszetevő alatt váltson a hozzárendelt anyag árnyékolójának 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ó elejéhez, hogy az árnyékolót úgy konfigurálja, hogy a mélységi pufferbe írjon.

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

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 lebegő panelen egy jelenetben. A panel átlátszatlansá tételével vagy legalább a mélységi írással a platform stabilizálja a szöveget és a panelt, mivel z-értékük annyira közel áll egymáshoz.

WorldAnchors (HoloLens)

A vizuális stabilitás biztosítása érdekében a megfelelő konfigurációk biztosítása mellett fontos gondoskodni arról, 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 teljes mértékben átveszi az objektum átalakításának irányítását.

Az olyan eszközök, mint a HoloLens, folyamatosan figyelik és tanulják a környezetet. Így, ahogy a HoloLens nyomon követi a mozgást és a helyet a térben, a becslései frissülnek, és a Unity koordináta-rendszere módosul. Ha például egy GameObject 1 m-re van a kamerától, amikor a HoloLens nyomon követi a környezetet, észreveheti, hogy a Fizikai pont, ahol a GameObject található, valójában 1,1 m távolságra van. Ez a hologram elsodró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 m helyett 1,1 m-re frissítsen). A WorldAnchors alkalmazás-munkamenetek közötti megőrzéséhez a fejlesztők a WorldAnchorStore-t használhatják a WorldAnchors mentéséhez és betöltéséhez.

Feljegyzés

Miután hozzáadtak egy WorldAnchor-összetevőt a GameObjecthez, nem lehet módosítani a GameObject átalakításá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álatához, tekintse meg a Microsoft World Locking Tools eszközt.

Lásd még