Dodawanie środowisk przestrzennych do aplikacji

Obsługiwane urządzenia z XR
Te wskazówki pomogą Ci tworzyć aplikacje na te typy urządzeń z XR.
Gogle XR
Przewodowe okulary XR

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

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

Zobacz też