概述

Spatial SDK 使用 glTF(GL 传输格式)来加载自定义 3D 模型。它是高效传输3D图形的标准文件格式。文件是文件的二进制版本,包含纹理、几何体和其他资源,集成在一个文件中,便于分发。.glb.gltf

glTF文件的结构

在空间SDK的背景下,你需要了解以下内容:

  • glTF 文件有一个节点层级的场景。
  • 每个节点可以有一个变换(平移、旋转、缩放)和一个网格。
  • 每个网格指向一些几何数据(顶点和索引)和一个材质。
  • 每种材质都指定了一些PBR(基于物理的渲染)属性(粗糙度/金属性),并可能指向纹理。

支持的格式

支持以下扩展:

  • KHR_texture_transform
  • KHR_texture_basisu
  • KHR_materials_unlit
  • 对 的近似支持,用于显示一些遗留材料。KHR_materials_pbrSpecularGlossiness

寻找glTF/GLB模型

在线:网上有很多寻找glTF的选择。glb下载官网是一个受欢迎的平台,提供免费和付费的高质量glTF和模型。搜索你需要的型号,然后下载格式化。.glb.glb自己创建:如果你想创建自定义3D模型,像Blender这样的软件可以让你设计并导出你的作品,格式为glTF或格式。你也可以编辑网上找到的文件,然后导出到 Spatial SDK 里(即使是其他文件格式的)。.glb.glb

在 Spatial SDK 中用你的文件创建实体.glb

正如3D Object页面所描述的,下载了你的资源(比如),复制到应用的资产文件夹()。你现在可以通过以下组件创建3D对象实体:mymodel.glb<myapp>/assets/Entity.create()Mesh

Entity.create(
listOf(
Mesh(
Uri.parse("mymodel.glb")
)
)
)

处理 glTF 文件的工具

本节包含处理 glTF 文件的工具列表。

blender

blender是一个免费且开源的3D创作工具。虽然对初学者来说可能有些望而生畏,但互联网上有许多高质量的免费学习资源。

导入模型

Blender 支持从多种不同 3D 模型类型导入(例如,、、)。你通常可以导入任何支持的模型类型,并在Blender里导出为glTF。.obj.fbx.dae你可以从以下平台获取模型和动画米克萨莫⁠,提供免费且逼真的角色动画。使用Mixamo的模型,你可以让角色进入行走循环,或者让他们做后空翻,无需担心绑定或自己手动动画。不过,Mixamo不支持导出到glTF。你可以下载动画,导入到 Blender,然后导出到 glTF。.fbx

导出为glTF

Blender 有一个页面介绍它完整的GLTF支持⁠.你可以点击file> 导出glTF 2.0 (.glb/.gltf)> 导出。导出为文件是最好的选择,因为在程序间移动会更方便一些。.glb导出后,试着用 glTF 标准模型查看器检查导出模型是否正确。最好确保你的模型在常用的查看器中看起来正确。如果你的材质在标准查看器中没有正确显示,请确保你在Blender中使用了Principled BSDF着色器节点。Blender用这个着色器来导出你的材质属性。

Khronos 资源

glTF 标准背后的组织 Khronos 提供了多种工具和资源用于处理 glTF 文件。

glTF 样本查看器

免费的glTF 样本查看器⁠是glTF查看器的参考实现。你可以访问前面提到的所有示例模型,并将它们拖放到任何自定义模型中。

glTF 变换

glTF 变换是一个强大的 JS 库,用于处理 glTF 文件。它使你能够读取、修改、修剪、优化和自定义你的 glTF 模型。你可以用glTF Transform把资源转换成Spatial SDK的正确格式。在 Spatial SDK 中,你可以展示模型而不考虑碰撞数据。你可以用脚本把所有碰撞数据都剔除出来,再把文件交给 Spatial SDK:

function customTransform(options) {
return async document => {
for (const nodes of document.getRoot().listNodes()) {
// remove any node marked as a collider or boundary
// these are not meant to be visible in the actual game
if (nodes.getExtras().collider == 1 || nodes.getExtras().boundary == 1) {
nodes.dispose();
continue;
}
// remove any nodes with ".gltf" in the name, used to reference other files
if (nodes.getName().indexOf('.gltf') != -1) {
nodes.dispose();
continue;
}
}
};
}

如果你不想本地运行这些脚本,可以查看下面的 gltf.report 工具。

GLTF.报告

3D模型查看与格式转换教程配图

GLTF.报告⁠是调查和分析模型的有用在线工具。它最有价值的功能之一是与 glTF transform 的集成,允许你在导入的模型上运行代码。他们默认的 glTF 变换脚本可以通过剪枝文件并将纹理调整到更适合移动端的大小来减少模型大小。这是一个缩小应用资源规模的好选择。