本期来说说AR的软件部分是如何制作的。AR程序通常分为三部分,一是制作3D模型,第二是何时显示这个3D模型,第三是如何显示这个3D模型。这里面的核心在于第二和第三点。
首先是制作3D模型,也就是我们经常说的建模。在很多人眼里觉得3D建模是没有技术含量的工作。我经常听到甲方说,你们什么VRAR3D可视化不就是建模的吗?之后我们单独聊一期建模的技术。这里简单说一下,AR建模可以用3Dmax、maya,高手是可以用少的模型表面实现更精美的画面效果,能够兼顾加载速度和画面表现。而且这步说到的制作模型除了3D模型之外,还包括贴图、纹理、凹凸感和动画。现在我们有了一个互动的3D模型了,任何人都可以把它拖到unity或者是UE4里,点一下发布,我们就能得到了一个手机游戏,就是这个3D模型在手机里动的完全没有难度。
第二步,何时显示这个3D模型?如果3D模型随时随地都能在手机上显示的话,就不叫AR程序了。AR的特点就是用手机摄像头捕捉周围的环境,当手机找到触发信号之后,才显示3D模型。比如售楼处的3D户型图。做这个项目的时候,设计师是先做好了3D模型,但是隐藏起来给程序预置一张照片作为处罚信号。当用户打开手机摄像头对着平面户型图扫描的时候,程序是在实时的对比,一直在找哪里的画面跟预置的图片是一样的。当摄像头找到预置图片的时候,一分析这两张图80%都一样,就是它了。
于是就把步制作好的3D模型从隐藏状态变成显示状态,我们就看到了,但这样只是控制3D模型的显示和隐藏。当模型显示出来之后,它和周围的环境没有任何关系。
所以还需要第三步如何显示这个3D模型。比如我们的手机摄像头向下,我应该看到模型的顶面,我的手机向前我应该能看到模型的正面。如果手机在任何姿态下显示的模型都是相同的话,那就没有意思了。所以软件还要调用手机的陀螺仪,知道手机自己的姿态,从而推算出三维模型应该如何显示才是正确的。实际上这个姿态的判断不仅仅是陀螺仪,还有摄像头、激光雷达进行交叉验证。总之我们知道手机能够判断出自己的位置和姿态就够了。你别以为程序员懂,他也只是会调用这个姿态的结果而已。于是现在这个3D模型可以根据手机的姿态不同显示出符合物理空间感的状态了。
但是这样的AR软件没有纵深感。因为当实际物体出现在3D模型前面的时候,本来应该是遮挡住3D模型的,但是软件并不能够判断出有物体遮挡住了3D模型,软件甚至都不会有判断物体遮挡的这个过程。所以如果3D画面显示在所有物体前面时,还好如果有物体出现在3D模型的前面,而3D模型又遮挡住了物体,那么就会让人觉得无比违和,于是就出戏了。
所以有的团队在做AR程序的时候,会把周围实际环境完整的建模出来。但是这个模型并不在程序里显现,它只是用来判断该显示的模型什么时候能看见,什么时候会被遮挡。在触发3D模型显示的时候,也不是用预设的照片跟摄像头的画面进行对比,而是用周围环境的3D模型跟摄像头的画面进行对比,这样操作就会让AR程序看起来更真实。