创建用于家庭的 3D 模型
Windows Mixed Reality主页是用户在启动应用程序之前登陆的起点。 为Windows Mixed Reality头戴显示设备设计应用程序时,请使用 3D 模型作为应用启动器,并将 3D 深层链接置于Windows Mixed Reality主页中。 本文概述了创建与Windows Mixed Reality主页兼容的 3D 模型的指南。
资产要求概述
为Windows Mixed Reality创建 3D 模型时,所有资产都必须满足一些要求:
- 导出 - 资产必须以 .glb (二进制 glTF) 、.obj 或 .fbx 文件格式传送
- 建模 - 资产必须小于 10,000 个三角形,每个 LOD 具有不超过 64 个节点和 32 个子关系
- 材料 - 纹理不能大于 4096 x 4096,最小 mip 贴图在任一维度上不应大于 4
- 动画 - 动画在 30 FPS 下不能超过 20 分钟 (36,000 个关键帧) ,并且必须包含 <= 8192 个变形目标顶点
- 优化 - 应使用 WindowsMRAssetConverter 优化资产。 Windows OS 版本 <= 1709* 上是必需的,建议在 Windows OS 版本 >= 1803
注意
3D 查看器应用支持不同的格式和分辨率,但最终会先将模型转换为 .glb/glTF,然后再在混合现实主页中显示模型。
本文的其余部分包括这些要求的详细概述和额外的准则,以确保模型在Windows Mixed Reality家庭中正常工作。
详细指南
导出模型
Windows Mixed Reality主页要求使用带有嵌入图像和二进制数据的 .glb 文件格式交付 3D 资产。 Glb 是 glTF 格式的二进制版本,它是 Khronos 集团维护的 3D 资产交付的免费开放标准。 随着 glTF 成为可互作 3D 内容的行业标准,因此将Microsoft跨 Windows 应用和体验对格式的支持。 如果尚未创建 glTF 资产,则可以在 glTF 工作组 github 页面上找到 受支持的导出器和转换器列表 。
建模指南
Windows 希望使用以下建模指南生成资产,以确保与混合现实家庭体验兼容。 在所选程序中建模时,请记住以下建议和限制:
- 向上轴应设置为“Y”。
- 资产应面向正 Z 轴“向前”。
- 所有资产都应在现场原点的地面平面上构建 (0,0,0)
- 工作单位应设置为计量和资产,以便可以按世界规模创作资产
- 不需要合并所有网格,但如果面向资源受限的设备,建议使用
- 所有网格应共享一个材料,并且只有一个纹理集用于整个资产
- UV 必须在 0-1 空间中以正方形排列方式进行布局。 尽管允许使用平铺纹理,但请避免平铺纹理。
- 不支持多 UV
- 不支持双面材料
三角形计数和详细级别 (LOD)
Windows Mixed Reality主页不支持三角形超过 10,000 个的模型。 建议在导出之前对网格进行三角分析,以确保它们不会超过此计数。 Windows MR 还支持可选的几何图形级别 (LOD) ,以确保高性能和高质量的体验。
WindowsMRAssetConverter 将帮助你将 3 个版本的模型合并到单个 .glb 模型中。 Windows 根据模型占用的屏幕空间量确定要显示的 LOD。 以下建议的三角形计数仅支持 3 个 LOD 级别:
LOD 级别 | 建议的三角形计数 | 最大三角形计数 |
---|---|---|
LOD 0 | 10,000 | 10,000 |
LOD 1 | 5,000 | 10,000 |
LOD 2 | 2,500 | 10,000 |
节点计数和子网格限制
Windows Mixed Reality主页不支持每个 LOD 具有超过 64 个节点或 32 个子对象的模型。 节点是 glTF 规范 中的一个概念,用于定义场景中的对象。 子对象在网格上的 基元 数组中定义。
功能 | 说明 | 支持的最大 | 文档 |
---|---|---|---|
Nodes | glTF 场景中的对象 | 每个 LOD 64 个 | 这里 |
Submeshes | 所有网格上的基元总和 | 每个 LOD 32 个 | 这里 |
材料指南
应使用 PBR 金属粗糙度工作流准备纹理。 首先创建一组完整的纹理,包括反照度、正常、遮挡、金属和粗糙度。 Windows Mixed Reality支持分辨率高达 4096x4096 的纹理,但建议使用 512x512 进行创作。 纹理应以 4 的倍数的分辨率创作。 这是以下导出步骤中应用于纹理的压缩格式的要求。 生成 mip 贴图或纹理时,最低 mip 必须最大为 4x4。
建议的纹理大小 | 最大纹理大小 | 最低 Mip |
---|---|---|
512x512 | 4096x4096 | 最大 4x4 |
映射) 底色 (反照度
没有照明信息的原始颜色。 此地图还分别包含金属贴图中金属 (白色) 和绝缘体 (黑色) 表面的反射和漫射信息。
一般
正切空间法线映射
粗糙度地图
描述对象的微表面。 白色 1.0 是粗糙的黑色 0.0 是平滑的。 此地图为资产提供了最多的字符,因为它真正描述了表面。 例如,划痕、指纹、污点、污垢等。
环境遮挡贴图
显示遮挡光线区域(阻止反射)的值比例图
金属贴图
指示着色器是否为金属。 原始金属 = 1.0 白色非金属 = 0.0 黑色。 可以有过渡灰色值,指示覆盖原始金属(如污垢)的内容,但通常此地图应仅为黑白。
优化
Windows Mixed Reality主页在使用自定义扩展定义的核心 glTF 规范的基础上提供了一系列优化。 Windows 版本 <= 1709 需要这些优化,建议在较新版本的 Windows 上进行这些优化。 可以使用 GitHub 上提供的 Windows Mixed Reality 资产转换器轻松优化任何 glTF 2.0 模型。 此工具将执行正确的纹理打包和优化,如下所示。 对于常规用法,我们建议使用 WindowsMRAssetConverter,但如果需要对体验进行更多控制,并且想要生成自己的优化管道,则可以参阅以下详细规范。
注意
有关确切模型限制的可能性的明确列表,请参阅用于Dynamics 365应用程序中的 3D 模型优化一文。
材料
为了缩短混合现实环境中的资产加载时间,Windows MR 支持呈现根据本节中定义的纹理打包方案打包的压缩 DDS 纹理。 使用 MSFT_texture_dds 扩展引用 DDS 纹理。 强烈建议压缩纹理。
HoloLens
基于 HoloLens 的混合现实体验要求使用以下打包规范使用 2 纹理设置打包纹理:
glTF 属性 | Texture | 包装方案 |
---|---|---|
pbrMetallicRoughness | baseColorTexture | 红色 (R) 、绿色 (G) 、蓝色 (B) |
MSFT_packing_normalRoughnessMetallic | normalRoughnessMetallicTexture | 正常 (RG) 、粗糙度 (B) 、金属 (A) |
压缩 DDS 纹理时,应在每个贴图上进行以下压缩:
Texture | 预期压缩 |
---|---|
baseColorTexture、normalRoughnessMetallicTexture | BC7 |
沉浸式 (VR) 头戴显示设备
沉浸式 (VR) 头戴显示设备的基于电脑的Windows Mixed Reality体验要求使用以下打包规范的 3 纹理设置来打包纹理:
Windows OS >= 1803
glTF 属性 | Texture | 包装方案 |
---|---|---|
pbrMetallicRoughness | baseColorTexture | 红色 (R) 、绿色 (G) 、蓝色 (B) |
MSFT_packing_occlusionRoughnessMetallic | occlusionRoughnessMetallicTexture | 封闭 (R) 、粗糙度 (G) 、金属 (B) |
MSFT_packing_occlusionRoughnessMetallic | normalTexture | 正常 (RG) |
压缩 DDS 纹理时,应在每个贴图上进行以下压缩:
Texture | 预期压缩 |
---|---|
normalTexture | BC5 |
baseColorTexture、occlusionRoughnessMetallicTexture | BC7 |
Windows OS <= 1709
glTF 属性 | Texture | 包装方案 |
---|---|---|
pbrMetallicRoughness | baseColorTexture | 红色 (R) 、绿色 (G) 、蓝色 (B) |
MSFT_packing_occlusionRoughnessMetallic | roughnessMetallicOcclusionTexture | 粗糙度 (R) 、金属 (G) 、封闭 (B) |
MSFT_packing_occlusionRoughnessMetallic | normalTexture | 正常 (RG) |
压缩 DDS 纹理时,应在每个贴图上进行以下压缩:
Texture | 预期压缩 |
---|---|
normalTexture | BC5 |
baseColorTexture, roughnessMetallicOcclusionTexture | BC7 |
添加网格 LOD
Windows MR 使用几何节点 LOD 以不同级别的详细信息呈现 3D 模型,具体取决于屏幕覆盖范围。 虽然从技术上讲不需要此功能,但建议将其用于所有资产。 目前,Windows 支持 3 个级别的详细信息。 默认 LOD 为 0,表示最高质量。 其他 LOD 按顺序编号,例如 1、2,质量会逐渐降低。
Windows Mixed Reality资产转换器支持通过接受多个 glTF 模型并将其合并为具有有效 LOD 级别的单个资产来生成满足此 LOD 规范的资产。 下表概述了预期的 LOD 排序和三角形目标:
LOD 级别 | 建议的三角形计数 | 最大三角形计数 |
---|---|---|
LOD 0 | 10,000 | 10,000 |
LOD 1 | 5,000 | 10,000 |
LOD 2 | 2,500 | 10,000 |
使用 LOD 时,始终指定 3 个 LOD 级别。 缺少 LOD 将导致模型不会意外呈现,因为 LOD 系统切换到缺少的 LOD 级别。 glTF 2.0 目前不支持 LOD 作为核心规范的一部分。应使用 MSFT_LOD 扩展定义 LOD。
屏幕覆盖范围
根据每个 LOD 上设置的屏幕覆盖率值驱动的系统,在 Windows Mixed Reality 中显示 LOD。 当前占用屏幕空间较大部分的对象显示在更高的 LOD 级别。 屏幕覆盖范围不是核心 glTF 2.0 规范的一部分,必须使用MSFT_lod扩展的“附加”部分中 的MSFT_ScreenCoverage进行指定。
LOD 级别 | 建议的范围 | 默认范围 |
---|---|---|
LOD 0 | 100% - 50% | 0.5 |
LOD 1 | 低于 50% - 20% | 0.2 |
LOD 2 | 低于 20% - 1% | 0.01 |
LOD 4 | 低于 1% | - |
动画指南
注意
此功能已作为Windows 10 2018 年 4 月更新的一部分添加。 在较旧版本的 Windows 上,这些动画不会播放,但是,如果根据本文中的指南创作,它们仍将加载。
混合现实主页支持 HoloLens 上的动画 glTF 对象和沉浸式 (VR) 头戴显示设备。 如果要在模型上触发动画,则需要对 glTF 格式使用动画映射扩展。 此扩展允许基于用户在世界中的存在触发 glTF 模型中的动画,例如,当用户靠近对象或正在查看对象时触发动画。 如果 glTF 对象具有动画,但未定义触发器,则不会播放动画。 以下部分介绍将这些触发器添加到任何动画 glTF 对象的一个工作流。
工具
首先,如果还没有以下工具,请下载它们。 这些工具可以轻松打开任何 glTF 模型、预览、进行更改以及保存为 glTF 或 .glb:
打开和预览模型
首先,通过将 .glTF 文件拖动到编辑器窗口中,在 VSCode 中打开 glTF 模型。 如果你有 .glb 而不是 .glTF 文件,则可以使用下载的 glTF 工具加载项将其导入 VSCode。 转到“视图 -> 命令面板”,然后开始在命令面板中键入“glTF”,然后选择“glTF:从 glb 导入”,这将弹出文件选取器,用于导入 .glb。
打开 glTF 模型后,应在编辑器窗口中看到 JSON。 还可以使用 实时 3D 查看器预览模型,方法是右键单击文件名并从右键单击菜单中选择“glTF:预览 3D 模型”命令快捷方式。
添加触发器
动画触发器使用动画映射扩展添加到 glTF 模型 JSON。 动画映射扩展 在此处在 GitHub 上 公开记录 (注意:这是草稿扩展) 。 若要向模型添加扩展,只需滚动到编辑器中 glTF 文件的末尾,并在文件中添加“extensionsUsed”和“extensions”块(如果它们尚不存在)。 在“extensionsUsed”部分中,你将添加对“EXT_animation_map”扩展的引用,并在“extensions”块中将映射添加到模型中的动画。
如 规范中所述, 在“animations”列表(动画索引数组)上使用“语义”字符串定义触发动画的内容。 在下面的示例中,我们指定了在用户凝视对象时要播放的动画:
"extensionsUsed": [
"EXT_animation_map"
],
"extensions" : {
"EXT_animation_map" : {
"bindings": [
{
"semantic": "GAZE",
"animations": [0]
}
]
}
}
Windows Mixed Reality主页支持以下动画触发器语义。
- “ALWAYS”:不断循环动画
- “HELD”:在抓取对象的整个持续时间内循环。
- “GAZE”:在查看对象时循环
- “PROXIMITY”:当查看器靠近对象时循环
- “POINTING”:当用户指向对象时循环
保存和导出
对 glTF 模型进行更改后,可以直接将其另存为 glTF。 还可以在编辑器中右键单击文件的名称,然后选择“glTF:导出到 GLB (二进制文件) ”以导出 .glb。
限制
动画不能超过 20 分钟,并且不能包含超过 36,000 个关键帧 (20 分钟,30 FPS) 。 此外,使用基于变形目标的动画不超过 8192 个平滑目标顶点或更少。 超过这些计数将导致动画资产在Windows Mixed Reality家庭中不受支持。
功能 | 最高 |
---|---|
持续时间 | 20 分钟 |
关键帧 | 36,000 |
平滑目标顶点 | 8192 |
glTF 实现说明
Windows MR 不支持使用负刻度翻转几何图形。 具有负刻度的几何图形可能会导致视觉项目。
glTF 资产必须使用要由 Windows MR 呈现的场景属性指向默认场景。 此外,Windows 10 2018 年 4 月更新之前的 Windows MR glTF 加载程序需要访问器:
- 必须具有最小值和最大值。
- 类型 SCALAR 必须是 componentType UNSIGNED_SHORT (5123) 或 UNSIGNED_INT (5125) 。
- 类型 VEC2 和 VEC3 必须是 componentType FLOAT (5126) 。
核心 glTF 2.0 规范中使用以下材料属性,但不是必需的:
- baseColorFactor、金属因子、粗糙度Factor
- baseColorTexture:必须指向存储在 dds 中的纹理。
- emissiveTexture:必须指向存储在 dds 中的纹理。
- emissiveFactor
- alphaMode
从核心规格中忽略以下材料属性:
- 所有多 UV
- metalRoughnessTexture:必须改用下面定义的Microsoft优化纹理打包
- normalTexture:必须改用下面定义的Microsoft优化纹理打包
- normalScale
- occlusionTexture:必须改用下面定义的Microsoft优化纹理打包
- occlusionStrength
Windows MR 不支持基元模式线条和点。
仅支持单个 UV 顶点属性。
更多资源
- glTF 导出器和转换器
- glTF 工具包
- glTF 2.0 规范
- Microsoft glTF LOD 扩展规范
- 电脑混合现实纹理打包扩展规范
- HoloLens 混合现实纹理打包扩展规范
- Microsoft DDS 纹理 glTF 扩展规范