Optymalizowanie komponentów środowiska

Obsługiwane urządzenia z XR
Te wskazówki pomogą Ci tworzyć aplikacje na te typy urządzeń z XR.
Gogle XR
Przewodowe okulary XR

Od wersji alpha04 bibliotek Jetpack XR wprowadzamy ważne zmiany w sposobie udostępniania komponentów środowiska przestrzennego, aby zapewnić optymalną wydajność i jakość obrazu. Te zmiany wpływają na zgodność i wymagają zaktualizowania istniejących aplikacji, które ustawiają środowiska przestrzenne.

Aby udostępniać środowiska przestrzenne, potrzebujesz 2 głównych komponentów:

  • plik .glb lub .gltf z geometrią środowiska (np. płaszczyzna podłoża, pobliskie obiekty) oraz główną teksturą skyboxa, którą widzą użytkownicy;
  • osobny plik ZIP zawierający informacje o oświetleniu opartym na obrazie (IBL) wygenerowane z obrazu EXR o wysokim zakresie dynamicznym za pomocą narzędzia cmgen. Plik ZIP jest używany do obliczeń oświetlenia, np. odbić na obiektach, a nie do samej tekstury skyboxa.

Dlaczego takie podejście?

Ta zaktualizowana struktura komponentów ma następujące zalety:

  • Mniejsze rozmiary plików: w porównaniu z poprzednimi metodami, takimi jak używanie jednego pliku HDR skyboxa o wysokiej rozdzielczości zarówno do wyświetlania obrazu, jak i informacji o oświetleniu, to podejście zmniejsza rozmiary plików.
  • Lepsza wydajność: oddzielenie tekstury skyboxa (wbudowanej w plik glb) od danych IBL (w pliku ZIP) pozwala na niezależną optymalizację każdego komponentu. Dzięki temu zmniejsza się przepustowość odczytu pamięci tekstur i zużycie energii.
  • Zoptymalizowane oświetlenie: używanie zasobu skyboxa o niższej rozdzielczości specjalnie na potrzeby mapy oświetlenia jest korzystne dla wydajności bez znaczącego wpływu na wizualne efekty oświetlenia obiektów.

Więcej informacji o dodawaniu środowiska przestrzennego w aplikacji znajdziesz w przewodniku na temat dodawania środowisk do aplikacji.

Optymalizacja pliku glb

Plik glb reprezentuje geometrię wokół użytkownika i zawiera teksturę wizualną skyboxa. W przypadku geometrii należy dążyć do tego, aby rozmiary plików nie przekraczały 80 MB.

Aby to osiągnąć, możesz na wiele sposobów zwiększyć wydajność środowiska przy zachowaniu wysokiej jakości. Na przykład gęstość siatki powinna być największa w pobliżu użytkownika, a można ją zmniejszać w przypadku siatek, które są od niego bardziej oddalone.

  • Odległość widzenia: odległość widzenia w środowiskach w Androidzie XR wynosi 200 m od punktu użytkownika, a tekstura skyboxa powinna być zgodna z tym ograniczeniem. Zapewnia to optymalne wrażenia, ponieważ paralaksa staje się niewidoczna w tej odległości.
  • Wysokość użytkownika: geografia może się różnić, ale umieść użytkownika na wzniesieniu o wysokości około 1,5 metra, aby uniknąć przycinania większych elementów interfejsu w aplikacjach.

  • Liczba wielokątów: zwracaj uwagę na liczbę wielokątów w plikach glb, ponieważ duża liczba wielokątów może prowadzić do niepotrzebnego zużycia energii. Każdy fragment geometrii nie powinien zawierać więcej niż 10 000 wierzchołków.

  • Kompresja KTX: zoptymalizuj wydajność GPU pliku glb, upewniając się, że używa on mipmap i tekstur ktx2.

Co będzie potrzebne do optymalizacji IBL

Pobierz narzędzie wiersza poleceń cmgen:

  • Najnowszą wersję znajdziesz w repozytorium Filament.
  • Znajdź plik .tgz zawierający wstępnie skompilowaną wersję cmgen na swoją platformę i rozpakuj go.
  • Wstępnie skompilowane narzędzie znajduje się w katalogu /bin rozpakowanego pliku .tgz.

Komponenty, które należy przygotować do wygenerowania pliku ZIP na potrzeby IBL:

  • EXR o niskiej rozdzielczości, który pasuje do tekstury skyboxa
    • Dane wejściowe tekstury skyboxa powinny być plikiem EXR. Chociaż cmgen obsługuje inne formaty, zalecamy używanie plików EXR, ponieważ zawierają one informacje o wysokim zakresie dynamicznym, które są niezbędne do zapewnienia wysokiej jakości IBL. Używanie innych formatów, takich jak PNG, powoduje mniej precyzyjne oświetlenie.
    • Obraz źródłowy (EXR) musi mieć proporcje 2:1 i wymiary będące potęgą 2. Użyj pliku EXR o wymiarach 1024 × 512 pikseli. Uwaga: może się wydawać, że rozdzielczość 1024 × 512 jest zbyt niska, ale jest to korzystne dla wydajności. W przypadku IBL efekty wizualne dla użytkownika są bardzo podobne do efektów w przypadku komponentów IBL o znacznie wyższej rozdzielczości.
  • Czarny plik PNG
    • Ten komponent musi mieć też proporcje 2:1. Użyj rozmiaru 100 × 50 pikseli.
    • Służy on jako zoptymalizowana tekstura towarzysząca IBL. Użytkownicy nie będą na niego patrzeć, dlatego skupiamy się na optymalizacji pod kątem wydajności.

Poniżej znajdziesz przykład użycia cmgen do utworzenia pliku ZIP na potrzeby IBL. W przykładzie używamy plików wejściowych o nazwach my_360_skybox_1024_x_512.exr i black_skybox.png, aby utworzyć plik ZIP o nazwie my_ibl.zip.

# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png

# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr

# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512

# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old

# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox

# Change into the child directory.
cd ./skybox_ibl

# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*

# Return to the directory you started in.
cd ..