W pakiecie Jetpack XR SDK środowiska przestrzenne to immersyjne otoczenie, które możesz dodać do aplikacji, aby dostosować tło wirtualnej sceny. Środowiska przestrzenne są widoczne tylko wtedy, gdy aplikacja jest w trybie pełnej przestrzeni.
Przegląd środowisk przestrzennych
SpatialEnvironment zarządza ustawieniami środowiska przestrzennego aplikacji. Jest to kompozycja samodzielnego obrazu tła i geometrii określonej w glTF. Można ustawić tylko jeden obraz skybox i jeden plik geometrii glTF naraz.
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 panorama miasta. Użytkownik nie może wejść w interakcję z tłem ani się do niego zbliżyć. Pakiet SDK Jetpack XR obsługuje sferyczne tła nieba w standardzie OpenEXR. Oprócz zapewnienia wciągającego tła dla aplikacji, skybox EXR zapewnia również 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 geometryczne 3D w standardzie glTF. Geometria otoczenia wczytana w ten sposób zostanie automatycznie dopasowana do rzeczywistego podłoża. Geometria otoczenia to świetny sposób na dodanie realizmu do otoczenia za pomocą elementów na pierwszym i drugim planie, które wtapiają się w skybox z efektem paralaksy.
W wytycznych dotyczących projektowania środowisk przestrzennych znajdziesz informacje o różnych typach zasobó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ć na jedną z tych 3 konfiguracji:
- Połączenie obrazu skybox i geometrii glTF.
- powierzchnia passthrough, na której wyświetlane jest środowisko z obrazem na żywo z kamer urządzenia skierowanych na zewnątrz; Przy pełnym kryciu ta powierzchnia trybu passthrough całkowicie zasłania skybox i geometrię.
- Konfiguracja mieszana, w której powierzchnia trybu passthrough nie jest w pełni nieprzezroczysta ani nie ma zerowej nieprzezroczystości. W tym przypadku powierzchnia trybu passthrough staje się półprzezroczysta i łączy się z tłem i geometrią za nią.
Funkcje przestrzenne w środowiskach przestrzennych
SpatialCapability: reprezentuje możliwości przestrzenne bieżącej sesji. Niektóre funkcje przestrzenne są istotne w środowiskach przestrzennych.SpatialCapability.PASSTHROUGH_CONTROL: wskazuje, czy aktywność może obecnie włączyć lub wyłączyć tryb passthrough.SpatialCapability.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, gdzie glTF jest wczytywany z pliku lokalnego. GltfModel może być używany jako część środowiska aplikacji przestrzennej.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
Tworzenie zasobu oświetlenia opartego na obrazie
Zasób oświetlenia opartego na obrazie można utworzyć jako ImageBasedLightingAsset, gdzie oświetlenie jest wczytywane z pliku lokalnego.
ImageBasedLightingAsset można używać z cmgen, aby utworzyć plik ZIP z IBL dla skyboxów. Więcej informacji znajdziesz w naszym przewodniku po optymalizacji zasobów środowiska.
val lightingForSkybox = ImageBasedLightingAsset.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
Ustawianie SpatialEnvironmentPreference dla aplikacji
Właściwość preferredSpatialEnvironment kontroluje preferowane środowisko przestrzenne aplikacji. Gdy ta właściwość jest używana do ustawiania 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 będzie funkcja SpatialCapability.APP_ENVIRONMENT, preferowane środowisko przestrzenne aplikacji zostanie automatycznie wyświetlone.
Ustawienie preferencji na null spowoduje wyłączenie preferowanego środowiska przestrzennego dla aplikacji, co oznacza, że zamiast niego będzie wyświetlane domyślne środowisko systemowe.
Jeśli podany obiekt 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 tła i nie będzie zawierać geometrii.
Aby otrzymywać powiadomienia o zmianach stanu SpatialEnvironment, użyj 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, gdy potrzebujesz większej kontroli nad środowiskiem, możesz uwzględnić testy SpatialCapability i wdrożyć addOnSpatialEnvironmentChangedListener, aby określić, kiedy chcesz ustawić preferencje dotyczące środowiska przestrzennego.
Ustawianie właściwości PassthroughOpacityPreference dla środowiska przestrzennego aplikacji
Jednym z komponentów immersyjnego tła wirtualnego aplikacji jest powierzchnia passthrough. W takim przypadku wyświetlane tło jest obrazem na żywo z zewnętrznych kamer urządzenia.
setPassthroughOpacityPreference służy do ustawiania preferowanej przezroczystości trybu passthrough w aplikacji. Ta metoda ustawia tylko preferencje i nie powoduje natychmiastowej zmiany, chyba że dostępna jest funkcja SpatialCapability.PASSTHROUGH_CONTROL. Gdy urządzenie przejdzie w stan, w którym można zmienić przezroczystość trybu passthrough, i dostępna będzie funkcja SpatialCapability.PASSTHROUGH_CONTROL, preferowana przezroczystość trybu passthrough dla aplikacji zostanie zastosowana automatycznie.
Wartości preferencji nieprzezroczystości trybu passthrough mieszczą się w zakresie od 0.0f (zerowa nieprzezroczystość, gdy powierzchnia trybu passthrough jest niewidoczna) do 1.0f (pełna nieprzezroczystość, gdy powierzchnia trybu passthrough ukrywa środowisko przestrzenne). Parametr setPassthroughOpacityPreference to zmiennoprzecinkowa wartość, która może być pusta. Ustawienie wartości null oznacza, że aplikacja nie ma preferencji dotyczących przezroczystości i zwróci kontrolę nad trybem passthrough systemowi.
Podstawowe użycie
Ten fragment kodu ustawia preferencję dotyczącą przezroczystości trybu passthrough. To ustawienie zostanie zapamiętane i będzie stosowane, 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ą trybu passthrough, możesz uwzględnić testy SpatialCapability i dodać detektor za pomocą addOnPassthroughOpacityChangedListener, aby określić, kiedy chcesz ustawić preferencje dotyczące przezroczystości trybu passthrough.
Optymalizacja komponentów
Podczas tworzenia zasobów do ustawiania SpatialEnvironment użytkowników upewnij się, że mają 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 nieprzezroczystości trybu passthrough
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity