Stabilizacja hologramu — MRTK2

Wydajność

Aby podstawowa platforma rzeczywistości mieszanej i urządzenie wygenerowały najlepsze wyniki, ważne jest, aby osiągnąć wydajność szybkości klatek. Docelowa szybkość ramek (np. 60 FPS lub 90 FPS) będzie się różnić na różnych platformach i urządzeniach. Jednak aplikacje rzeczywistości mieszanej spełniające ramkę będą miały stabilne hologramy, a także wydajne śledzenie głowy, śledzenie rąk i nie tylko.

Śledzenie środowiska

Stabilne renderowanie holograficzne intensywnie opiera się na śledzeniu po stronie głowy przez platformę i urządzenie. Aparat Unity renderuje scenę z każdej ramki z aparatu szacowanego i dostarczanego przez platformę bazową. Jeśli to śledzenie nie jest prawidłowo zgodne z rzeczywistym ruchem głowy, hologramy będą wyświetlane wizualnie niedokładne. Jest to szczególnie widoczne i ważne w przypadku urządzeń AR, takich jak HoloLens, gdzie użytkownicy mogą powiązać wirtualne hologramy z rzeczywistym światem. Wydajność jest znacząca w przypadku niezawodnego śledzenia głowy, ale mogą również istnieć inne ważne funkcje. Typy elementów środowiskowych wpływających na środowisko użytkownika będą zależeć od specyfiki platformy docelowej.

Windows Mixed Reality

Platforma Windows Mixed Reality zawiera pewne materiały referencyjne do stabilizacji hologramów na platformie. Istnieje kilka kluczowych narzędzi, które deweloperzy mogą jednak wykorzystać do ulepszania środowiska wizualnego hologramu dla użytkowników.

Udostępnianie buforu głębokości

Deweloperzy aparatu Unity mają możliwość udostępniania buforu głębokości aplikacji na platformie. Zawiera on informacje, w których istnieją hologramy dla bieżącej ramki, których platforma może używać do stabilizacji hologramów za pośrednictwem procesu wspomaganego sprzętowo nazywanego reprojektacją późnego etapu.

Ponowne projekty na późnym etapie

Na końcu renderowania ramki platforma Windows Mixed Reality przyjmuje cele renderowania kolorów i głębokości generowane przez aplikację i przekształca końcowe dane wyjściowe ekranu, aby uwzględnić niewielki ruch głowy od czasu ostatniego przewidywania głowy. Pętla gry aplikacji zajmuje trochę czasu na wykonanie. Na przykład przy 60 KL/s oznacza to, że aplikacja przyjmuje ok. 16,667 ms w celu renderowania ramki. Mimo że może się to wydawać miniskuli czasu, pozycja i orientacja głowy użytkownika zmienią się, co spowoduje nowe macierze projekcyjne dla aparatu w renderowaniu. Ponowne projektu na późnym etapie przekształca piksele na końcowym obrazie, aby uwzględnić tę nową perspektywę.

LSR płaszczyzny stabilizacji na piksel

W zależności od punktu końcowego urządzenia i wersji systemu operacyjnego działającego na urządzeniu z systemem Windows Mixed Reality algorytm ponownego projektowania na koniec etapu będzie wykonywany na piksel lub za pośrednictwem płaszczyzny stabilizacji.

Na podstawie głębokości na pikselach

Reprojektowanie na podstawie głębokości na piksel obejmuje użycie buforu głębokości w celu zmodyfikowania danych wyjściowych obrazu na piksel, a tym samym stabilizacji hologramów w różnych odległościach. Na przykład kula o 1 m może znajdować się przed filarem, który jest oddalony o 10 m. Piksele reprezentujące sferę będą miały inną transformację niż odległe piksele reprezentujące filar, jeśli użytkownik lekko przechylił głowę. Ponowneprojektowanie na piksel uwzględnia tę różnicę odległości w każdym pikselu w celu dokładniejszego ponownego projektu.

Płaszczyzna stabilizacji

Jeśli nie można utworzyć dokładnego buforu głębokości do udostępniania z platformą, inna forma LSR wykorzystuje płaszczyznę stabilizacji. Wszystkie hologramy w scenie otrzymają pewną stabilizację, ale hologramy leżące na żądanej płaszczyźnie otrzymają maksymalną stabilizację sprzętu. Punkt i normalny dla płaszczyzny można dostarczyć do platformy za pośrednictwem interfejsu API HolographicSettings.SetFocusPointForFrame dostarczonego przez aparat Unity.

Format buforu głębokości

W przypadku stosowania urządzenia HoloLens do programowania zdecydowanie zaleca się korzystanie z formatu buforu głębokości 16-bitowej w porównaniu z 24-bitowym. Może to znacznie zaoszczędzić na wydajności, chociaż wartości głębokości będą miały mniejszą precyzję. Aby zrekompensować niższą precyzję i uniknąć walki z, zaleca się zmniejszenie dalekiej płaszczyzny klipów z wartości domyślnej 1000m ustawionej przez aparat Unity.

Uwaga

W przypadku korzystania z formatu głębokości 16-bitowej wymagane efekty buforu wzornika nie będą działać, ponieważ aparat Unity nie tworzy buforu wzornika w tym ustawieniu. Wybranie formatu głębokości 24-bitowej zazwyczaj spowoduje utworzenie buforu wzornika 8-bitowego, jeśli ma to zastosowanie na platformie grafiki punktu końcowego.

Udostępnianie buforu głębokości w aucie Unity

Aby móc korzystać ze szczegółowego LSR, należy wykonać dwa ważne kroki, które deweloperzy muszą wykonać.

  1. W obszarze Edytowanie>ustawień programu Project Settings>Odtwarzacz>XR Ustawienia>zestawów SDK> rzeczywistości wirtualnej włącz udostępnianie buforu głębokości
    1. W przypadku określania wartości docelowej dla urządzenia HoloLens zaleca się również wybranie formatu głębokości 16-bitowej.
  2. Podczas renderowania koloru na ekranie renderuj również głębokość renderowania

Nieprzezroczyste obiekty GameObjects w akwenie Unity zwykle automatycznie zapisują się w głębi systemu. Jednak obiekty przezroczyste i tekstowe zazwyczaj nie będą domyślnie zapisywane w głębi systemu. W przypadku korzystania z cieniowania standardowego mrTK lub usługi Text Mesh Pro można to łatwo rozwiązać.

Uwaga

Aby szybko określić, które obiekty w scenie nie zapisują się w buforze głębokości wizualnie, można użyć narzędzia Bufor głębokości renderowania w obszarze Ustawienia edytora w profilu konfiguracji zestawu narzędzi MRTK.

Przezroczysty moduł cieniowania mrTK w warstwie Standardowa

Aby uzyskać przezroczyste materiały korzystające z cieniatora STANDARD MRTK, wybierz materiał, aby wyświetlić go w oknie Inspector (Inspektor). Następnie kliknij przycisk Napraw teraz , aby przekonwertować materiał na zapis do głębokości (tj. Z-Write On).

Przed

Bufor głębokości przed naprawieniem cieniowania standardowego zestawu narzędzi MRTK

Po

Bufor głębokości stały cieniowania standardowego zestawu narzędzi MRTK

Text Mesh Pro

W przypadku obiektów Text Mesh Pro wybierz obiekt TMP GameObject, aby wyświetlić go w inspektorze. W obszarze składnika materiału przełącz cieniowanie przypisanego materiału, aby użyć cieniowania MRTK TextMeshPro.

Poprawka buforu głębokości Pro siatki tekstu

Cieniowania niestandardowego

W przypadku pisania niestandardowego cieniowania dodaj flagę ZWrite na początku definicji bloku Pass , aby skonfigurować cieniator do zapisu w buforze głębokości.

Shader "Custom/MyShader"
{
    SubShader
    {
        Pass
        {
            ...
            ZWrite On
            ...
        }
    }
}
Nieprzezroczyste kopie zapasowe

Jeśli powyższe metody nie działają w danym scenariuszu (tj. przy użyciu interfejsu użytkownika aparatu Unity), istnieje możliwość zapisania innego obiektu w buforze głębokości. Typowym przykładem jest użycie tekstu interfejsu użytkownika aparatu Unity na pływającym panelu w scenie. Dzięki temu, że panel jest nieprzezroczystym lub przynajmniej zapisem do głębi, to zarówno tekst , jak i panel będą ustabilizowane przez platformę, ponieważ ich wartości z są tak blisko siebie.

WorldAnchors (HoloLens)

Oprócz zapewnienia, że prawidłowe konfiguracje są spełnione, aby zapewnić stabilność wizualną, należy upewnić się, że hologramy pozostają stabilne w odpowiednich lokalizacjach fizycznych. Aby poinformować platformę o ważnych lokalizacjach w przestrzeni fizycznej, deweloperzy mogą korzystać z obiektów WorldAnchors w usłudze GameObjects, które muszą pozostać w jednym miejscu. WorldAnchor to składnik dodany do obiektu GameObject, który przejmuje absolutną kontrolę nad przekształceniem tego obiektu.

Urządzenia takie jak HoloLens stale skanują i uczą się środowiska. W związku z tym, ponieważ urządzenie HoloLens śledzi położenie ruchu i położenia w przestrzeni, jego szacunki zostaną zaktualizowane, a układ współrzędnych aparatu Unity zostanie dostosowany. Jeśli na przykład obiekt GameObject znajduje się 1 m od aparatu na początku, ponieważ urządzenie HoloLens śledzi środowisko, może zdać sobie sprawę z fizycznego punktu, w którym znajduje się obiekt GameObject, jest w rzeczywistości 1,1 mln. Spowodowałoby to dryfowanie hologramu. Zastosowanie obiektu WorldAnchor do obiektu GameObject umożliwi zakotwiczenie w celu kontrolowania przekształcenia obiektu, tak aby obiekt pozostał w prawidłowej lokalizacji fizycznej (tj. aktualizacja do 1,1 mln w czasie wykonywania). Aby utrwały elementy WorldAnchors między sesjami aplikacji, deweloperzy mogą stosować magazyn WorldAnchorStore w celu zapisania i załadowania aplikacji WorldAnchors.

Uwaga

Po dodaniu składnika WorldAnchor do obiektu GameObject nie można zmodyfikować przekształcenia obiektu GameObject (tj. transform.position = x). Deweloper musi usunąć program WorldAnchor, aby edytować przekształcenie.

WorldAnchor m_anchor;

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

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

Jeśli chcesz użyć alternatywy do ręcznej pracy z kotwicami, zapoznaj się z narzędziami microsoft World Locking Tools.

Zobacz też