Optymalizowanie komponentów środowiska

Począwszy od wersji alpha04 bibliotek Jetpack XR wprowadzono ważne zmiany dotyczące sposobu udostępniania zasobów środowiska przestrzennego, które mają na celu zapewnienie optymalnej wydajności i jakości wizualnej. Te zmiany mają wpływ na zgodność i wymagają zaktualizowania dotychczasowych aplikacji, które ustawiają środowisko przestrzenne.

Aby zapewnić środowisko przestrzenne, potrzebujesz 2 głównych komponentów:

  • Plik .glb lub .gltf zawierający geometrię środowiska (np. płaszczyznę gruntu i podobne obiekty) oraz główną teksturę nieba, którą widzą użytkownicy.
  • oddzielny plik ZIP zawierający informacje o oświetleniu opartym na obrazie (IBL), wygenerowane z obrazu EXR o szerokim zakresie dynamicznym za pomocą narzędzia cmgen; Plik ZIP służy do obliczeń oświetlenia, takich jak odbicia na obiektach, a nie do samej tekstury nieba.

Dlaczego to podejście?

Ta zaktualizowana struktura komponentów daje następujące korzyści:

  • Mniejsze rozmiary plików: w porównaniu z poprzednimi metodami, takimi jak używanie pojedynczego pliku nieba w wysokiej rozdzielczości HDR do wyświetlania informacji o oświetleniu i wizualizacji, to podejście zmniejsza rozmiary plików.
  • Zwiększona wydajność: oddzielenie wizualnej tekstury nieba (wbudowanej w plik glb) od danych IBL (w pliku ZIP) umożliwia optymalizację każdego komponentu z osobna. Przekłada się to na mniejszą przepustowość pamięci tekstur i mniejsze zużycie energii.
  • Zoptymalizowane oświetlenie: korzystanie z zasosobu nieba w niższej rozdzielczości, który służy do mapy oświetlenia, korzystnie wpływa na wydajność, nie wpływając znacząco na jakość oświetlenia obiektów.

Więcej informacji o dodawaniu środowiska przestrzennego w aplikacji znajdziesz w poradniku Dodawanie środowisk do aplikacji.

Optymalizacja pliku glb

Plik glb reprezentuje geometrię wokół użytkownika i zawiera wizualną teksturę nieba. W przypadku geometrii staraj się utrzymywać rozmiary plików na poziomie 80 MB lub mniejszym.

Aby to osiągnąć, możesz zwiększyć wydajność środowiska przy jednoczesnym zachowaniu wysokiej jakości. Na przykład gęstość siatki powinna być największa w pobliżu użytkownika, a gęstość siatek, które są dalej od użytkownika, możesz zmniejszyć.

  • Odległość widoczności: odległość widoczności środowisk w Android XR wynosi 200 m od punktu użytkownika, a tekstura nieba powinna być zgodna z tą wartością. Zapewnia to optymalne wrażenia, ponieważ paralaksa staje się niewidoczna w takiej odległości.
  • Wzrost użytkownika: geografia może się różnić, ale umieść użytkownika na wzniesieniu o wysokości około 1,5 metra, aby uniknąć przycięcia większych elementów interfejsu w aplikacjach.

  • Liczba wielokątów: zwróć uwagę na liczbę wielokątów w plikach glb, ponieważ duża liczba wielokątów może spowodować niepotrzebne zużycie energii. Każdy fragment geometrii nie może zawierać więcej niż 10 tys. wierzchołków.

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

Co jest potrzebne do optymalizacji IBL

Pobierz narzędzie wiersza poleceń cmgen:

  • Najnowszą wersję znajdziesz w repozytorium Filament.
  • Znajdź plik .tgz zawierający gotową wersję narzędzia cmgen dla Twojej platformy i go rozpakuj.
  • Wstępnie utworzone narzędzie znajduje się w katalogu /bin wyodrębnionego pliku .tgz.

Zasoby, które należy przygotować, aby wygenerować plik .zip dla IBL:

  • Plik EXR o niskiej rozdzielczości, który pasuje do tekstury nieba.
    • Tekstura nieba powinna być plikiem EXR. Chociaż cmgen obsługuje inne formaty, zalecamy używanie plików EXR, ponieważ zawierają one informacje o dużym zakresie dynamiki, które są niezbędne do zapewnienia wysokiej jakości IBL. Korzystanie z innych formatów, takich jak PNG, powoduje mniej precyzyjne oświetlenie.
    • Obraz źródłowy (EXR) musi mieć współczynnik proporcji 2:1 i wymiary będące wielokrotnością 2. Użyj pliku EXR o wymiarach 1024 × 512 pikseli. Uwaga: może się wydawać, że rozdzielczość 1024 x 512 jest zbyt niska, ale ma to pozytywny wpływ na wydajność. W przypadku IBL wizualne wyniki dla użytkownika są bardzo podobne do zasobów o znacznie wyższej rozdzielczości IBL.
  • czarny obraz w formacie png,
    • Ten zasób musi mieć też proporcje 2:1. Użyj rozmiaru 100 x 50 pikseli.
    • Jest to zoptymalizowana tekstura towarzysząca IBL. Użytkownicy nie będą tego widzieć, więc skupiamy się na optymalizacji komponentu pod kątem skuteczności.

Poniżej przedstawiamy przykład użycia narzędzia cmgen do utworzenia pliku ZIP dla IBL. W tym przykładzie używamy plików wejściowych o nazwach my_360_skybox_1024_x_512.exr i black_skybox.png oraz tworzymy 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 ..