W 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łnego ekranu.
Przegląd środowisk przestrzennych
A SpatialEnvironment służy do zarządzania preferencjami środowiska przestrzennego aplikacji. Jest to połączenie samodzielnego obrazu skyboxa i geometrii określonej w glTF. Jednocześnie można ustawić tylko 1 obraz skyboxa i 1 plik geometrii glTF.
Skybox to obraz, który użytkownik widzi wokół siebie w scenie wirtualnej, co stwarza iluzję odległego tła, takiego jak niebo, góry lub panorama miasta. Użytkownik nie może wchodzić w interakcje ze skyboxem ani się do niego zbliżać. 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 dotyczącym pracy z modelami 3D.
Środowiska przestrzenne mogą też zawierać treści geometrii 3D w standardzie glTF. Geometria środowiska wczytana w ten sposób zostanie automatycznie wyrównana do podłogi w świecie rzeczywistym. Geometria środowiska to świetny sposób na dodanie realizmu do otoczenia za pomocą elementów pierwszego i drugiego planu, które wtapiają się w skybox z efektem paralaksy.
W wytycznych dotyczących projektowania środowisk przestrzennych dowiesz się więcej 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 skyboxa i geometrii glTF.
- Powierzchnia passthrough, na której wyświetlane jest otoczenie to obraz na żywo z kamer skierowanych na zewnątrz urządzenia. Przy pełnej nieprzezroczystości ta powierzchnia passthrough całkowicie zasłania skybox i geometrię.
- Konfiguracja mieszana, w której powierzchnia passthrough nie jest w pełni nieprzezroczysta ani przezroczysta. W takim przypadku powierzchnia passthrough staje się półprzezroczysta i miesza się z skyboxem i geometrią znajdującą się za nią.
Możliwości przestrzenne w środowiskach przestrzennych
SpatialCapabilities: reprezentuje możliwości przestrzenne bieżącej sesji. Niektóre możliwości przestrzenne są istotne w przypadku środowisk przestrzennych.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL: wskazuje, czy aktywność może włączyć lub wyłączyć passthrough w danym momencie.SPATIAL_CAPABILITY_APP_ENVIRONMENT: wskazuje, czy aktywność może ustawić własne środowisko przestrzenne w danym momencie.
Importowanie i wczytywanie zasobów środowiska przestrzennego
Zasoby glTF i EXR dla środowisk przestrzennych są wczytywane 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 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, w którym oświetlenie jest wczytywane z pliku lokalnego.
ImageBasedLightingAsset można używać z cmgen do tworzenia pliku 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 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, a możliwość SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENTjest dostępna, preferowane środowisko przestrzenne aplikacji zostanie automatycznie wyświetlone.
Ustawienie preferencji na null spowoduje wyłączenie preferowanego środowiska przestrzennego aplikacji, co oznacza, że zamiast niego będzie wyświetlane domyślne środowisko systemowe.
Jeśli podana wartość SpatialEnvironmentPreference nie jest null, ale wszystkie jej
właściwości są null, środowisko przestrzenne będzie składać się z czarnego skyboxa
i bez geometrii.
Aby otrzymywać powiadomienia o zmianach stanu SpatialEnvironment, użyj
addOnSpatialEnvironmentChangedListener.
Podstawowe użycie
Ten fragment kodu tworzy geometrię środowiska i zasoby skyboxa, a następnie ustawia preferencje środowiska przestrzennego. Ta preferencja zostanie zapamiętana i zastosowana, 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, w których potrzebujesz większej kontroli nad środowiskiem,
możesz uwzględnić sprawdzanie SpatialCapabilities i zaimplementować
addOnSpatialEnvironmentChangedListener, aby określić, kiedy chcesz ustawić
preferencje środowiska przestrzennego.
Ustawianie PassthroughOpacityPreference dla środowiska przestrzennego aplikacji
Jednym z komponentów wciągającego wirtualnego tła aplikacji jest powierzchnia passthrough. W takim przypadku wyświetlane tło to obraz na żywo z kamer skierowanych na zewnątrz urządzenia.
setPassthroughOpacityPreference służy do ustawiania preferowanej nieprzezroczystości passthrough
dla aplikacji. Ta metoda ustawia tylko preferencje i nie powoduje natychmiastowej zmiany, chyba że dostępna jest możliwość
SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL. Gdy urządzenie przejdzie w stan, w którym można zmienić nieprzezroczystość passthrough, a możliwość SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL jest dostępna, automatycznie zastosuje się preferowana nieprzezroczystość passthrough dla aplikacji.
Wartości preferencji nieprzezroczystości passthrough mieszczą się w zakresie od 0.0f (zero nieprzezroczystości, gdy powierzchnia passthrough jest niewidoczna) do 1.0f (pełna nieprzezroczystość, gdy powierzchnia passthrough ukrywa środowisko przestrzenne). Parametr setPassthroughOpacityPreference to wartość zmiennoprzecinkowa, która może mieć wartość null. Ustawienie wartości null oznacza, że aplikacja nie ma preferencji nieprzezroczystości passthrough i przywróci kontrolę passthrough do systemu.
Podstawowe użycie
Ten fragment kodu ustawia preferencje nieprzezroczystości passthrough. Ta preferencja zostanie zapamiętana i zastosowana, gdy aplikacja będzie mogła ustawić nieprzezroczystość 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, w których potrzebujesz większej kontroli nad nieprzezroczystością passthrough
, możesz uwzględnić SpatialCapabilities sprawdzanie i dodać detektor
za pomocą addOnPassthroughOpacityChangedListener, aby określić, kiedy chcesz
ustawić preferencje nieprzezroczystości passthrough.
Optymalizacja komponentów
Podczas tworzenia komponentó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 wytycznych dotyczących optymalizacji komponentów środowiska.
Określanie bieżącej nieprzezroczystości passthrough
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity