万圣节特惠:−40% Pixor 现价 $19.99 $11.99,截至 11 月 4 日,在 itch.io →

Dead Cells 的 3D 流程,一步一步来

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

免费库中的一名骑士,由 3D 渲染而成
一名像素画骑士的侧视图,挥舞着剑,由 3D 模型渲染成 96 像素
侧视,96 像素,一个库中的攻击动作
侧视骑士的一帧像素画
这一帧
同一帧的法线贴图,颜色表示每个像素朝向的方向
它的法线贴图,用于 2D 光照

流程,出自它的美术之口

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”。步骤如下:

  1. 先画像素画角色设定表。他先画出角色的基础 2D 设定表,再以它为底,在 3ds Max 中建出角色及其骨骼,并导出为 FBX。
  2. 模型非常简单。游戏里角色只有大约 50 像素高,花时间做精细的 3D 模型不值得。
  3. 小尺寸渲染,不做抗锯齿。一个自研程序以极小的尺寸渲染网格,不做抗锯齿,这就带来了像素化的外观。
  4. 像 2D 一样在关键帧上做动画。攻击动作采用逐姿势(pose-to-pose)方式:先用尽可能少的帧安排好关键帧的时间,然后才在某个关键帧之前或之后补中间帧,绝不在两个关键帧之间补。
  5. 每一帧都连同法线贴图导出。每一帧都保存为 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 模型可以保持得非常简单。

延伸阅读

在浏览器中免费用你自己的模型试试,或者获取完整版。

在浏览器中试用 获取 Pixor