Od wersji alpha04 bibliotek Jetpack XR wprowadziliśmy ważne zmiany w sposobie dostarczania zasobów środowiska przestrzennego, które mają zapewnić optymalną wydajność i jakość wizualną. Te zmiany mają wpływ na zgodność i wymagają zaktualizowania istniejących aplikacji, które konfigurują ś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) i główną teksturą skyboxa, którą widzą użytkownicy.
- Oddzielny plik ZIP zawierający informacje o oświetleniu opartym na obrazie (IBL) wygenerowane z obrazu EXR o wysokim zakresie dynamiki 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?
Zaktualizowana struktura komponentów zapewnia te korzyści:
- Mniejsze rozmiary plików: w porównaniu z poprzednimi metodami, takimi jak używanie jednego pliku HDR o wysokiej rozdzielczości jako skyboxa zarówno do wyświetlania obrazu, jak i do 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) umożliwia niezależną optymalizację każdego komponentu. Przekłada się to na mniejszą przepustowość odczytu pamięci tekstur i mniejsze zużycie energii.
- Zoptymalizowane oświetlenie: używanie zasobu skybox o niższej rozdzielczości, szczególnie w przypadku mapy oświetlenia, jest korzystne dla wydajności i nie ma znaczącego wpływu na wizualne wyniki oświetlenia obiektów.
Więcej informacji o dodawaniu przestrzennego środowiska w aplikacji znajdziesz w naszym przewodniku na temat dodawania środowisk do aplikacji.
Optymalizacja pliku glb

Plik GLB reprezentuje geometrię wokół użytkownika i zawiera wizualną teksturę skyboxa. W przypadku geometrii staraj się, aby rozmiar plików nie przekraczał 80 MB.
Aby to zrobić, możesz zwiększyć efektywność środowiska, zachowując przy tym wysoką jakość. Na przykład gęstość siatki powinna być największa w pobliżu użytkownika, a możesz ją zmniejszyć w przypadku siatek, które są od niego bardziej oddalone.
- Odległość widzenia: odległość widzenia w przypadku środowisk w Androidzie XR wynosi 200 m od punktu, w którym znajduje się użytkownik. Tekstura skyboxa powinna być zgodna z tym ograniczeniem. Zapewnia to optymalne wrażenia, ponieważ efekt paralaksy staje się niewidoczny z tej odległości.
Wysokość użytkownika: geografia może być różna, ale umieść użytkownika na wzniesieniu o wysokości około 1,5 m, 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 przekraczać 10 tys. wierzchołków.
Kompresja KTX: zoptymalizuj wydajność GPU pliku GLB, upewniając się, że używa on mapowania mipmap 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 wyodrębnij.
- Gotowe narzędzie znajduje się w katalogu /bin wyodrębnionego pliku .tgz.
Zasoby, które należy przygotować do wygenerowania pliku ZIP na potrzeby IBL:
- Plik EXR o niskiej rozdzielczości pasujący do tekstury skyboxa.
- Tekstura skyboxa powinna 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 oświetlenia opartego na obrazie. Użycie innych formatów, np. PNG, daje mniej precyzyjne oświetlenie.
- Obraz źródłowy (EXR) musi mieć format 2:1 i wymiary będące potęgą liczby 2. Użyj pliku EXR o wymiarach 1024 x 512 pikseli. Uwaga: rozdzielczość 1024 x 512 może się wydawać zbyt niska, ale jest korzystna dla wydajności. W przypadku IBL wyniki wizualne dla użytkownika są bardzo podobne do zasobów o znacznie wyższej rozdzielczości IBL.
- Plik PNG w kolorze czarnym
- Ten komponent musi mieć też proporcje 2:1. Użyj rozmiaru 100 x 50 pikseli.
- Jest to zoptymalizowana tekstura towarzysząca oświetleniu opartemu na obrazie. Użytkownicy nie będą tego widzieć, więc skupiamy się na optymalizacji komponentu pod kątem skuteczności.

Poniżej znajdziesz przykład użycia narzędzia cmgen do utworzenia pliku ZIP na potrzeby 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 ..