Dodawanie modeli 3D do aplikacji

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

Podczas pracy z modelami 3D pakiet Jetpack XR SDK obsługuje otwarty standard glTF 2.0. Gdy Android XR renderuje aplikacje utworzone za pomocą pakietu Jetpack XR SDK, modele 3D są renderowane przy użyciu technik renderowania opartego na fizyce(PBR) określonych w standardzie glTF 2.0 (wraz z obsługiwanymi rozszerzeniami). Większość narzędzi do tworzenia treści cyfrowych (DCC), takich jak Autodesk Maya, Maxon ZBrush, Blender i Spline, może eksportować modele 3D do formatu glTF (pliki .gltf lub .glb).

Jeśli użytkownik lub Twoja aplikacja określi SpatialEnvironment skybox, modele 3D będą oświetlane na podstawie informacji o oświetleniu dostarczonych przez skybox środowiska. Materiały odblaskowe i odblaski będą również odbijać skybox otoczenia. Jeśli funkcja passthrough jest włączona, oświetlenie, odbicia i odblaski będą oparte na jasnym pomieszczeniu z jednym kierunkowym źródłem światła.

Krótkie podsumowanie obsługiwanych materiałów znajdziesz w glTF PBR Properties na stronie Khronos.

Aplikacje utworzone za pomocą pakietu Jetpack XR SDK mogą wczytywać modele 3D na 2 główne sposoby.

Umieszczanie modelu 3D w przestrzeni aktywności

Gdy masz już plik glTF, następnym krokiem jest dodanie go do katalogu zasobów w Android Studio. Zalecamy utworzenie modelskatalogu, aby lepiej uporządkować typy komponentów.

Przykład dodawania komponentów do katalogu /models

Aby wczytać model glTF, wywołaj funkcję GltfModel.create().

val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))

Na tym etapie model jest wczytywany do pamięci, ale nie jest jeszcze renderowany. Jeśli masz do wczytania wiele modeli 3D lub model jest duży, warto wczytać je asynchronicznie z wyprzedzeniem. Dzięki temu użytkownicy nie muszą czekać na załadowanie modeli do pamięci.

Musimy dodać plik glTF do elementu ActivitySpace. Wywołaj GltfModelEntity.create, aby utworzyć element i umieścić go w ActivitySpace. Zalecamy sprawdzenie, czy aplikacja jest w stanie, który umożliwia korzystanie z funkcji przestrzennych.

if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

Po uruchomieniu aplikacji powinien być widoczny wczytany model 3D.

Przykład wczytanego modelu 3D

Dodawanie obiektu 3D za pomocą SpatialGltfModel

Android XR obsługuje format glTF dla modeli 3D, które są zwykle zapisywane jako pliki .glb. Aby dodać te obiekty do układu, użyj funkcji kompozycyjnej SpatialGltfModel. Ten interfejs API upraszcza proces wczytywania komponentów i zarządzania ich stanem.

Aby wyświetlić model, najpierw zdefiniuj jego źródło i stan za pomocą elementu rememberSpatialGltfModelState. Modele możesz wczytywać z folderu assets aplikacji, z URI lub z raw data.

val modelState = rememberSpatialGltfModelState(
    source = SpatialGltfModelSource.fromPath(
        Paths.get("models/model_name.glb")
    )
)

Po zdefiniowaniu stanu użyj komponentu SpatialGltfModel, aby go wyrenderować w przestrzeni podrzędnej.

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

Umieszczanie modelu 3D w komponencie Compose SceneCoreEntity

Aby umieścić model 3D za pomocą SceneCoreEntity, musisz najpierw wczytać glTF do pamięci za pomocą GltfModel.create(). Następnie możesz umieścić model 3D w SceneCoreEntity, aby połączyć komponenty SceneCore z układami Compose for XR. Zapoznaj się z artykułem Używanie elementu SceneCoreEntity do umieszczania obiektu 3D w układzie.

Wczytywanie modelu 3D za pomocą Scene Viewer

Jeśli szukasz najprostszego sposobu wczytywania modelu 3D z podstawowymi funkcjami interakcji, możesz użyć Scene Viewer tak jak na urządzeniu mobilnym. Kluczową różnicą między Scene Viewer na Androidzie XR a Scene Viewer na urządzeniach mobilnych jest to, że Scene Viewer obsługuje tylko parametr URI pliku wskazujący plik glTF, a wszystkie inne parametry są ignorowane.

Scene Viewer to osobna aplikacja, która jest wywoływana za pomocą intencji i działa w trybie pełnej przestrzeni. W rezultacie po wywołaniu tej funkcji aplikacja nie będzie już widoczna, a aplikacja Scene Viewer będzie aktywna. Wszystkie środowiska, które mogły zostać zmienione, zostaną przywrócone do ustawień systemowych użytkownika.

Oto przykład użycia Intent do wyświetlenia pliku glTF w Scene Viewer na Androidzie XR:

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
    Uri.parse("https://arvr.google.com/scene-viewer/1.2")
        .buildUpon()
        .appendQueryParameter("file", url)
        .build()
sceneViewerIntent.setData(intentUri)
try {
    startActivity(sceneViewerIntent)
} catch (e: ActivityNotFoundException) {
    // There is no activity that could handle the intent.
}

Więcej informacji o opcjach interaktywności w Scene Viewer znajdziesz w naszej dokumentacji dotyczącej projektowania modeli 3D.

rozszerzenia glTF,

Pakiet Jetpack XR SDK obsługuje kilka rozszerzeń glTF, które zwiększają możliwości modeli 3D. Te funkcje są dostępne zarówno w GltfModelEntity, jak i w Scene Viewer.