3D 空间内容展示
使用 AR 时,通常需要展示虚拟物体。在简单的测试示例中,可以使用简单的几何体,但要面向消费者开发时,一般需要显示高精度的3D 模型和动画,并可能会在点击模型结点时触发事件和交互。
模型
当前比较流行的 3D 模型,一般由三角形网格(triangle mesh)构成。为了让模型看起来真实,我们需要为每个三角形赋予材质 (material)。材质通常实现某种光照模型,其内容由贴图和光照模型参数构成。
- 贴图(texture)决定三角形中每个点的基础颜色,所有三角形的贴图会放在一张或多张漫反射贴图中。在一些进阶用法中,还可以使用贴图表示每个点的法线方向或者其他参数。
- 光照模型(lighting model)定义物体如何与光线交互,常见的有 PBR。光照模型通常使用 shader 来实现。PBR 光照模型的参数有颜色、金属度、粗糙度等。
在应用开发中,一般不会直接在 OpenGL / Metal / Vulkan / Direct3D 上加载 3D 模型,而是使用 3D 引擎来进行加载。3D 引擎会要求使用一些特定的 3D 模型格式,例如历史悠久、较为可读的obj / mtl 格式,以及目前比较流行的 glTF 格式。
动画
为了让模型运动,需要使用骨骼动画。骨骼是指的 3D 模型中做刚体运动时保持一致运动的大块模型结点。
显示动画,需要在运行时不断更新模型结点的位置和姿态(变换矩阵)。大部分 3D 引擎会提供动画功能,只需要在动画制作软件中编辑好动画,并以 3D 引擎支持的格式导出,即可在 3D 引擎中使用。上述 glTF 格式也包含动画的功能。
交互
用户点击模型结点时,有时候需要触发事件和交互。一般会对骨骼动画中的骨骼进行命名,并使用碰撞检测或射线检测,在点击时触发事件,返回被点击的骨骼名称。事件的处理,可以使用脚本或者应用代码来进行。
注意
如果您缺少 3D 引擎的使用经验,强烈建议您考虑使用 Unity 来开发您的应用。EasyAR Sense Unity Plugin 对 Unity 有较好的支持,如果您使用其他的 3D 引擎,可能会面临支持和可用资源较少的问题。