由于了解到《纪念碑谷》是用Unity进行开发的,本着个人兴趣和对这个游戏的热情,我大致地了解了一下《纪念碑谷》的开发流程和技术实现,在这里和大家分享一下。包括光影的效果和透视的远近,这些问题在下面的技术介绍中也会得到解答。 本回答将会大致解答《纪念碑谷》是如何在技术层面上实现这些不可能,从而让人们在视觉上获得完美的体验的(如何通过技术欺骗你们的视觉的)。资料来源是ustwo monument valley team的技术主管应Unity官方邀请对游戏开发者做的presentation 由于主讲人讲得比较概括(不愿透露过多技术细节),以下答案还会加入一些我个人的分析,如有错误有请大神们指正。个人总结:《纪念碑谷》其实就是通过将人们从2D平面看见的路径,在3D的游戏场景中加以实现。人们看见的效果其实只是3D游戏场景的一个投影(Projection)。 下面的内容我将配合图片进行讲解~多图预警!! 主讲人一上来就摆上了潘洛斯三角形,从别的角度看实物是一个奇形怪状的东西,可是如果从特定角度看过去,就变成了那个神奇的三角形~这就是monument valley team开发秉承的思想:See things in different angle!同时也是技术上实现的核心。 然后可以看到,在Unity的游戏场景(左图)里其实也是这么个奇怪的几何体!可是调好摄像机的角度(右图)效果就出来了 于是问题就来了。我们在玩游戏的时候看到的效果感觉艾达是在一条路上走的(右图中艾达可以从三角形最上面的角通过中间的角到达下方的角)。可是在3D的场景中两条路(左图中根本木有中间的角)根本没有交汇,那艾达是怎么走过去的呢? 答案就是对路径进行标记,如下图 由图中我们可以看到,可供艾达行走的矩形路面都用Node进行了标记,Node由蓝色的Boundary Point和绿色的Connection Indicator。我个人认为游戏程序的寻路算法是基于Node组成的路径网络的,而通过对Connection Indicator进行处理,可以决定不同的Node之间是否相连。通过这种方法,技术人员可以轻松地根据视觉效果在3D场景中标出路径,下面是效果展示: 图中可以看见两个实际上分离的Connection Indicator,换个角度后就重合了。 有些同学会有这样的疑问:就算视觉上重合了,可是艾达的位置应该也有改变呀,远近不同会导致物体大小在视觉上的变化,可是怎么完全看不出来? 我来告诉你,其实艾达的位置并不是一直位于方块的上面,只是让你看着像而已...
三维和二维都能做到。 前者是一个场景做一个三维建模,女孩有四种运动轨迹对应四个视角,然后路虽然没有连起来,但是让主角用走的动作飞过去就行(甚至不能算作飞,因为这个游戏明显没有重力,不存在跳跃也就不存在飞翔); 后者是一个场景做四个二维场景(可能更多),旋转后的场景都是独立并且连接在一起的,人物行动和其他二维游戏一样。 前者是用不带物理属性——比如重力的场景让人脑产生错觉,也就是欺骗常识,因为人脑会默认认为断裂的地方应该掉下去,没掉下去的就一定是连起来的,殊不知在不加重力场的时候飞行竟然如此容易; 后者是单纯的视觉欺骗,比如单一关卡视角切换后其实是换了一个场景(scene),但是它用场景转换时的衔接和不同场景相似的背景(比如同一类型的无限回廊就用了纯色背景,让人无法区分物体旋转和空间旋转),让人以为这是一个三维的场景旋转了,其实它根本就切换了场景。 说一个有意思的事情,《蒙娜丽莎的微笑》,蒙娜丽莎背后其实是一个墓碑,它被蒙娜丽莎遮住了而已,为什么一个女人在墓碑前面微笑会让人觉得美呢?因为墓碑看不见啊! 怎么样能让人相信这句话呢?先画一张侧视图和一连串过渡视角图片,然后把这个视角转换的过程做成动画,给一个人播放,他就会以为正视图和我们做的侧视图是一个场景了。
说了这么多理论不如实际动手做一个,首先要解决3d空间内的视觉错觉表现,也就是说,要让模型是具有视觉悖论的说服力的,看起来真实,但又完全是错误的空间结构。 这是我用3dmax软件直接建模后渲染得到的图,几乎没有任何ps,其中至少有3处明显的空间矛盾点,而造成这样结果的原因是在于某些不同空间位置的模型当处于这个唯一角度的时候,看起来就像是连起来的,而且模型上也做了一些手脚欺骗了前后空间顺序的理解。 当然有人已经给了官方视频,里面有很详细的关于角色坐标是如何改变的寻路机制,所以实际上就是把整个寻路部分在引擎里面编辑好,矛盾空间的角色转移连接做好,其实实现起来就很简单了。