Hologram-stabilitás

Teljesítmény

Ahhoz, hogy a mögöttes vegyes valóságú platform és eszköz a legjobb eredményeket érje el, fontos a képkocka-sebesség elérése. A cél képkocka-érték (például 60 VAGY 90 FORD) platformonként és eszközönként eltérő lehet. A képkocka-nak megfelelő vegyes valóságú alkalmazások azonban stabil hologramokkal, hatékony fejkövetéssel, kézkövetéssel és sok más funkcióval is fognak találkozni.

Környezetkövetés

A stabil holografikus renderelés nagy mértékben támaszkodik a platformeszköz fejlebenykövetésére. & A Unity a kamera által becsült és a mögöttes platform által biztosított minden képkockát renderel. Ha ez a követés nem követi megfelelően a tényleges fejmozgást, akkor a hologramok vizuálisan pontatlannak fognak megjelenni. Ez különösen egyértelmű és fontos az olyan AR-eszközök esetében, HoloLens amikor a felhasználók virtuális hologramokat tudnak a való világhoz viszonyulni. A teljesítmény fontos a megbízható fejkövetéshez, de más fontos jellemzők is rendelkezésreállnak. 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 referenciaanyagokat biztosít a hologramok platformon való stabilizálására. Van azonban néhány kulcsfontosságú eszköz, amelyek segítségével a fejlesztők javíthatják a hologramos vizuális élményt a felhasználók számára.

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 arról, hogy hol léteznek hologramok az aktuális képkockához, hogy a platform hogyan tudja stabilizálni a hologramokat egy hardveres támogatású folyamattal, az úgynevezett Late-Stage reprojection használatával.

Kései szakaszos újravetítés

A képkocka renderelésének végén a Windows Mixed Reality platform az alkalmazás által előállított színmélység-renderelési célokat veszi fel, és átalakítja a végső képernyőkimenetet, hogy figyelembe veszi az utolsó fejmozgás előrejelzése óta történt legkisebb & fejmozgást. Az alkalmazás játékhurkának végrehajtása időt vesz igénybe. 60 FORD értéknél például ez azt jelenti, hogy az alkalmazás ~16,667 ezred másodperc alatt renderel egy keretet. Bár ez minimális időnek tűnhet, a felhasználó fejének pozíciója és tájolása megváltozik, ami a kamera új leképezési mátrixát eredményezi a renderelés során. A kései szakaszos reprodukálás átalakítja a végső kép képpontját, hogy figyelembe veszi ezt az új perspektívát.

Képpontonkénti és stabilizálási sík LSR-e

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-reprodukálási algoritmus képpontonként vagy egy stabilizálási síkon keresztül lesz hajtva.

Képpontonkénti mélységalapú

A képpontonkénti mélységalapú reprodukálás magában foglalja a mélységi puffert a képkimenet képpontonkénti módosításához, és így a hologramok különböző távolságban való stabilizálására. Előfordulhat például, hogy egy 1 m-re található sphere előtt egy 10 m-re található pillér áll. A sphere-et képviselő képpontok eltérő átalakítást fognak ábrázolni, mint az alappillérnek megfelelő, távolról található képpontok, ha a felhasználó kissé elhajolta a fejét. A képpontonkénti reprodukálás minden képpontnál figyelembe veszi ezt a távolsági különbséget a pontosabb reprodukálás érdekében.

Stabilitási 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ási síkot használ. A jelenet összes hologramja némi stabilizálást fog kapni, de a kívánt síkon a hologramok a maximális hardverstabilitást kapják meg. A sík pontját és normál pontját a Unity által biztosított HolographicSettings.SetFocusPointForFrameAPI-val lehet biztosítani a platformnak.

Mélységi puffer formátuma

Ha fejlesztési célokra HoloLens, erősen ajánlott a 16 bites pufferformátum használata a 24 biteshez képest. Ez óriási teljesítménybeli megtakarítást jelent, bár a mélységi értékek kevésbé pontosak. A kisebb pontosság kompenzálása és a z-elökeresztéselkerülése érdekében ajánlott csökkenteni a Unity által beállított alapértelmezett 1000 milliós alapértéktől távolodó vágósíkot.

Megjegyzés

Ha 16 bitesmélységű formátumot használ, a sablonpuffer szükséges hatásai nem fognak működni, mert a Unity nem hoz létre sablonpufferet ebben a beállításban. A 24 bites formátum ezzel szemben általában egy 8 bitessablonpuffert hoz létre, ha van ilyen a végpontgrafikon-platformon.

Mélységi puffermegosztás a Unityben

A mélységalapú LSR-hez két fontos lépést kell tenni a fejlesztőknek.

  1. Az EditProject GépházPlayerXR GépházVirtual Reality SDKs Enable Depth Buffer Sharing (Mélységi puffermegosztás engedélyezése) alatt
    1. Ha a HoloLens, javasoljuk, hogy a 16 bites mélységű formátumot is válassza.
  2. A színek képernyőn való megjelenítésekor a renderelés mélysége is

A Unityben az átlátszatlan GameObjects általában automatikusan mélyre ír. A transzparens szöveges objektumok azonban alapértelmezés szerint általában nem & mélyednek el. Az MRTK Standard Shader vagy a Text Mesh Pro használata esetén ez egyszerűen orvosolható.

Megjegyzés

Annak gyors meghatározásához, hogy egy jelenet mely objektumai nem írnak vizuálisan a mélységi pufferbe, használhatja az MRTK-konfigurációs profil Szerkesztő Gépház segédprogramját.

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

Az MRTK Standardárnyékolót használó átlátszó anyagok esetén válassza ki az anyagot az Inspector ablakban való megtekintéshez. Ezután kattintson a Fix Now (Javítás most) gombra az anyag mélységi írásra való átalakításához (pl. Z-Write On).

Előtte

Mélységpuffer az MRTK Standard Shader kijavítás előtt

Utána

Mélységpuffer rögzített MRTK Standard shader

Szövegháló Pro

A Text Mesh Pro objektumokhoz válassza ki a TMP GameObject et, hogy megtekintse az inspectorban. Az anyagösszetevő alatt váltsa át a hozzárendelt anyag árnyékolóját az MRTK TextMeshPro árnyékoló használatára.

Text Mesh Pro mélységi puffer kijavítása

Egyéni árnyékoló

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

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

Ha a fenti metódusok nem működnek egy adott forgatókönyvben (vagyis a Unity felhasználói felületén), lehetséges egy másik objektumírás a mélységi pufferbe. Gyakori példa a Unity UI Text használata egy jelenet lebegő panelén. Ha átlátszatlanná teszi a panelt, vagy legalábbis részletesen ír, akkor a platform mindkét szöveget stabilizálja, mivel a z-értékeik nagyon 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, hogy a hologramok a megfelelő fizikai helyeken is stabilak maradjanak. A fejlesztők a GameObjects worldAnchors használatával tájékoztatják a platformot a fizikai térben található fontos helyekről, amelyeknek egy helyen kell maradniuk. A WorldAnchor egy GameObjecthez hozzáadott összetevő, amely teljes mértékben átveszi az adott objektum átalakításának teljes vezérlését.

Az olyan eszközök, HoloLens folyamatosan leolvassa és megismerik a környezetet. Így, ahogy a HoloLens követi a tér mozgási pozícióját, a becslések frissülnek, és a & Unity koordinátarendszere & Ha például egy GameObject 1m-et helyez el a kamerától az elején, mivel a HoloLens nyomon követi a környezetet, előfordulhat, hogy a fizikai pont, ahol a GameObject található, valójában 1,1 m-re van. Ez a hologram eltérését eredményezné. A WorldAnchor GameObjectre való alkalmazása lehetővé teszi, hogy a horgony vezérelje az objektum átalakítását, hogy az objektum a megfelelő fizikai helyen maradjon (azaz futásidőben 1 ezredm helyett 1m-re frissül). A worldAnchors alkalmazás-munkamenetek közötti megőrzéséhez a fejlesztők a WorldAnchorStore használatával mentheti és betöltheti a WorldAnchors alkalmazást.

Megjegyzés

Miután hozzáadtak egy WorldAnchor összetevőt a GameObjecthez, nem lehet módosítani a GameObject átalakítását (azaz transform.position = x). A fejlesztőknek el kell távolítaniuk 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 a Anchors manuális használatát szeretné alternatívaként használni, tekintse meg a Microsoft World Locking Tools(Microsoft World Locking Tools) webhelyet.

Lásd még