Stabilizacja hologramu — MRTK2

Wydajność

Aby podstawowa platforma rzeczywistości mieszanej i urządzenie przyniosł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 spotykają się ze 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 w dużym stopniu opiera się na śledzeniu pozy głowy przez urządzenie & platformy. Aparat Unity renderuje scenę z każdej ramki z kamery szacowanej i dostarczanej 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 dla 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 określonych platform docelowych.

Windows Mixed Reality

Platforma Windows Mixed Reality zawiera pewne materiały referencyjne do stabilizacji 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 za pomocą platformy. 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, znanego jako Late-Stage Reprojection.

Ponowne projekty na późnym etapie

Na końcu renderowania ramki platforma Windows Mixed Reality przyjmuje kolor & cele renderowania 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 pozy głowy. Pętla gry aplikacji wymaga czasu na wykonanie. Na przykład przy 60 KLATEK NA SEKUNDĘ oznacza to, że aplikacja przyjmuje ok. 16,667 ms w celu renderowania ramki. Mimo że może to wydawać się miniskuli ilością czasu, pozycja i orientacja głowy użytkownika zmienią się, co spowoduje zmianę nowych macierzy projekcji dla aparatu w renderowaniu. Ponowne odwzorowanie późnego etapu przekształca piksele na ostatnim obrazie, aby uwzględnić tę nową perspektywę.

LSR na piksel i stabilizację

W zależności od punktu końcowego urządzenia i wersji systemu operacyjnego uruchomionej 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 w pikselach

Reprojection na podstawie głębokości w pikselach obejmuje użycie buforu głębokości w celu zmodyfikowania danych wyjściowych obrazu na piksel, a tym samym ustabilizowania hologramów na różnych odległościach. Na przykład sfera 1m z dala może znajdować się przed filarem, który jest od 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ę. Reprojection per-pixel będzie 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, który ma być współużytkowany 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.SetFocusPointForFramedostarczonego przez aparat Unity.

Format buforu głębokości

W przypadku kierowania urządzenia HoloLens do programowania zdecydowanie zaleca się wykorzystanie 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 mniej precyzji. 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

Jeśli używasz formatu głębokości 16-bitowej, wymagany bufor wzornika nie będzie działać, ponieważ aparat Unity nie tworzy bufora wzornika w tym ustawieniu. Wybranie 24-bitowego formatu głębokości zazwyczaj spowoduje utworzenie 8-bitowego buforu wzornika, jeśli ma to zastosowanie na platformie grafiki punktu końcowego.

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

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

  1. W obszarze Edytowanie>ustawień programu Project Settings>Player>XR Zestawy>>SDK rzeczywistości wirtualnej umożliwiają 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 środowisku Unity będą zwykle automatycznie zapisywać w głębi systemu. Jednak przezroczyste obiekty tekstowe & zazwyczaj nie będą domyślnie zapisywać w głębi. Jeśli korzystasz ze standardowego cieniowania mrTK lub narzędzia Text Mesh Pro, 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 obszarze Ustawienia edytora w profilu konfiguracji zestawu narzędzi MRTK.

Przezroczysty cieńszy standard MRTK

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

Stary adres

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

Po

Bufor głębokości stały cieniowania standardowego 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 w górnej części definicji bloku przekazywania , 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), możliwe jest zapisanie 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 nieprzezroczystych lub przynajmniej zapisanych w głębi, obaj tekst & 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 zapewnienie, że hologramy pozostaną stabilne w odpowiednich lokalizacjach fizycznych. Aby poinformować platformę o ważnych lokalizacjach w przestrzeni fizycznej, deweloperzy mogą korzystać z obiektów WorldAnchors na obiektach GameObject, 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 ruch & pozycji w przestrzeni, jego oszacowania zostaną zaktualizowane i układ współrzędnych aparatu Unity dostosowany. Jeśli na przykład obiekt GameObject znajduje się 1 m od kamery 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 w taki sposób, aby obiekt pozostał w prawidłowej lokalizacji fizycznej (tj. aktualizacja do 1,1 m zamiast 1 mln w czasie wykonywania). Aby utrwalać worldanchors w sesjach aplikacji, deweloperzy mogą zastosować 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). 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ż