灯光,粒子,动作
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 等,后续慢慢补充。