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

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 모델을 배치하려면 먼저
glTF를 GltfModel.create()를 사용하여 메모리에 로드해야 합니다. 그런 다음 3D
모델을 SceneCoreEntity에 배치하여 SceneCore 구성요소를
XR 레이아웃용 Compose와 연결할 수 있습니다.
SceneCoreEntity를 사용하여 레이아웃에 3D 객체 배치를 참고하세요.
Jetpack Scenecore를 사용하여 3D 모델 배치
glTF 모델을 로드하려면 GltfModel.create()를 호출합니다.
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
이때 모델은 메모리에 로드되지만 아직 렌더링되지는 않습니다. 로드할 3D 모델이 많거나 모델이 큰 경우 미리 비동기식으로 로드하는 것이 좋습니다. 이렇게 하면 사용자가 모델이 메모리에 로드될 때까지 기다릴 필요가 없습니다.
glTF를 ActivitySpace에 추가합니다.
GltfModelEntity.create을(를) 호출하여 항목을 만들고
ActivitySpace에 배치합니다. 공간 기능을 허용하는 상태에 앱이 있는지 확인하는 것이
좋습니다.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
이제 앱을 실행하면 로드된 3D 모델이 표시됩니다.

Scene Viewer를 사용하여 3D 모델 로드
기본 상호작용 기능으로 3D 모델을 로드하는 가장 간단한 방법을 찾고 있다면 모바일에서와 같이 Scene Viewer를 사용하는 것이 좋습니다. Android XR과 모바일의 Scene Viewer 간의 주요 차이점은 Scene Viewer가 glTF 파일을 가리키는 파일 URI 매개변수만 지원하고 다른 모든 매개변수는 무시한다는 것입니다.
Scene Viewer는 인텐트를 사용하여 호출되고 전체 공간 모드에서 실행되는 별도의 앱입니다. 따라서 호출하면 앱이 더 이상 표시되지 않고 Scene Viewer에 포커스가 맞춰집니다. 변경했을 수 있는 모든 환경이 사용자의 시스템 환경설정으로 재설정됩니다.
다음은 Intent를 사용하여 Android XR의 Scene Viewer
에서 glTF 파일을 보는 예입니다.
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