Stabilizacja hologramu

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ść klatek (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 ramy będą miały stabilne hologramy, a także wydajne śledzenie głowy, śledzenie rąk i nie tylko.

Śledzenie środowiska

Stabilne renderowanie holograficzne w dużym stopniu opiera się na śledzeniu pozy głowy przez urządzenie platformy & . 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, w których użytkownicy mogą powiązać wirtualne hologramy ze światem rzeczywistym. Wydajność jest znacząca w przypadku niezawodnego śledzenia głowy, ale mogą również istnieć inne ważne funkcje. Typy elementów środowiska wpływających na środowisko użytkownika będą zależeć od określonych platform docelowych.

Windows Mixed Reality

Platforma Windows Mixed Reality zawiera pewne materiały referencyjne do stabilizowania hologramów na platformie. Istnieje jednak kilka kluczowych narzędzi, których deweloperzy mogą używać 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 platformie. Zawiera on informacje, w których istnieją hologramy dla bieżącej ramki, których platforma może użyć do stabilizacji hologramów za pośrednictwem procesu wspomaganego sprzętowo, znanego jako Late-Stage Reprojection.

Ponowne projekty na późnym etapie

Na końcu renderowania ramki platforma Windows Mixed Reality przyjmuje cele renderowania głębokości kolorów & generowane przez aplikację i przekształca końcowe dane wyjściowe ekranu, aby uwzględnić niewielki ruch głowy od czasu ostatniego przewidywania pozycji głowy. Wykonywanie pętli gier aplikacji zajmuje trochę czasu. Na przykład przy 60 KL/s oznacza to, że aplikacja przyjmuje ok. 16,667 ms do renderowania ramki. Mimo że może to wydawać się miniskuli ilością czasu, pozycja i orientacja głowy użytkownika zmienią się, co spowoduje wprowadzenie nowych macierzy projekcji dla aparatu w renderowaniu. Reprodukcja późnego etapu przekształca piksele na końcowym obrazie, aby uwzględnić tę nową perspektywę.

LSR na piksel a stabilizacja

W zależności od punktu końcowego urządzenia i wersji systemu operacyjnego działającego na urządzeniu Windows Mixed Reality algorytm ponownego projektu Late-Stage zostanie wykonany na piksel lub za pośrednictwem płaszczyzny stabilizacji.

Na podstawie głębokości na pikselach

Reprodukcja 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 1 m dalej 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 nieznacznie przechylił głowę. Reprojektacja 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 platformy, 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 holographicSettings.SetFocusPointForFrameAPIdostarczonego przez aparat Unity.

Format buforu głębokości

Jeśli celem HoloLens na potrzeby programowania, zdecydowanie zaleca się korzystanie z formatu buforu głębokości 16-bitowej w porównaniu do 24-bitowego. 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 klipu 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 bufora wzornika w tym ustawieniu. Wybranie formatu głębokości 24-bitowej z drugiej strony spowoduje utworzenie buforu wzornika 8-bitowego, jeśli ma to zastosowanie na platformie grafiki punktu końcowego.

Udostępnianie buforu głębokości w a aparatu Unity

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

  1. W obszarze Edycja>Project Ustawienia>PlayerXR> Ustawienia >Sprzwirtualne zestawy SDK> rzeczywistości włącz udostępnianie buforu głębokości
    1. W przypadku HoloLens określania wartości docelowej zaleca się również wybranie formatu głębokości 16-bitowej.
  2. Podczas renderowania koloru na ekranie również głębokość renderowania

Nieprzezroczyste obiekty GameObjects w a unity zwykle automatycznie zapisują się w głębi systemu. Jednak obiekty przezroczystego & tekstu zazwyczaj nie będą domyślnie zapisywane w głębi systemu. W przypadku korzystania z cieniowania standardowego zestawu narzędzi MRTK lub Mesh Pro tekstu można to łatwo rozwiązać.

Uwaga

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

Cieniowania przezroczystego zestawu narzędzi MRTK Standard

W przypadku przezroczystych materiałów przy użyciu cieniowania standardowego zestawu NARZĘDZI MRTK wybierz materiał, aby wyświetlić go w oknie Inspector (Inspektor). Następnie kliknij przycisk Napraw teraz , aby przekonwertować materiał na zapis na głębokość (tj. Z-Write On).

Stary adres

Depth Buffer Before Fix MRTK Standard Shader

Po

Depth Buffer Fixed MRTK Standard Shader

Mesh Pro tekstowe

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

Text Mesh Pro Depth Buffer Fix

Cieniowania niestandardowego

W przypadku zapisywania cieniowania niestandardowego dodaj flagę ZWrite na początku definicji bloku Przekazywanie , aby skonfigurować moduł cieniowania 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 przestawnym panelu w scenie. Dzięki dokonaniu nieprzezroczystego lub przynajmniej zapisu na głębokości, zarówno tekst & , który panel zostanie ustabilizowany przez platformę, ponieważ ich wartości z są tak blisko siebie.

WorldAnchors (HoloLens)

Oprócz zapewnienia prawidłowej konfiguracji, aby zapewnić stabilność wizualną, ważne jest, aby hologramy pozostały stabilne w odpowiednich lokalizacjach fizycznych. Aby poinformować platformę o ważnych lokalizacjach w przestrzeni fizycznej, deweloperzy mogą korzystać z obiektów WorldAnchors w obiektach GameObject, które muszą pozostać w jednym miejscu. WorldAnchor jest składnikiem dodanym do obiektu GameObject, który przejmuje absolutną kontrolę nad przekształceniem tego obiektu.

Urządzenia, takie jak HoloLens, stale skanują i uczą się o środowisku. W związku z tym, ponieważ HoloLens śledzi położenie ruchu & w przestrzeni, jego szacunki zostaną zaktualizowane, a układ współrzędnych aparatu Unity zostanie dostosowany. Na przykład jeśli obiekt GameObject znajduje się 1 m z aparatu na początku, ponieważ 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 zamiast 1 mln w czasie wykonywania). Aby utrwały bibliotekę WorldAnchors między sesjami aplikacji, deweloperzy mogą zatrudnić magazyn WorldAnchorStore w celu zapisania i załadowania modułów WorldAnchors.

Uwaga

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

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 do blokowania środowiska Microsoft World Locking Tools.

Zobacz też