纪念碑谷游戏的空间结构是如何设计的

北京治疗白癜风最好的医院 https://wapjbk.39.net/yiyuanfengcai/yyjs_bjzkbdfyy/

转载请注明出处

阅读是一种智慧,转载是一种动力!

分享是一种美德!传递学习的快乐!

喜欢这篇文章,   具体问题:这个游戏有着像埃舍尔的画一样有着空间结构的矛盾,如果是2D游戏,艾达可以行走的路线、建筑结构变化的过程是如何绘制的?如果是3D游戏,那么如何对这种违背物理定律的矛盾空间进行建模?以前有一个叫“无限回廊”的游戏和他类似,这种游戏的空间是如何实现的?

文章一:《纪念碑谷》是如何欺骗人们的视觉的?

文/杨州

  本人研究生程序猿一枚,毕设做的Unity游戏设计,最近刚刚玩通了《纪念碑谷》,被这款完美的作品震撼了。由于了解到《纪念碑谷》是用Unity进行开发的,本着个人兴趣和对这个游戏的热情,我大致地了解了一下《纪念碑谷》的开发流程和技术实现,在这里和大家分享一下。   本回答将会大致解答《纪念碑谷》是如何在技术层面上实现这些不可能,从而让人们在视觉上获得完美的体验的(如何通过技术欺骗你们的视觉的)。资料来源是ustwomonumentvalleyteam的技术主管应Unity官方邀请对游戏开发者做的presentation   由于主讲人讲得比较概括(不愿透露过多技术细节),以下答案还会加入一些我个人的分析,如有错误有请大神们指正。   OK,废话说了好多,下面是干货。   个人总结:《纪念碑谷》其实就是通过将人们从2D平面看见的路径,在3D的游戏场景中加以实现。人们看见的效果其实只是3D游戏场景的一个投影(Projection)。   下面的内容我将配合图片进行讲解~多图预警!!   这个是presentation的主题:创造不可能!由于本答案侧重介绍技术原理,presentation中涉及测试,用户体验和关卡设计等不相关内容不予提及。

  主讲人一上来就摆上了潘洛斯三角形,从别的角度看实物是一个奇形怪状的东西,可是如果从特定角度看过去,就变成了那个神奇的三角形~这就是monumentvalleyteam开发秉承的思想:Seethingsindifferentangle!同时也是技术上实现的核心。

  然后可以看到,在Unity的游戏场景(左图)里其实也是这么个奇怪的几何体!可是调好摄像机的角度(右图)效果就出来了

  于是问题就来了。我们在玩游戏的时候看到的效果感觉艾达是在一条路上走的(右图中艾达可以从三角形最上面的角通过中间的角到达下方的角)。可是在3D的场景中两条路(左图中根本木有中间的角)根本没有交汇,那艾达是怎么走过去的呢?   答案就是对路径进行标记,如下图

  由图中我们可以看到,可供艾达行走的矩形路面都用Node进行了标记,Node由蓝色的BoundaryPoint和绿色的ConnectionIndicator。我个人认为游戏程序的寻路算法是基于Node组成的路径网络的,而通过对ConnectionIndicator进行处理,可以决定不同的Node之间是否相连。通过这种方法,技术人员可以轻松地根据视觉效果在3D场景中标出路径,下面是效果展示:

  图中可以看见两个实际上分离的ConnectionIndicator,换个角度后就重合了。   有些同学会有这样的疑问:就算视觉上重合了,可是艾达的位置应该也有改变呀,远近不同会导致物体大小在视觉上的变化,可是怎么完全看不出来?   我来告诉你,其实艾达的位置并不是一直位于方块的上面,只是让你看着像而已...请看下图:

  由图我们可以知道艾达的位置并不是单纯地在方块上面,而是针对用户的视角进行了偏移。可是这些在技术上怎么实现呢。我推测是通过Node来实现的,由于Node是一个圆心处于矩形单位正中心的球体,通过预先设定艾达通过特定Node时离圆心的距离,从特定的角度看就像在大路上行走一样。

  我这么推测的原因是主讲人在presentation中明确表示艾达通过曲面的时候,是通过调整艾达和Node圆心的相对倾斜度来实现走曲线的效果的。

  而且Node还决定了艾达通过它的时候采取什么动画,这就是他们实现爬梯子和走楼梯的动画的原理。当一个梯子同时可以当做地面(左图路径)或者梯子(右图路径)的时候他们还头疼了一阵,后来通过在这种功能重叠的地方放置多个Node,然后通过艾达的位置来决定具体哪一个Node有效。

  由此可见艾达的行走是由基于标记的寻路系统决定的,用于标记的Node还储藏了特定的渲染方式。通过定义特定的位置,旋转角度以及动画,来保证艾达行走的真实效果。   以上为大概的原理!看起来貌似是比较简单,可是据说实际实现起来问题一大堆。   上面说了通过设置ConnectionIndicator可以标记哪些节点相互连接,可是实际玩得时候有些情况还需要对某些点进行闭塞,如下图

  在这个图里,通过视觉我们可以发现当艾达位于左上角的时候,她是三个地方都可以去的,寻路算法必须   通过人们的点击输入来选择性地闭塞掉一些ConnectionIndicator,如下图。

  然后下面是NPC的路径图,直接上不同的Node,各走各路哈~

  这些就是presentation关于纪念碑谷技术设计部分的全部内容啦。最后上一张完整关卡的实际效果与视觉效果对比图!

文章二:空间结构设计设想:portal的传送的实现

文/吴伟迪

  《纪念碑谷》空间结构复杂,完全不受物理定律的制约,这样的空间结构是如何建模和实现的呢?不是业内人士(虽然很想入行),也没有真正做过一款游戏,但感觉这个问题挺有意思的,试着说说自己的推测和思路吧,求各位指教。   首先我设想如果我要做一个单独的这样的关卡,可能会用什么方式来实现这个效果。最直接的恐怕就是用类似portal的传送的方式了,也就是说实际的三维空间并没有改变,只是把人物用「传送门」传送到了相应的「看起来连在一起」的格子而已。也就是这样:

  所以说,要实现这个效果,只要在特定的两个格子之间设定一个规则:当画面转动到某个角度时,A和B这两个格子之间的传送门变为可用,就行了。在此基础上去计算路径的话,应该就没问题了。但是,虽然纪念碑谷中能旋转的角度只有四个,但那么多关卡,如果一对对格子来设定传送规则的话也太麻烦了。所以这肯定有一个通用的规则才对。   于是,经过对地铁站台地砖的一番研究后,我把格子放到坐标系中,从最简单的情况考虑,就得出了下面这个最基础的坐标图:

  灰色是一个柱子,橙色的两个格子分别是处于第二层和第三层。对应的蓝色是从柱子上这两个橙色格子能够走到的格子。(只能向后方走,因为前方这两个格子会被柱子的侧面挡住)   第二层的(1,1,2)格子能走到的是第一层的(2,3,1)和(3,2,1);   第三层的(1,1,3)格子能走到的是第一层的(3,4,1)和(4,3,1)以及第二层的(2,3,2)和(3,2,2)   于是归纳一下,容易得出这么一个公式A:   当角色处于格子(x,y,z)时,它向后方两个方向能走到的格子分别是(x+n,y+n+1,z-n)和(x+n+1,y+n,z-n)。(n=0)   然后我很惊喜地发现当n=0的时候就正好是在同一层走动的情况,于是我们目前就有了一个挺不错的「万能移动公式」了。   不过目前这个公式还只能向后面的两个方向走,于是我们把公式整理一下,把xyz定在后方的格子上,把公式反一反,就得到了向前走的公式B:   当角色处于格子(x,y,z)时,它向前方两个方向能走到的格子分别是(x-n,y-n-1,z+n)和(x-n-1,y-n,z+n)。(n=0)   同样地,当n=0的时候正好是同一层走动的情况。   于是,现在我们就凑齐一套在同一个视觉角度下角色在方块的正上方走动时的「万能移动公式」了!   转动视角和侧面方向的格子主要是xyz轴的转换问题,但基本的道理应该是相近的,我就不(lan)再(de)赘(ji)述(suan)了。   没做过游戏开发,仅凭脑洞写了这么多,不知道有没有硬伤和图样图森破的地方,求打脸求指教~

文章三:2D方法去实现一个类似的Demo

文/伍一峰

  demo里面我用的是2d的方法:

  人物行走的路线和背景是分开的。

  也就是说,背景如何荒谬,都不会影响到路线

  ——一般游戏都是这样做的,而关键之处就在于,

  路线和背景的改变需要配合得天衣无缝,造成一种“悖论式”的错觉。   demo中“悖论式”的背景,其实是由三张图片组成的,

  在图一中可以看到,“悖论”主体中间有一条细微的分割线,没错,是两张图片Upper和Lower组合而成的。这样,MovingCube就可以插到两者中间,形成空间感。

  1.在没有触发世界改变结构的时候,可行走路径是图中的白色部分。

  2.触发世界改变之后,就更新路径。

  3.配合上改变了的建筑结构,例如位置变化、渲染顺序等等,就形成了所谓的空间的悖论。

  但是根据《纪念碑谷》的游戏视频,

  它有许多的方块旋转、升起、场景颠倒等等的动画,应该是3d游戏无疑。

  只是它将游戏的视角设为isometric而不是perspective,也就是没有“远近”

  ——因为我们知道在真实的三维世界中是不可能存在这种“彭罗斯阶梯”的[1]。

  这样的话,上面提到的方法就可以运用了。

  perspective镜头是这样的

  isometric镜头是这样的

  当然,上面的方案离《纪念碑谷》达到的高度,还差得很远。

文章四:USTWO提供的一个BehindtheScenes视频

  原文链接:


转载请注明:http://www.aierlanlan.com/grrz/364.html