3D 모델로 작업할 때 Jetpack XR SDK는 glTF 2.0 개방형 표준을 지원합니다. Android XR이 Jetpack XR SDK로 빌드된 앱을 렌더링할 때 3D 모델은 지원되는 확장 프로그램과 함께 glTF 2.0 표준에 지정된 물리 기반 렌더링(PBR) 기법으로 렌더링됩니다. Autodesk Maya, Maxon ZBrush, Blender, Spline과 같은 대부분의 디지털 콘텐츠 제작 (dcc) 도구는 3D 모델을 glTF 형식 (.gltf 또는 .glb 파일)으로 내보낼 수 있습니다.
사용자 또는 앱에서 SpatialEnvironment 스카이박스를 지정한 경우 3D 모델은 환경 스카이박스에서 제공하는 조명 정보로 조명이 켜집니다. 반사 소재와 스펙큘러 하이라이트도 환경 스카이박스를 반영합니다. 패스스루가 사용 설정된 경우 조명, 반사, 반짝이는 하이라이트는 단일 방향 조명이 있는 밝은 방을 기반으로 합니다.
지원되는 재질을 간략하게 살펴보려면 Khronos 사이트의 glTF PBR 속성을 참고하세요.
Jetpack XR SDK로 빌드된 앱이 3D 모델을 로드하는 방법은 두 가지가 있습니다.
ActivitySpace에 3D 모델 배치에 설명된 대로ActivitySpace에 로드합니다.- 인텐트를 통해 내장 Scene Viewer 사용
ActivitySpace에 3D 모델 배치
glTF 파일이 있으면 다음 단계는 Android 스튜디오의 애셋 디렉터리에 파일을 추가하는 것입니다. models 디렉터리를 만들어 애셋 유형을 더 잘 정리하는 것이 좋습니다.

glTF 모델을 로드하려면 GltfModel.create()를 호출합니다.
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
이 시점에서 모델은 메모리에 로드되지만 아직 렌더링되지는 않습니다. 로드할 3D 모델이 많거나 모델이 큰 경우 미리 비동기식으로 로드하는 것이 좋습니다. 이렇게 하면 사용자가 모델이 메모리에 로드될 때까지 기다리지 않아도 됩니다.
ActivitySpace에 glTF를 추가해야 합니다. GltfModelEntity.create을 호출하여 항목을 만들고 ActivitySpace에 배치합니다. 앱이 공간 기능을 허용하는 상태인지 확인하는 것이 좋습니다.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
이제 앱을 실행하면 로드된 3D 모델이 표시됩니다.

SpatialGltfModel을 사용하여 3D 객체 추가
Android XR은 3D 모델에 glTF 형식을 지원하며, 일반적으로 .glb 파일로 저장됩니다. 이러한 객체를 레이아웃에 추가하려면 SpatialGltfModel 컴포저블을 사용하세요. 이 API는 애셋을 로드하고 상태를 관리하는 프로세스를 간소화합니다.
모델을 표시하려면 먼저 rememberSpatialGltfModelState를 사용하여 소스와 상태를 정의합니다. 앱의 assets 폴더, URI 또는 raw data에서 모델을 로드할 수 있습니다.
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
상태가 정의되면 SpatialGltfModel 컴포저블을 사용하여 하위 공간 내에 렌더링합니다.
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
Compose SceneCoreEntity에 3D 모델 배치
SceneCoreEntity를 사용하여 3D 모델을 배치하려면 먼저 GltfModel.create()를 사용하여 glTF를 메모리에 로드해야 합니다. 그런 다음 3D 모델을 SceneCoreEntity에 배치하여 SceneCore 구성요소를 XR 레이아웃용 Compose와 연결할 수 있습니다. SceneCoreEntity를 사용하여 레이아웃에 3D 객체 배치를 참고하세요.
Scene Viewer를 사용하여 3D 모델 로드
기본 상호작용 기능으로 3D 모델을 로드하는 가장 간단한 방법을 찾고 있다면 모바일에서와 같이 Scene Viewer를 사용하는 것이 좋습니다. Android XR과 모바일의 Scene Viewer 간 주요 차이점은 Scene Viewer가 glTF 파일을 가리키는 파일 URI 매개변수만 지원하고 다른 모든 매개변수는 무시된다는 점입니다.
Scene Viewer는 인텐트를 사용하여 호출되고 전체 공간 모드에서 실행되는 별도의 앱입니다. 따라서 이를 호출하면 앱이 더 이상 표시되지 않고 Scene Viewer에 포커스가 있습니다. 변경한 환경은 사용자의 시스템 환경설정으로 재설정됩니다.
다음은 Android XR의 Scene Viewer에서 glTF 파일을 보기 위해 Intent를 사용하는 예입니다.
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. }
Scene Viewer의 상호작용 옵션에 대한 자세한 내용은 3D 모델 디자인 문서를 참고하세요.
glTF 확장 프로그램
Jetpack XR SDK는 3D 모델의 기능을 확장하는 여러 gfTF 확장 프로그램을 지원합니다. 이러한 기능은 GltfModelEntity와 Scene Viewer를 통해 사용할 수 있습니다.
KHR_animation_pointerKHR_draco_mesh_compressionKHR_lights_punctualKHR_materials_clearcoatKHR_materials_sheenKHR_materials_unlitKHR_materials_variantsKHR_mesh_quantizationKHR_texture_basisuKHR_texture_transformEXT_texture_webp