Ao trabalhar com modelos 3D, o SDK do Jetpack XR oferece suporte ao glTF
2.0 padrão aberto. Quando o Android XR renderiza apps criados com o
SDK do Jetpack XR, os modelos 3D são renderizados com técnicas de renderização baseada em física(PBR, na sigla em inglês) especificadas no padrão glTF 2.0
(junto com as extensões com suporte). A maioria das ferramentas de criação de conteúdo digital (DCC, na sigla em inglês)
, como Autodesk Maya, Maxon ZBrush,
Blender e Spline, pode exportar modelos 3D para
o formato glTF (.gltf ou .glb arquivos).
Se uma SpatialEnvironment skybox tiver sido especificada pelo usuário ou pelo seu
app, os modelos 3D serão iluminados com informações de iluminação fornecidas pela skybox do ambiente. Materiais reflexivos e destaques especulares também vão refletir a skybox do ambiente. Se a passagem tiver sido ativada, a iluminação, os reflexos e os destaques especulares serão baseados em um ambiente claro com uma única luz direcional.
Para uma visão geral rápida dos materiais com suporte, consulte as propriedades PBR do glTF no site da Khronos (link em inglês).
Há duas maneiras principais de carregar modelos 3D para apps criados com o SDK do Jetpack XR.
- Carregue-o no
ActivitySpace, conforme descrito em Colocar um modelo 3D noActivitySpace. - Use o Scene Viewer integrado por uma intent.
Colocar um modelo 3D no ActivitySpace
Depois de ter o arquivo glTF, a próxima etapa é adicioná-lo ao diretório de assets no Android Studio. Recomendamos criar um diretório models para organizar melhor os tipos de recursos.

Para carregar o modelo glTF, chame GltfModel.create().
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
Nesse momento, o modelo é carregado na memória, mas ainda não está sendo renderizado. Se você tiver muitos modelos 3D para carregar ou se o modelo for grande, é recomendável carregá-los de forma assíncrona com antecedência. Dessa forma, os usuários não precisam esperar que os modelos sejam carregados na memória.
Precisamos adicionar o glTF ao ActivitySpace. Chame
GltfModelEntity.create para criar uma entidade e colocá-la no
ActivitySpace. Como prática recomendada, você deve verificar se o app está em um estado
que permite recursos espaciais.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
Agora, o modelo 3D carregado vai aparecer quando você executar o app.

Adicionar um objeto 3D usando SpatialGltfModel
O Android XR oferece suporte ao formato glTF para modelos 3D, normalmente salvos como
.glb arquivos. Para adicionar esses objetos ao layout, use o
SpatialGltfModel elemento combinável. Essa API simplifica o processo de carregamento de recursos e gerenciamento do estado deles.
Para mostrar um modelo, primeiro defina a origem e o estado dele usando
rememberSpatialGltfModelState. É possível carregar
modelos da pasta assets do app, de um URI ou
raw data.
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
Depois que o estado for definido, use o elemento combinável SpatialGltfModel para renderizá-lo em um subespaço.
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
Colocar um modelo 3D em uma SceneCoreEntity do Compose
Para colocar um modelo 3D usando SceneCoreEntity, primeiro carregue
o glTF na memória usando GltfModel.create(). Em seguida, coloque um modelo 3D
em um SceneCoreEntity para conectar componentes do SceneCore com
layouts do Compose para XR. Consulte
Usar uma SceneCoreEntity para colocar um objeto 3D no layout.
Carregar um modelo 3D usando o Scene Viewer
Se você estiver procurando a maneira mais simples de carregar um modelo 3D com recursos básicos de interação, poderá usar o Scene Viewer como faria no dispositivo móvel. Uma diferença importante entre o Scene Viewer no Android XR e no dispositivo móvel é que o Scene Viewer só oferece suporte ao parâmetro de URI de arquivo que aponta para o arquivo glTF, e todos os outros parâmetros são ignorados.
O Scene Viewer é um app separado que é invocado usando uma intent e é executado no modo de espaço ampliado. Como resultado, quando você o invoca, o app não fica mais visível e o Scene Viewer fica em foco. Todos os ambientes que você tiver mudado serão redefinidos para as preferências do sistema do usuário.
Confira um exemplo de como usar um Intent para visualizar um arquivo glTF no Scene Viewer
no Android 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. }
Para mais informações sobre as opções de interatividade do Scene Viewer, consulte nossa documentação de design de modelo 3D.
Extensões glTF
O SDK do Jetpack XR oferece suporte a várias extensões glTF que expandem os recursos de modelos 3D. Esses recursos estão disponíveis no
GltfModelEntity e no 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