分享自己关于2D俯视角游戏的图像深度管理思路



  • 做2D俯视角游戏的时候,不管是RPG、射击、ARPG,视觉上为了看起来自然,画面中的物体一般需要遵循下近上远的图像深度规则(越靠近画面下方,表示离镜头越近,层级越靠上,会盖住离镜头远的物体),但这个规则不像3D游戏,3D游戏是天然具有这个效果的,而2D游戏是需要靠自己用事件逻辑去造出这个效果的(这里指在唤境里)。
    59612e6f-0c42-4c4f-b513-ae2f1303e128-image.png
    f7582280-ce31-4710-babd-1181ea2c5ac2-image.png
    1094296e-3661-4bd5-a16f-13180b8ba2c4-image.png
    以上分别是RPG、射击、ARPG游戏的一些截图,可以看到都遵循了这一图像深度规则,而唤境也是提供了一个一键自动深度管理的基础功能的,不过效果比较有限,对于比较复杂的层级管理效果上比较有限。
    自动深度管理功能的官方教程:https://www.evkworld.com/learn/350
    官方的效果示意图:
    GIF-1567652485520.gif
    从效果上看,大多数情况下其实已经足够用了,那是什么情况下会没法使用呢?
    回到一开始说到的下近上远的图像深度规则,所谓的越靠近画面下方,转换为具体的依据就是图像的y坐标越大的意思,而自动深度管理功能的默认排序依据,也正是以此为准的(y坐标越大,层级越靠上,会挡住y坐标更小的图像),那么就有这么一个问题:假如我的人物整体构成是人物+武器这类由多部分图像共同组合的情况,这个自动深度管理功能还能发挥效果吗?
    分两种情况讨论:

    • 绑定在人物身上的武器没有转动角度的需求时:
      如果没有这种需求,通过修改武器图像的锚点到几乎跟人物锚点一致时(依据自动深度管理的依据,需要锚点的x坐标或y坐标略大于人物的锚点位置时才可行),才能勉强让这种复合型的图像构成,正常的参与到默认的自动深度管理功能中去,设置起来还是比较麻烦的。
      8540c4e5-46ba-43fa-b033-745feb209745-image.png
      499c0081-dae1-48bd-809e-bf858f819f9a-image.png

    • 绑定在人物身上的武器有转动角度的需求时:
      如果存在这种需求,显然上面的做法就没法使用了,因为图像的旋转是以锚点为圆心来进行旋转的,如果不把锚点设置在武器的握把处,旋转角度时就会变成像绕着人物的锚点转了(因为上述做法中人物和武器两者此时的锚点位置很靠近),而不是以武器握把处为圆心进行旋转。
      GIF.gif
      可以看到效果很怪异的,正常情况应该是类似下面这样,武器是在人物的“手中”旋转才对。
      GIF.gif
      但是如果照下面这样做,就会有一个新的问题,是关于深度管理中,图像锚点设置的合理性的。

    深度管理中,图像锚点设置在哪个地方更具合理性?
    关于这个,我们可以观察一下一开始那几个游戏截图。从透视的角度上看,仔细观察可以看到,物体底面的中心点作为锚点位置是比较合理的,对于人物来说也就是差不多在脚的位置上(或者说人物重心在地面上的垂直投影)。
    96a7274e-6248-41f9-b6db-3eb0d1f7f2e6-image.png
    为什么在这个位置是相对来说更具合理性的呢,你可以观察一下现实中,人站着时和物体的哪个面是处于同一个地面(平面)上的,是不是人的脚底和物体的底面,然后想象一下把视角移到头顶,判定人物和物体在这个地面(平面)的位置依据,是不是刚好就在人物和物体的重心处(例如下面这个纯俯视角的游戏)。
    90b32c82-e90e-4dcd-b0c3-5cf17771d1b9-image.png
    当然以上是基于现实情况来说的,而在引擎逻辑上,也有把锚点设置到该位置的合理性依据所在,那就是各种图像在尺寸上的差异,假如你的游戏设计中有一个巨大身形的boss,如果他的锚点也是默认的情况,那我方人物需要在boss的半个身体以上的位置,默认的自动深度管理效果下boss才能把我方人物挡住,过程中会出现下面这种人物好像飞起来一样的视觉效果,从视觉上显然是不合理的。
    d58e0491-9c06-4a92-a48d-8ac1ec177953-image.png
    当然,你可以专门调整boss的锚点位置来解决这种情况,不过到目前为止,应该多少可以感受到为了使用默认的自动深度管理功能,做了多少标准上不统一的操作了,而这些徒增工作量的操作,其实反而让默认的自动深度管理功能变得束手束脚了。

    自己动手做一个自动深度管理的功能如何?
    上面我们已经分析了很多关于深度管理的特点,那么能不能利用这些特点来自己做一个自动深度管理的功能应对这种“人物与武器绑定”的复合图像的情况呢?
    答案是可以的,但是具体好不好用,看各位自己的感觉,我这边只分享自己在这一块的思路:
    把复合图像分为“主体”和“附着物”两个部分,主体部分参与主要的深度管理,附着物只跟它所绑定的实例执行层级排序,具体操作如下:
    1、如上面所说,把这种复合式的图像分成“主体”和“附着物”两个部分,这里武器就是附着物(绑定物),人物本身就是主体(排序组)
    26a68630-616d-4321-ad35-80ae42e09cf5-image.png 8cf0e1c5-92fd-4015-8300-7f600290d861-image.png
    18ebf21c-f969-4708-8fd4-9f6c549de433-image.png
    2、然后把“主体”和“附着物”进行关联,这里用了绑定能力来制造这种关联:
    07d07f3e-6da2-41da-955d-9a2299633b59-image.png
    3、最后写深度排序的事件逻辑:
    父事件部分:对每个“主体”以y坐标大小为执行次序分别执行一次事件,这里是按升序执行,也就是y坐标越小(越靠近画面上方,也就是离镜头越远的感觉)的越先执行,执行的内容是移到图层组顶部,这样的话当执行到后面的“主体”实例时,后面执行的会反过来盖在优先执行的实例的上面(就像把扑克牌一张张叠在一起一样,先放的肯定是在牌组下面),这样就完成了“主体”的排序逻辑。
    子事件部分:在以上“主体”排序过程中,插入“附着物”对“主体”的排序,首先是选中当前正在遍历的“主体”所对应的“附着物”,然后这里因为武器是要显示在人物上面的,所以动作部分是将“附着物”移动到“主体”上方。
    aef3b981-cbd1-4c03-9b42-0bffd9e5ab16-image.png
    如此一来功能就完成了,效果如下,可以看到即使敌我双方都是有两个部分组成的复合型图像,也能作为一个整体参与到自动深度管理中:
    GIF.gif
    范例工程:图像深度管理思路.evk
    希望这篇思路分享能对正在制作俯视角游戏的朋友有帮助。
    游戏制作过程中总是免不了遇到许多难题的,我们的前辈当年可能要克服的问题可以说只多不少(那时运行游戏的硬件性能不像我们如今这么好),这里安利一个2002年的国产游戏——《刀剑封魔录》,这款游戏在图像深度管理这块做到几乎可以说是极致的程度,详细可以看看这个视频中,关于这款游戏图像深度管理难度的相关解说:
    https://www.bilibili.com/video/BV1kK41177dW