自定义应用中的 3D 模型

适用的 XR 设备
本指南可帮助您为以下类型的 XR 设备打造优质体验。
扩展现实头戴设备
有线扩展现实眼镜

将 3D 模型添加到应用后,您可以通过定义自定义材质属性并向对象应用纹理来增强视觉体验。Jetpack XR 的材质系统基于 glTF™ 2.0 规范,并且 3D 模型使用 基于物理的渲染 (PBR) 进行渲染。这些都是由 Khronos Group 维护的开放标准。

材质属性可以在运行时进行调整,以根据用户输入或应用的当前状态动态更改对象的外观。

如需详细了解 Android XR 中每个受支持的属性和可自定义的参数 ,请参阅我们的 参考文档。如需更好地了解这些 属性,请参阅 Khronos 词汇表

自定义 3D 模型的材质属性

Material 定义了一组对象表面的视觉属性,并确定该表面在场景中如何与光交互。

在 Jetpack XR 中,KhronosPbrMaterialKhronosUnlitMaterial 类用于创建和操纵这些材质。顾名思义, KhronosUnlitMaterials 是无光照的,不受场景 光照的影响。KhronosPbrMaterial 可让您自定义更多属性,例如光泽颜色、对象的金属感或粗糙度,以及对象是否发光。

更改 3D 模型上基本颜色的示例

如需自定义 3D 模型的材质属性,首先需要使用 KhronosPbrMaterial 创建新材质。您需要为要实现的视觉外观设置适当的 AlphaMode

val pbrMaterial = KhronosPbrMaterial.create(
    session = xrSession,
    alphaMode = AlphaMode.OPAQUE
)

接下来,定义要修改的属性。在本示例中,我们使用 setBaseColorFactor 更改基色。此方法需要 Vector4,其中 xyzw 组件分别对应于 RGBA(红色、绿色、蓝色和 Alpha)值:

pbrMaterial.setBaseColorFactor(
    Vector4(
        x = 0.5f,
        y = 0.0f,
        z = 0.5f,
        w = 0.0f
    )
)

为 3D 模型创建自定义纹理

Texture 是一种图片素材资源,您可以将其应用于 3D 模型的表面,以提供颜色、细节或其他表面信息。借助 Jetpack XR Texture API,您可以从应用的 /assets/ 文件夹异步加载图片数据(例如 PNG 文件)。

加载纹理时,您可以指定 TextureSampler,用于控制 纹理的渲染方式。采样器定义了过滤属性(用于在纹理显示得比原始尺寸小或大时)和封装模式(用于处理标准 [0, 1] 范围之外的坐标)。Texture 对象本身只是数据;它必须分配给 Material 才能对 3D 模型产生视觉效果。

更改 3D 模型纹理的示例

如需创建自定义纹理,首先需要将图片文件保存到 /assets/ 文件夹。作为最佳实践,您可能还需要在该文件夹中创建一个 textures 子目录。

将文件保存在适当的目录中后,使用 Texture API 创建纹理 。您还可以在此处应用可选的 TextureSampler(如果需要):

val texture = Texture.create(
    session = xrSession,
    path = Path("textures/texture_file.png")
)

接下来,定义纹理的类型并设置其对应的参数。在本示例中,我们应用了遮挡纹理并设置了强度:

pbrMaterial.setOcclusionTexture(
    texture = texture,
    strength = 1.0f
)

将材质和纹理应用于 3D 对象

如需应用新材质或纹理,请替换 glTF 节点上特定节点的现有材质。为此,请对 setMaterialOverride调用GltfModelNode

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

如需移除新创建的材质,请对 您 GltfModelNode 上之前替换的节点调用 clearMaterialOverride。这会将 3D 模型恢复到默认状态:

gltfModelNode.clearMaterialOverride()


glTF 和 glTF 徽标是 Khronos Group Inc. 的商标。