如何为混合现实应用设计3D启动器?

Jyadmin 提交于 周三, 05/15/2019 - 12:26

如何实现3D应用启动器呢?我们需要两个步骤实现:

1.  准备3D模型

2.  修改项目配置以集成3D图标

准备3D模型

3D应用启动器要求的图标文件必然是3D模型文件,这一点是明确的。同时,使用的3D模型必须同样符合HoloLens项目的一般性兼容要求,即对面数或者素材尺寸等方面的限制。3D应用启动器的模型应当在30厘米的立方体空间中设计,也就是说建议的模型长宽高尺寸应当小于30cm*30cm*30cm。此外,作为用于系统主页的启动图标,一些额外的要求也必须遵守:

  • 导出格式:模型资产必须为.glb格式的3D模型,glb格式是免费开放的glTF格式的二进制版本,支持内嵌贴图和数据,很多工具都可以生成或导出此格式的模型文件,包括Windows 10内置的Paint 3D应用。
  • 建模标准:模型曲面的三角形个数必须小于10000个,每个层次细节(LOD)具有不超过64个节点和32个子网格。
  • 材质:模型使用的贴图尺寸最大不超过4096*4096,推荐使用的尺寸为512*512。
  • 动画:模型的动画不应大于30FPS下的20分钟,也就是36000个关键帧。包含的MorphTagets(变形目标)顶点的个数必须不大于8192个。
  • 模型优化:使用的模型必须经WindowsMRAssetConverter优化过,它可以根据微软的要求自动化优化我们的模型,是微软提供的开源工具之一。

首先,用系统内置的Paint 3D应用快速创建一个符合要求的3D模型,可以使用Remix 3D上的免费3D模型。

下一步导出模型,选择Menu - Save as - 3D model,导出格式选择.glb。

再优化模型,下面使用WindowsMRAssetConverter工具自动优化导出的模型文件,确保它可以被项目兼容并使用。注意,不符合要求的模型将不会再HoloLens系统主页上显示。

3D模型优化

此刻模型准备就大功告成啦,下面就把它集成到项目中。注意,要把文件生成行为设为内容。

集成3D应用启动器

为了能够让系统识别到3D模型作为启动器,修改UWP应用清单就是必要的做法。当我们使用Visual Studio创建一个UWP项目时,默认会在项目中生成一个Package.appxmanifest应用清单文件。此XML格式的应用清单文件是UWP应用必须具有的组件之一,用于声明应用的信息、权限和其他系统行为的注册,可以说是每一个应用的身份凭据了。当然,对于Unity3D开发的3D应用,需要在Unity导出生成UWP项目后再编辑此清单文件。

下面我们首先修改清单文件,引入uap5命名空间,如下:

引入XAML命名空间

接下来在Application元素中使用uap5:MixedRealityModel标签声明启动器模型路径。

声明模型路径

如果不引入此MixedRealityModel标签那么应用就会被默认为2D应用,引入后系统才会认为此应用使用3D启动器。完成以上步骤后,实现一个基本的3D应用启动器就大功告成了。

边框盒选项(Bounding Box)

前面的部分我们已经实现基本的3D应用启动器了,整个配置过程非常简单。那么如何自定义启动模型的边框盒呢?对于实现了3D应用启动器的应用而言,系统默认会生成边框盒。此外,HoloLens还允许我们修改边框盒的参数来自定义3D启动器模型的显示效果。主要是使用SpatialBoundingBox标签中的Center和extents属性来指定模型相对于边框盒中心的位置,以及边框盒中心点到每个边框在对应轴上的距离,这里设置的属性值单位都为米。

使用方法和引入3D启动器类似,首先引入命名空间:

引入命名空间

在MixedRealityModel下添加SpatialBoundingBox标签,如下:

添加SpatialBoundingBox标签

这样配置后,我们的3D启动器的模型将会根据设置的自定义参数显示在空间特定的位置上。

二级3D磁贴

UWP应用具有一个可以创建二级磁贴的特性,可以生成快捷的二级磁贴入口,类似于快捷方式一般。对于HoloLens而言,现在我们也可以像创建2D二级磁贴一样,使用代码快捷的生成3D二级磁贴了,就像微软的Holograms应用一般,可以快捷的把全息模型放置到空间中。

Holograms应用

同时3D二级磁贴还支持两种激活模式:

1.  默认激活:此模式下点击3D二级磁贴则会立刻打开应用,进入其应用视图。

2.  不激活:此模式下点击选中3D磁贴不会触发任何应用,它就像一个普通的全息图像一样展示在空间中。

3D二级磁贴的使用方式和普通二级磁贴类似,只需要简单的调用系统API即可,如下:

调用系统API

其中需要注意的是,用作二级磁贴的3D模型只能是存放在应用安装目录或者独立存储空间中的内容,使用ms-appx或ms-appdata协议路劲引入。二级磁贴的边框盒也可以直接使用代码设置,其属性和3D启动器一致。