创建在主页中使用的 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. 建模 - 资产必须少于 10k 个三角形,每个 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 Group 维护的用于 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 规范中的概念,它定义场景中的对象。 子网格在对象网格上的基元数组中定义。

功能 描述 支持的最大数量 文档
节点 glTF 场景中的对象 每个 LOD 64 个 此处
子网格 所有网格上的基元总数 每个 LOD 32 个 此处

材料指南

纹理应该使用 PBR 金属粗糙度工作流进行准备。 首先创建一组完整的纹理,包括反照率、法线、遮挡、金属度和粗糙度。 Windows Mixed Reality 支持分辨率高达 4096 x 4096 的纹理,但建议采用 512 x 512 的分辨率进行创作。 纹理应以 4 的倍数的分辨率进行创作。 以下概述了导出步骤中应用于纹理的压缩格式要求。 生成 MIP 贴图或纹理时,最低 MIP 必须最大为 4 x 4。

建议的纹理大小 最大纹理大小 最低 MIP
512x512 4096 x 4096 最大 4 x 4

反照率(基准颜色)贴图

无照明信息的原始颜色。 该贴图还分别包含金属(金属度贴图中的白色)和绝缘体(金属度贴图中的黑色)图面的反射率和漫射信息。

普通

正切空间法线贴图

粗糙度贴图

描述对象的微观图面。 白色 1.0 为粗糙,黑色 0.0 为光滑。 此贴图为资产提供了最明显的特征,因为它真实描述了图面。 例如划痕、指纹、污迹、污垢等。

环境遮挡贴图

显示光线遮挡(阻止反射)区域的值级别贴图

金属度贴图

让着色器了解某些位置是否为金属。 纯金属 = 1.0 白色,非金属 = 0.0 黑色。 可能存在过渡灰度值,这些值指示有灰尘等物体覆盖在金属原材料表面,但通常情况下,此贴图应仅为黑色和白色。

优化

Windows Mixed Reality 主页在使用自定义扩展定义的核心 glTF 规范基础上提供一系列优化 对于 <= 1709 的 Windows 版本,需要进行这些优化,对于更新的 Windows 版本,建议进行这些优化。 可以使用 GitHub 上提供的 Windows Mixed Reality 资产转换器,轻松优化任何 glTF 2.0 模型。 此工具将按以下指定的方式执行正确的纹理封装和优化。 对于常规用法,建议使用 WindowsMRAssetConverter,但如果需要对体验进行更多控制并希望生成自己的优化管道,则可以参考以下详细规范。

注意

有关确切的模型限制的可能性的最终列表,请参阅用于 Dynamics 365 应用程序的 3D 模型优化一文。

材料

为缩短在混合现实环境中加载资产的时间,Windows MR 支持呈现根据本部分定义的纹理封装方案封装的压缩 DDS 纹理。 可使用 MSFT_texture_dds 扩展来引用 DDS 纹理。 强烈建议使用压缩纹理。

HoloLens

基于 HoloLens 的混合现实体验要求使用以下封装规范,通过 2 个纹理设置封装纹理:

glTF 属性 纹理 封装方案
pbrMetallicRoughness baseColorTexture 红色 (R),绿色 (G),蓝色 (B)
MSFT_packing_normalRoughnessMetallic normalRoughnessMetallicTexture 法线 (RG),粗糙度 (B),金属度 (A)

压缩 DDS 纹理时,每个贴图应进行以下压缩:

纹理 预期压缩
baseColorTexture,normalRoughnessMetallicTexture BC7

沉浸式 (VR) 头戴显示设备

沉浸式 (VR) 头戴显示设备的基于电脑的 Windows Mixed Reality 体验要求使用以下封装规范,通过 3 个纹理设置封装纹理:

>= 1803 的 Windows OS 版本

glTF 属性 纹理 封装方案
pbrMetallicRoughness baseColorTexture 红色 (R),绿色 (G),蓝色 (B)
MSFT_packing_occlusionRoughnessMetallic occlusionRoughnessMetallicTexture 遮挡 (R),粗糙度 (G),金属度 (B)
MSFT_packing_occlusionRoughnessMetallic normalTexture 法线 (RG)

压缩 DDS 纹理时,每个贴图应进行以下压缩:

纹理 预期压缩
normalTexture BC5
baseColorTexture, occlusionRoughnessMetallicTexture BC7
<= 1709 的 Windows OS 版本

glTF 属性 纹理 封装方案
pbrMetallicRoughness baseColorTexture 红色 (R),绿色 (G),蓝色 (B)
MSFT_packing_occlusionRoughnessMetallic roughnessMetallicOcclusionTexture 粗糙度 (R),金属度 (G),遮挡 (B)
MSFT_packing_occlusionRoughnessMetallic normalTexture 法线 (RG)

压缩 DDS 纹理时,每个贴图应进行以下压缩:

纹理 预期压缩
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。

屏幕覆盖范围

Windows Mixed Reality 根据每个 LOD 上设置的屏幕覆盖范围值驱动的系统来显示 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 和沉浸式 (VR) 头戴显示设备上播放 glTF 动画对象。 如果要在模型上触发动画,则需要使用 glTF 格式的动画贴图扩展。 使用此扩展可以根据用户在世界中的状态,在 glTF 模型中触发动画,例如,当用户靠近对象或用户查看对象时触发动画。 如果 glTF 对象具有动画,但没有定义触发器,则不会播放动画。 以下部分将介绍向任何 glTF 动画对象添加触发器的工作流。

工具

首先,下载以下工具(如果尚未安装)。 借助这些工具,可以轻松打开任何 glTF 模型,预览它,修改它并将它保存为 glTF 或 .glb:

  1. Visual Studio Code
  2. 适用于 Visual Studio Code 的 glTF 工具

打开并预览模型

首先,将 .glTF 文件拖动到编辑器窗口中,以在 VSCode 中打开 glTF 模型。 如果拥有的是 .glb 而不是 .glTF 文件,则可以使用下载的 glTF 工具加载项将其导入 VSCode 中。 转到“查看 -> 命令面板”,然后开始在命令面板中键入“glTF”,并选择“glTF: 从 glb 导入”,随即将弹出一个文件选取器,以便导入 .glb。

打开 glTF 模型后,应在编辑器窗口中看到 JSON。 此外,还可以右键单击文件名并从右键单击菜单中选择“glTF: 预览 3D 模型”命令快捷方式,以在实时 3D 查看器中预览模型。

添加触发器

可使用动画贴图扩展将动画触发器添加到 glTF 模型 JSON。 GitHub 中公开记录了动画贴图扩展(注意:此为草稿版本的扩展)。 若要将扩展添加到模型,只需滚动到编辑器中 glTF 文件的末尾,然后向文件添加“extensionsUsed”和“extensions”块(如果文件中没有它们)。 在“extensionsUsed”部分中,添加对“EXT_animation_map”扩展的引用,然后在“extensions”块中,将映射添加到模型中的动画。

规范中所述,可以使用“动画”列表(即动画索引数组)中的“语义”字符串来定义动画触发项。 以下示例指定用户凝视对象时要播放的动画:

  "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 个(以 30 FPS 速度播放 20 分钟)。 此外,使用基于变形目标的动画时,变形目标顶点不能超过 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、metallicFactor、roughnessFactor
  • baseColorTexture:必须指向 DDS 中存储的纹理。
  • emissiveTexture:必须指向 DDS 中存储的纹理。
  • emissiveFactor
  • alphaMode

核心规范中忽略以下材料属性:

  • 所有多 UV
  • metalRoughnessTexture:必须改用以下定义的 Microsoft 优化纹理封装
  • normalTexture:必须改用以下定义的 Microsoft 优化纹理封装
  • normalScale
  • occlusionTexture:必须改用以下定义的 Microsoft 优化纹理封装
  • occlusionStrength

Windows MR 不支持基元模式线和点。

仅支持单个 UV 顶点属性。

更多资源

请参阅