Stabilizacja hologramów

Wydajność

Aby podstawowa platforma i urządzenie rzeczywistości mieszanej przyjmowały najlepsze wyniki, ważne jest, aby osiągnąć szybkość klatek. Docelowa szybkość klatek (np. 60 -90- lub 90 - 90 USD) będzie się różnić w zależności od platformy i urządzeń. Jednak aplikacje rzeczywistości mieszanej, w których są spełniane ramy, będą mieć stabilne hologramy, a także wydajne śledzenie głowy, śledzenie rąk i nie tylko.

Śledzenie środowiska

Stabilne renderowanie holograficzne w dużym stopniu zależy od śledzenia ułożenia głowy przez platformę & urządzenia. Aparat Unity renderuje scenę każdej ramki z kamery, która jest szacowana i dostarczana przez podstawową platformę. Jeśli to śledzenie nie jest prawidłowo zgodne z rzeczywistym ruchem głowy, hologramy będą wizualnie niedokładne. Jest to szczególnie oczywiste i ważne w przypadku urządzeń AR, takich jak HoloLens gdzie użytkownicy mogą powiązać wirtualne hologramy ze światem rzeczywistym. Wydajność jest istotna dla niezawodnego śledzenia głowy, ale mogą również być inne ważnefunkcje. Typy elementów środowiska, które mają wpływ na środowisko użytkownika, będą zależeć od specyfiki platformy docelowej.

Windows Mixed Reality

Platforma Windows Mixed Reality udostępnia pewne materiały referencyjne do ustabilizowania hologramów na platformie. Istnieje kilka kluczowych narzędzi, które deweloperzy mogą wykorzystać, aby ulepszyć środowisko wizualne hologramów dla użytkowników.

Udostępnianie buforu głębokości

Deweloperzy aparatu Unity mogą udostępnić bufor głębokości aplikacji platformie. Zapewnia to informacje, w których hologramy istnieją dla bieżącej ramki, które platforma może wykorzystać do ustabilizowania hologramów za pośrednictwem wspomaganych sprzętowo procesów nazywanych Late-Stage Reprojection.

Ponowne reprojekcja na późnym etapie

Na końcu renderowania ramki platforma Windows Mixed Reality pobiera obiekty docelowe renderowania głębokości & wygenerowane przez aplikację i przekształca końcowe dane wyjściowe ekranu, aby uwzględnić niewielkie ruchy głowy od momentu ostatniego przewidywania ułożenia głowy. Wykonywanie pętli gier aplikacji zajmuje trochę czasu. Na przykład przy wartości 60 USD oznacza to, że renderowanie ramki przez aplikację trwa około 16,667 min. Mimo że może to wydawać się miniscule czasu, pozycja i orientacja głowy użytkownika zmieni się, co spowoduje nowe macierze projekcji aparatu podczas renderowania. Reprojekcja na późnym etapie przekształca piksele na ostatnim obrazie, aby uwzględnić tę nową perspektywę.

LSR na piksel a płaszczyzna ustabilizowania

W zależności od punktu końcowego urządzenia i wersji systemu operacyjnego uruchomionego na urządzeniu z systemem Windows Mixed Reality algorytm reprojekcji usługi Late-Stage będzie wykonywany na piksel lub za pośrednictwem płaszczyzny ustabilizowania.

Na podstawie głębokości na piksel

Reprojekcja na podstawie głębokości poszczególnych pikseli polega na użyciu buforu głębokości w celu zmodyfikowania danych wyjściowych obrazu na piksel, a tym samym ustabilizowania hologramów w różnych odległościach. Na przykład sfera 1 m dalej może być przed filarem, który jest 10 m. Piksele reprezentujące sferę będą mieć inne przekształcenie niż odchodne piksele reprezentujące filar, jeśli użytkownik nieco pochylił głowy. Reprojekcja na piksel będzie uwzględniać tę różnicę odległości w każdym pikselu w celu dokładniejszego reprojekcji.

Płaszczyzna ustabilizowania

Jeśli nie jest możliwe utworzenie dokładnego buforu głębokości do udostępnienia platformie, inna forma LSR wykorzystuje płaszczyznę ustabilizowania. Wszystkie hologramy w scenie otrzymają pewne ustabilizowane elementy, ale hologramy na żądanej płaszczyźnie otrzymają maksymalną ustabilizowanie sprzętu. Punkt i normalny punkt płaszczyzny można dostarczyć do platformy za pośrednictwem interfejsu API HolographicSettings.SetFocusPointForFrame dostarczonegoprzez aparat Unity .

Format buforu głębokości

W przypadku HoloLens na tworzenie aplikacji zdecydowanie zaleca się korzystanie z 16-bitowego formatu buforu głębokości w porównaniu z 24-bitowym. Może to znacznie zaoszczędzić na wydajności, chociaż wartości głębokości będą mieć mniejszą precyzję. Aby skompensować niższą precyzję i uniknąć odrównania Z,zaleca się zmniejszenie płaszczyzny odejścia od wartości domyślnej 1000 m ustawionej przez unity.

Uwaga

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

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

Aby korzystać z funkcji LSR opartej na głębi systemu, należy wykonać dwa ważne kroki.

  1. W obszarze > Project Ustawienia > Player > XR Ustawienia Virtual Reality SDK > Enable Depth Buffer Sharing (Włączanie udostępniania buforu > głębokości)
    1. W przypadku HoloLens celu zaleca się również wybranie formatu głębokości 16-bitowej.
  2. Podczas renderowania koloru na ekranie jest również głębia renderowania

Nieprzezroczyste obiekty GameObject w a unity zazwyczaj są zapisywane w głębi automatycznie. Jednak obiekty & tekstu przezroczystego domyślnie nie będą zapisywać w głębi systemu. Jeśli korzystasz ze standardowego cieniowania zestawu narzędzi MRTK lub Pro, można to łatwo skorygować.

Uwaga

Aby szybko określić, które obiekty w scenie nie zapisują wizualnie do buforu głębokości, można użyć narzędzia Render Depth Buffer w obszarze edytora Ustawienia profilu konfiguracji mrTK.

Przezroczysty cieniowanie MRTK Standard

W przypadku przezroczystych materiałów używających cieniowania MRTK Standardwybierz materiał, aby wyświetlić go w oknie Inspector (Inspektor). Następnie kliknij przycisk Napraw teraz, aby przekonwertować materiał do zapisu na głębokość (tj. Z-Write On).

Stary adres

Depth Buffer Before Fix MRTK Standard Shader

Po

Poprawiony bufor głębokości mrTK Standard Shader

Tekst siatki Pro

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

Poprawka buforu głębokości Pro siatki tekstu

Niestandardowy moduł cieniowania

W przypadku pisania niestandardowego modułu cieniującego dodaj flagę ZWrite na początku definicji Pass block (Przekaż blok), aby skonfigurować moduł cieniujący do zapisu w buforze głębokości.

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

Jeśli powyższe metody nie działają w danym scenariuszu (tj. przy użyciu interfejsu użytkownika aparatu Unity) istnieje możliwość zapisu innego obiektu w buforze głębokości. Powszechnym przykładem jest użycie tekstu interfejsu użytkownika aparatu Unity na przestawnych panelach w scenie. Dzięki tym, że panel jest nieprzezroczysty lub co najmniej do głębi zapisu, obie wartości & panelu zostaną ustabilizowane przez platformę, ponieważ ich wartości Z są tak blisko siebie.

WorldAnchors (HoloLens)

Oprócz zapewnienia, że są spełnione poprawne konfiguracje w celu zapewnienia stabilności wizualnej, 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 sieci WorldAnchors w projektach GameObject, które muszą pozostać w jednym miejscu. Element WorldAnchor jest składnikiem dodanym do obiektu GameObject, który przejmuje bezwzględną kontrolę nad transformacją tego obiektu.

Urządzenia, takie HoloLens, są stale skanowane i uczą się o środowisku. W związku z tym, HoloLens śledzi ruch & w przestrzeni, jego oszacowania zostaną zaktualizowane i dostosujemy układ współrzędnych aparatu Unity. Jeśli na przykład obiekt GameObject zostanie umieszczony 1 m od kamery na początku, gdy obiekt HoloLens śledzi środowisko, może zdać sobie sprawę, że fizyczny punkt, w którym znajduje się obiekt GameObject, znajduje się w rzeczywistości 1,1 m. Spowoduje to dryfowanie hologramów. Zastosowanie obiektu WorldAnchor do obiektu GameObject umożliwi kotwicy sterowanie przekształceniem obiektu, dzięki czemu obiekt pozostanie w prawidłowej lokalizacji fizycznej (tj. zaktualizuj do wersji 1,1 m (zamiast 1 m w środowisku uruchomieniowym). Aby utrwalić klasy WorldAnchors między sesjami aplikacji, deweloperzy mogą używać klasy WorldAnchorStore do zapisywania i ładowania klasy WorldAnchors.

Uwaga

Po dodaniu składnika WorldAnchor do elementu GameObject nie można zmodyfikować transformacji tego elementu GameObject (tj. transform.position = x). Deweloper musi usunąć 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ć alternatywnej metody ręcznej pracy z usługą Anchors, zapoznaj się z narzędziami do blokowania na świecie firmy Microsoft.

Zobacz też