创建用于家庭的 3D 模型

Windows Mixed Reality主页是用户在启动应用程序之前登陆的起点。 为Windows Mixed Reality头戴显示设备设计应用程序时,请使用 3D 模型作为应用启动器,并将 3D 深层链接置于Windows Mixed Reality主页中。 本文概述了创建与Windows Mixed Reality主页兼容的 3D 模型的指南。

资产要求概述

为Windows Mixed Reality创建 3D 模型时,所有资产都必须满足一些要求:

  1. 导出 - 资产必须以 .glb (二进制 glTF) 、.obj 或 .fbx 文件格式传送
  2. 建模 - 资产必须小于 10,000 个三角形,每个 LOD 具有不超过 64 个节点和 32 个子关系
  3. 材料 - 纹理不能大于 4096 x 4096,最小 mip 贴图在任一维度上不应大于 4
  4. 动画 - 动画在 30 FPS 下不能超过 20 分钟 (36,000 个关键帧) ,并且必须包含 <= 8192 个变形目标顶点
  5. 优化 - 应使用 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 希望使用以下建模指南生成资产,以确保与混合现实家庭体验兼容。 在所选程序中建模时,请记住以下建议和限制:

  1. 向上轴应设置为“Y”。
  2. 资产应面向正 Z 轴“向前”。
  3. 所有资产都应在现场原点的地面平面上构建 (0,0,0)
  4. 工作单位应设置为计量和资产,以便可以按世界规模创作资产
  5. 不需要合并所有网格,但如果面向资源受限的设备,建议使用
  6. 所有网格应共享一个材料,并且只有一个纹理集用于整个资产
  7. UV 必须在 0-1 空间中以正方形排列方式进行布局。 尽管允许使用平铺纹理,但请避免平铺纹理。
  8. 不支持多 UV
  9. 不支持双面材料

三角形计数和详细级别 (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:

  1. Visual Studio Code
  2. glTF Tools for Visual Studio Code

打开和预览模型

首先,通过将 .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 顶点属性。

更多资源

另请参阅