灯光,粒子,动作

ComfyUI 效果还是非常一般,暂时无法说服自己进行美术设计,这个工作量实在太大,于是只能继续堆功能。目前堆的这些功能,其实都是对标空洞骑士的基础能力而已,不影响正常叙事,也算不上照抄,毕竟都是 2.5D 类银河恶魔城游戏的基操而已。

灯光与粒子

之前一直没有加入灯光,其实对于 2.5D 游戏来说,所有素材都是一个平板贴图,没有什么凹凸的结构,所以灯光实际上只是“照亮了背景”而已,不过话虽如此,加入灯光之后整体氛围感还是不一样了。

粒子效果也是提升效果的一大杀器,但是 Godot 里好的粒子效果实在太少,不过现在只是 demo 阶段,并不需要过于复杂的粒子效果,能表达出基本想法就可以了。

由此经过了一些功能迭代。

  • 增加吊灯,火柱等场景元素
  • 增加火的粒子效果,开关门灰尘效果,跑步的灰尘效果等
  • 增加发射光波的粒子效果
  • 对吊灯,火焰增加光源,火焰的光源还有呼吸效果
  • 优化可击碎元素,用 voronoi 分割模拟碎片效果
  • 优化门的动画和体验

由此得到下面的效果。

骨架与动作

动作是游戏里非常重要的一环,每个角色,包括主角,npc,以及敌人,都需要一套动作系统。2D 游戏里的动作系统不外乎几种做法:

  • 手绘帧:每个动作都通过手绘帧
    • 好处是随心所欲
    • 坏处是工作量大,改动作,调整角色设定,甚至调大小,都非常麻烦,每一帧都要仔细调整,另外还无法做动作之间的插值和渐变
  • 骨架+贴图:每个角色有一个固定的骨架,然后将角色的四肢,躯干,头部,衣服等全部拆分为贴图绑定到骨骼上,这样骨骼运动的时候贴图跟着变换
    • 好处是方便保持一致性,替换什么都很方便
    • 坏处也很明显,动作变换可能会不太自然

由于暂时不太想投身美术设计,所以想先采用骨架的方案。市面上貌似并不能直接拿到 2D 动画骨架,估计这些事情对于美术来说成本很低,所以没有看到太多成熟工具。其实通过 AI 生成也是一种解法,不过问了不少人,自己也尝试过,甚至尝试过付费 AI,结果是生成的动作并不稳定,还不如用传统方法做。

于是我很快就搭建了一个骨骼编辑系统。初步想法是通过 mixamo 里面的动画来辅助生成骨骼。由此得到了下面的效果。

虽然效果看着不错,但是我很快发现了问题,目前的实现中,有几个约束的:

  • 一个角色只有一个骨架(保持角色一致性)
  • 骨架是刚体,不做拉伸(保持动画一致性)

这样的问题在与,mixamo 里面的参考图其实都是 3D 的,转到 2D 之后肯定带有透视。而 2D 游戏里有些地方是不能有透视的,比如双脚,必须稳定贴着地平面。

于是我在尝试 2D 的做法,直接让骨架做 2D 变换生成动画,这样不做刚体约束,让画面看起来依旧有立体感,同时保持 2D 的要求特性。

这个效果看起来还是可以的。但针对一个主角类型的骨架,可能会有大几十个动作,编辑量还是比较大。

动作树与插值

接下来需要一个状态机将不同动作连接起来。这里把“idle-run-jump”串起来了而已。增加两类链接节点:

  • 按键触发:监听按键时间,然后做状态转移
  • 插值:两个节点来回变换的时候所使用的插值算法

要达到这种效果其实还做了一些细微的调整的:

  • 增加脚的锚点,保证不同的动画都在地平线上有一个对齐方式
  • 增加单独缩放的能力,由于目前的骨骼不是刚性的,并且参考图也是截图,大小并不固定,在动画切换的时候容易看出大小变化(其实从录像来看目前也有,不过可以再进一步调整来解决的)

小结

距离复杂的动作系统还有一段距离,还需要继续完善 2D 动作编辑器。编辑器中的动作树只是为了方便调整动画大小,以及微调动作之间的插值,实际使用的时候,还是会使用引擎默认提供的方式。后续需要加上骨骼贴图,这样就能通过低廉的方式衍生很多占位 npc 了。

游戏流程本身也有很多基础能力需要支持,比如过场,动画,旁白,boss 等,后续慢慢补充。