Dead Cells 的 3D 流程,一步一步来
Dead Cells 看起来像手绘动画,其实角色是用 3D 制作动画,再渲染成小尺寸像素画帧的。它的美术在 2018 中描述了这套方法。这里说明它做了什么、为什么有效,以及怎样用你自己的模型做到同样的效果。



流程,出自它的美术之口
2018 年 1 月,Motion Twin 的 Dead Cells 当时唯一的美术 Thomas Vasseur 工作了一年之后,为 Gamasutra(现在的 Game Developer)写下了 “Art Design Deep Dive: Using a 3D pipeline for 2D animation in Dead Cells”。步骤如下:
- 先画像素画角色设定表。他先画出角色的基础 2D 设定表,再以它为底,在 3ds Max 中建出角色及其骨骼,并导出为 FBX。
- 模型非常简单。游戏里角色只有大约 50 像素高,花时间做精细的 3D 模型不值得。
- 小尺寸渲染,不做抗锯齿。一个自研程序以极小的尺寸渲染网格,不做抗锯齿,这就带来了像素化的外观。
- 像 2D 一样在关键帧上做动画。攻击动作采用逐姿势(pose-to-pose)方式:先用尽可能少的帧安排好关键帧的时间,然后才在某个关键帧之前或之后补中间帧,绝不在两个关键帧之间补。
- 每一帧都连同法线贴图导出。每一帧都保存为 PNG 并附带它的法线贴图,这样游戏就能用简单的卡通着色器为它打光。
为什么行得通
这篇深度解析把原因讲得很直白。不需要重画每一帧。一套动画可以用在好几个模型上。要加一件盔甲,只需把它挂到 3D 模型上,不必重画每一帧里出现它的画面。旧模型和旧部件被重复利用来做新怪物,他称这是整个流程中最有用的技巧,节省了数百小时。
最重要的是,重来变得很便宜。当玩法程序员改了某个攻击的时机,或把武器放慢时,他只需在时间轴上移动关键帧,再渲染一次。手绘动画遇到同样的改动就得重画,往往干脆就不改了。
用 Pixor 做同样的事
Dead Cells 的渲染器是自研的,从未发布。Pixor 是一个独立的应用,对你手上的任何模型都能完成同样的步骤,无论是在 Blender 中绑定骨骼的、从 Mixamo 下载的,还是取自免费库的。
侧视摄像机。在场景步骤中,点击大纲里的南摄像机,把游戏设为平台跳跃:面朝右的侧视,只有一个朝向,向左时镜像。对带武器的角色,把宽和高提高到 64 或 96 像素;精灵尺寸指南可以帮你选择。
小而清晰地渲染。Pixor 在精灵自己的像素网格上绘制每一帧,默认没有抗锯齿边缘(--aa 0),颜色限制在调色板的色阶内,每一帧使用同一个每米像素数比例,轴心固定在一个像素上,所以角色不会晃动。
要的是外观,不只是小渲染图。Dead Cells 靠的是它的光照和卡通着色器。在风格步骤中,selout 预设提供光照色带、色相偏移的色阶和选择性描边,色带在帧与帧之间保持稳定,所以跑步动画不会闪烁。
逐姿势。在资产步骤中,精灵节点的保留帧数会从片段的姿势中挑出这么多智能帧,每一帧停留到下一帧为止。这就是逐姿势的取法:挥动的极限姿势保留,柔和的中间帧去掉。
法线贴图。把法线贴图加入导出(--export normal),或者加入灯光套件(--export light-kit)。灯光套件在 Godot、Unity 或 GameMaker 中根据法线为精灵打光,同时每个受光像素都保持在自己的色阶上。参见符合调色板的光照。
盔甲和武器。道具挂在骨骼上:手里的剑、头上的头盔(--prop sword.glb:hand.r)。每个片段都会带着它。
复用动画。其他文件中骨骼相同的片段用 --anim 添加,或者以模型旁边命名为 model@clip.fbx 的文件添加。动作库中的片段 lib:idle、lib:walk、lib:run、lib:attack 等适配人形骨骼,所以新角色不用先做任何动画,就已经有跑步和攻击了。
从命令行
上面的骑士,用构建脚本就是这样生成的:
pxr render knight.glb --preset selout --camera platformer --size 96 \
--clip lib:run --clip lib:attack --smart-frames 8 --export png,json,normal
重来也一样:在你的 3D 工具里改片段的关键帧,或者改这里的帧数,再运行同一行命令。每一帧都以相同的比例和相同的轴心输出,所以新的精灵表可以直接替换旧的。对一个模型文件夹运行同一行命令(pxr batch models/ --camera platformer --size 96),整个角色阵容就有了统一的外观。
再做修饰
Dead Cells 的帧是在 3D 中完成的。如果你想在上面加手绘细节,Pixor 会写出 .aseprite 文件,每个动作一个标签,重新渲染时会保留你画的图层;参见修饰,再重新烘焙。这项技术从 1990 年代到现在的历史,见预渲染精灵。
问题
Dead Cells 的角色用了 3D 模型吗?
是的。Motion Twin 的美术 Thomas Vasseur 根据像素画角色设定表,在 3ds Max 中建模并绑定角色,用 3D 制作动画,再把每一帧以小尺寸、不做抗锯齿的方式渲染出来,并附带法线贴图,正如他在 2018 年 Game Developer 的深度解析中所描述的。
Dead Cells 用的就是 Pixor 这个工具吗?
不是。Dead Cells 用的是自己的自研程序。Pixor 是一个独立的应用,做的是同一件事:输入 3D 动画,输出像素画帧,支持任何 glTF、FBX、OBJ 或 .vox 模型。
Dead Cells 的角色有多大?
深度解析中说,角色在游戏中的高度只有大约 50 像素,所以 3D 模型可以保持得非常简单。