W pakiecie Jetpack XR SDK środowiska przestrzenne to wciągające otoczenie, które możesz dodać do aplikacji, aby dostosować tło sceny wirtualnej. Środowiska przestrzenne są widoczne tylko wtedy, gdy aplikacja jest w trybie pełnej przestrzeni.
Omówienie środowisk przestrzennych
SpatialEnvironment
służy do zarządzania preferencjami środowiska przestrzennego aplikacji. Jest to kompozycja samodzielnego obrazu skybox i geometrii określonej w formacie glTF. Jednocześnie można ustawić tylko 1 obraz skybox i 1 plik geometrii glTF.
Skybox to obraz, który użytkownik widzi wokół siebie w scenie wirtualnej. Tworzy on iluzję odległego tła, takiego jak niebo, góry czy miasto. Użytkownik nie może wchodzić w interakcje z skyboxem ani się do niego zbliżać. Pakiet Jetpack XR SDK obsługuje sferyczne skyboxy w standardzie OpenEXR. Oprócz zapewnienia wciągającego tła dla aplikacji, skybox EXR zapewnia też oświetlenie oparte na obrazie (IBL) dla modeli 3D wczytywanych przez aplikację. Więcej informacji znajdziesz w przewodniku po pracy z modelami 3D.
Środowiska przestrzenne mogą też zawierać treści z geometrią 3D w standardzie glTF. Geometria środowiska wczytana w ten sposób zostanie automatycznie dopasowana do podłogi w rzeczywistym świecie. Geometria otoczenia to świetny sposób na dodanie realizmu do otoczenia za pomocą elementów pierwszego i środkowego planu, które wtapiają się w skybox z efektem paralaksy.
W wytycznych dotyczących projektowania środowisk przestrzennych znajdziesz informacje o różnych typach komponentów, których możesz używać do tworzenia środowisk przestrzennych, oraz o tym, jak tworzyć bezpieczne i przyjemne środowiska przestrzenne.
Środowisko przestrzenne aplikacji możesz ustawić w jednej z tych 3 konfiguracji:
- Połączenie obrazu skybox i geometrii glTF.
- Powierzchnia passthrough, na której wyświetlane jest środowisko, to obraz na żywo z kamer zewnętrznych urządzenia. Przy pełnej nieprzezroczystości ta powierzchnia passthrough całkowicie zasłania skybox i geometrię.
- Konfiguracja mieszana, w której powierzchnia przekazywania nie jest w pełni nieprzezroczysta ani całkowicie przezroczysta. W tym przypadku powierzchnia passthrough staje się półprzezroczysta i łączy się z tłem nieba i geometrią za nią.
Funkcje przestrzenne w środowiskach przestrzennych
SpatialCapabilities
: reprezentuje możliwości przestrzenne bieżącej sesji. Niektóre funkcje przestrzenne są istotne w przypadku środowisk przestrzennych.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: wskazuje, czy w danym momencie aktywność może włączyć lub wyłączyć przekazywanie.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: wskazuje, czy aktywność może obecnie ustawić własne środowisko przestrzenne.
Importowanie i wczytywanie zasobów środowiska przestrzennego
Zasoby glTF i EXR dla środowisk przestrzennych są ładowane asynchronicznie za pomocą klasy Session
.
Tworzenie zasobu glTF
Zasób glTF można utworzyć jako GltfModel
, w którym glTF jest wczytywany z pliku lokalnego. GltfModel
może być używany w środowisku aplikacji przestrzennej.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
Tworzenie zasobu obrazu EXR
Zasób obrazu EXR można utworzyć jako ExrImage
, w którym EXR jest wczytywany z pliku lokalnego. Za pomocą ExrImage
i cmgen
możesz utworzyć plik ZIP z IBL dla skyboxów. Więcej informacji znajdziesz w naszym przewodniku po optymalizacji zasobów środowiska.
val lightingForSkybox = ExrImage.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
Ustaw SpatialEnvironmentPreference
dla aplikacji
Właściwość preferredSpatialEnvironment
określa preferowane środowisko przestrzenne aplikacji. Gdy ta właściwość jest używana do ustawienia preferencji, nie powoduje natychmiastowej zmiany, chyba że isPreferredSpatialEnvironmentActive
ma już wartość true
. Gdy urządzenie przejdzie w stan, w którym można zmienić tło XR i dostępna jest funkcja SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT
, automatycznie wyświetli się preferowane środowisko przestrzenne dla aplikacji.
Ustawienie preferencji na null
spowoduje wyłączenie preferowanego środowiska przestrzennego w przypadku aplikacji, co oznacza, że zamiast niego będzie wyświetlane domyślne środowisko systemowe.
Jeśli podany element SpatialEnvironmentPreference
nie ma wartości null, ale wszystkie jego właściwości mają wartość null, środowisko przestrzenne będzie składać się z czarnego skyboxa i nie będzie zawierać geometrii.
Aby otrzymywać powiadomienia o zmianach stanu SpatialEnvironment
, użyj funkcji addOnSpatialEnvironmentChangedListener
.
Podstawowe użycie
Ten fragment kodu tworzy geometrię środowiska i zasoby skybox, a następnie ustawia preferencje środowiska przestrzennego. To ustawienie zostanie zapamiętane i zastosowane, gdy aplikacja będzie mogła ustawić własne środowisko.
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry) session.scene.spatialEnvironment.preferredSpatialEnvironment = spatialEnvironmentPreference if (session.scene.spatialEnvironment.isPreferredSpatialEnvironmentActive) { // The environment was successfully updated and is now visible, and any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the SPATIAL_CAPABILITY_APP_ENVIRONMENT capability. // Then, any listeners specified using addOnSpatialEnvironmentChangedListener // will be notified. }
Zaawansowane użycie
W bardziej zaawansowanych przypadkach użycia, gdy potrzebujesz większej kontroli nad środowiskiem, możesz włączyć sprawdzanie SpatialCapabilities
i wdrożyć addOnSpatialEnvironmentChangedListener
, aby określić, kiedy chcesz ustawić preferencje dotyczące środowiska przestrzennego.
Ustawianie wartości PassthroughOpacityPreference dla środowiska przestrzennego aplikacji
Jednym z komponentów wirtualnego tła aplikacji jest powierzchnia passthrough. W tym przypadku tło to obraz na żywo z zewnętrznych kamer urządzenia.
setPassthroughOpacityPreference
służy do ustawiania preferowanej przezroczystości aplikacji. Ta metoda ustawia tylko preferencje i nie powoduje natychmiastowej zmiany, chyba że dostępna jest funkcja SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
. Gdy urządzenie przejdzie w stan, w którym można zmienić przezroczystość trybu podglądu, a funkcja SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
będzie dostępna, preferowana przezroczystość trybu podglądu dla aplikacji zostanie zastosowana automatycznie.
Wartości preferencji przezroczystości passthrough mieszczą się w zakresie od 0.0f
(zerowa przezroczystość, gdy powierzchnia passthrough jest niewidoczna) do 1.0f
(pełna przezroczystość, gdy powierzchnia passthrough zasłania środowisko przestrzenne). Parametr setPassthroughOpacityPreference
to liczba zmiennoprzecinkowa, która może mieć wartość null. Ustawienie wartości na null oznacza, że aplikacja nie ma preferencji dotyczących przezroczystości, i przekazuje kontrolę nad przezroczystością do systemu.
Podstawowe użycie
Ten fragment kodu ustawia preferencję przezroczystości. To ustawienie zostanie zapamiętane i zastosowane, gdy aplikacja będzie mogła ustawić przezroczystość trybu passthrough.
session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) { // The passthrough opacity request succeeded and should be visible now, and any listeners // specified using addOnPassthroughOpacityChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the // SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability. // Then, any listeners specified using addOnPassthroughOpacityChangedListener // will be notified. }
Zaawansowane użycie
W bardziej zaawansowanych przypadkach użycia, gdy potrzebujesz większej kontroli nad przezroczystością przekazywania, możesz uwzględnić sprawdzanie SpatialCapabilities
i dodać odbiornik za pomocą addOnPassthroughOpacityChangedListener
, aby określić, kiedy chcesz ustawić preferencję przezroczystości przekazywania.
Optymalizacja komponentów
Podczas tworzenia komponentów do ustawiania SpatialEnvironment
użytkowników zadbaj o to, aby miały one wysoką rozdzielczość, a jednocześnie rozsądny rozmiar pliku. Więcej informacji znajdziesz w naszych wskazówkach dotyczących optymalizacji komponentów środowiska.
Określanie bieżącej przezroczystości trybu passthrough
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity