本期来说说 AR游戏(xi)是如(ru)何制作的(de)。 AR 程序通常分(fen)(fen)为三(san)部分(fen)(fen),一是制作 3D 模型(xing),第(di)二是何时显示这个 3D 模型,第三是如何显示这个 3D 模型。这里面的核心在(zai)于第(di)二和(he)第(di)三点。
首先是制作 3D 模(mo)(mo)型,也(ye)就是我们经常说的建模(mo)(mo)。在很多人眼里觉(jue)得 3D 建(jian)模(mo)是最没有技术含量的工作。我经常听到甲方说,你(ni)们什么(me) VR AR 3D 可视化不(bu)就是建模的吗?之后我们(men)单独(du)聊一期建模的技术。这里简单说一下, AR 建模(mo)可以用 3D max 、maya,高(gao)手是(shi)可以用最少的模(mo)型(xing)表面实现(xian)更精美的画面效果(guo),能(neng)够兼(jian)顾加载速度和画面表现(xian)。而且这**步说到(dao)的制作模(mo)型(xing)除了 3D 模型之外(wai),还包括贴(tie)图(tu)、纹理、凹凸(tu)感和动画。现在我(wo)们有了一(yi)个互动的(de) 3D 模型了,任何人都可以(yi)把它(ta)拖(tuo)到 unity 或者是 UE 4 里,点一下发(fa)布,我们就(jiu)能(neng)得到了一个手(shou)机(ji)游戏,就(jiu)是这(zhei)个 3D 模型在手机里动的(de)完全(quan)没有难度。
第(di)二(er)步,何时显示这(zhei)个 3D 模型?如果(guo) 3D 模型随时随地都能在(zai)手机上显示(shi)的话,就不叫(jiao) AR 程(cheng)序了。 AR 的特点就是用手机摄像头捕(bu)捉周围的环境(jing),当手机找到触发信号之后(hou),才显(xian)示 3D 模型。比如售楼处(chu)的(de) 3D 户(hu)型图。做(zuo)这个项目(mu)的时(shi)候,设计师是先做(zuo)好了 3D 模型,但是隐藏起来给程序预置(zhi)(zhi)一张照片(pian)作为处罚信号(hao)。当用户打开手机(ji)摄(she)像头(tou)对着平面户型图(tu)扫(sao)描的时候,程序是在实(shi)时的对比,一直(zhi)在找(zhao)哪里的画(hua)面跟预置(zhi)(zhi)的图(tu)片(pian)是一样的。当摄(she)像头(tou)找(zhao)到预置(zhi)(zhi)图(tu)片(pian)的时候,一分析这两(liang)张图(tu) 80% 都(dou)一样,就是(shi)它(ta)了(le)。
于是(shi)就把制作好(hao)的 3D 模型从(cong)隐藏状(zhuang)态(tai)变(bian)成显示状(zhuang)态(tai),我们就看到了,但这(zhei)样只是控制 3D 模型的(de)显示(shi)和(he)隐藏。当模型显示(shi)出来之后,它和(he)周(zhou)围(wei)的(de)环境没(mei)有任(ren)何关系(xi)。
所以还需要第三步如何显示(shi)这(zhei)个 3D 模(mo)(mo)(mo)型(xing)(xing)。比(bi)如(ru)我(wo)们(men)的(de)(de)(de)手(shou)(shou)机(ji)(ji)摄像(xiang)头(tou)向下,我(wo)应(ying)该看到模(mo)(mo)(mo)型(xing)(xing)的(de)(de)(de)顶面,我(wo)的(de)(de)(de)手(shou)(shou)机(ji)(ji)向前我(wo)应(ying)该能看到模(mo)(mo)(mo)型(xing)(xing)的(de)(de)(de)正(zheng)面。如(ru)果手(shou)(shou)机(ji)(ji)在任何姿(zi)态(tai)下显(xian)示(shi)的(de)(de)(de)模(mo)(mo)(mo)型(xing)(xing)都(dou)是(shi)相同的(de)(de)(de)话,那(nei)就没有意思了。所(suo)以软件还要调用手(shou)(shou)机(ji)(ji)的(de)(de)(de)陀(tuo)螺(luo)仪,知道(dao)手(shou)(shou)机(ji)(ji)自己的(de)(de)(de)姿(zi)态(tai),从而推算出三维模(mo)(mo)(mo)型(xing)(xing)应(ying)该如(ru)何显(xian)示(shi)才是(shi)正(zheng)确的(de)(de)(de)。实际上(shang)这个姿(zi)态(tai)的(de)(de)(de)判断不(bu)仅仅是(shi)陀(tuo)螺(luo)仪,还有摄像(xiang)头(tou)、激光雷达(da)进行交叉验(yan)证。总之我(wo)们(men)知道(dao)手(shou)(shou)机(ji)(ji)能够判断出自己的(de)(de)(de)位置(zhi)和姿(zi)态(tai)就够了。你别以为(wei)程序员懂,他也(ye)只是(shi)会调用这个姿(zi)态(tai)的(de)(de)(de)结果而已。于是(shi)现在这个 3D 模型(xing)可以(yi)根据手机的姿(zi)态(tai)(tai)不(bu)同显(xian)示出符合物(wu)理(li)空间感的状态(tai)(tai)了(le)。
但是这样的 AR 软件没有纵(zong)深感。因(yin)为(wei)当实际物(wu)体出现在(zai) 3D 模型前面的时候,本来应该(gai)是遮挡住 3D 模型(xing)的,但是软件并不能(neng)够(gou)判断出有物体遮挡住了 3D 模型,软件甚至都不(bu)会有判断物体遮(zhe)挡(dang)的(de)这个过程(cheng)。所以如果(guo) 3D 画(hua)面(mian)显示在(zai)所有(you)物体(ti)前面(mian)时,还好(hao)如果有(you)物体(ti)出(chu)现在(zai) 3D 模型的前(qian)面,而 3D 模型又(you)遮挡住(zhu)了物体,那么就会让人觉(jue)得无比违和,于是(shi)就出戏了。
所以(yi)有(you)的团队在(zai)做 AR 程(cheng)序的时(shi)候,会把周围实际环境(jing)完整的建模出来(lai)。但(dan)是(shi)这个模型(xing)并(bing)不(bu)在(zai)程(cheng)序里显现(xian),它只是(shi)用来(lai)判(pan)断该显示的模型(xing)什么时(shi)候能看见(jian),什么时(shi)候会被遮挡。在(zai)触发 3D 模型显示的时(shi)候,也不是(shi)用预设(she)的照片跟摄像头的画面进行(xing)对比,而是(shi)用周(zhou)围环境(jing)的 3D 模型跟摄像(xiang)头的画面进行(xing)对比,这样操作就(jiu)会(hui)让 AR 程序看起(qi)来更真实(shi)。