Axıs
技能目录

04 · 角色与动画技术

04 · 角色与动画技术

独立游戏做不起 3A 的动画量,所以必须靠程序化动画 + 复用 + 相机调度补。 本文件的核心命题:如何用 20 条动画撑起一个看起来有 100 条动画的角色。

1. 骨骼与蒙皮预算

角色类型 骨骼上限 蒙皮权重/顶点 面数 LOD
主角 60–80 4 15k–30k 2(LOD1 骨骼减半)
精英敌人 50–70 4 8k–15k 2
普通敌人 40–60 4 5k–10k 2
群怪 20–30 2 1k–3k 1 + Impostor
Boss 80–120 4 30k–60k 2
NPC 40–60 4 5k–10k 2

骨骼预算比面数预算更重要——骨骼数直接决定 CPU 蒙皮成本。

骨骼分层(给 LOD 用)

Core(12–20 根)   : 骨盆/脊柱/头/四肢根 —— 任何距离都需要
Mid(+15–25 根)   : 小臂/小腿/手/脚 —— 中距离
Detail(+10–30 根): 手指/面部/披风/尾 —— 近距离

LOD 切换时按层剔除骨骼 → CPU 成本大幅下降。

2. 蒙皮方式选择

方式 优点 缺点 建议
CPU Skinning 通用,可做复杂逻辑 CPU 贵 主角/少量角色
GPU Skinning 便宜,可大量 无法回读骨骼位置(需额外处理挂点) 群怪/大量角色首选
顶点纹理动画(VAT) 极便宜,可渲染上万 内存换;无实时 IK 大规模群体(人群/鸟群)首选
烘焙动画到纹理 同 VAT

独立游戏建议:

  • 主角:CPU Skinning(需要 IK、挂点、程序化修正)
  • 敌人(< 20 个):GPU Skinning
  • 群怪/背景人群:VAT 或 Impostor

3. 动画资产的量化策略(省人天的核心)

用 20 条动画撑起 100 条

手段 说明 省多少
程序化 IK 脚踩地、手握物、看向目标 省掉大量适配动画
程序化叠加 上半身/下半身分层混合(边跑边射) 组合动画不用各做一套
镜像复用 左/右方向动画镜像 省 50% 方向动画
参数化速度 走路/跑步用同一条,改播放速度 + Blend 省 30%
程序化次级运动 头发/尾巴/披风/乳房/肌肉抖动 省掉大量手 K 帧
状态机复用 同一套 locomotion 给多个角色 省 70% 敌人动画
Additive 动画 受伤/疲劳/呼吸/瞄准 叠加层 省掉组合动画
程序化表情 骨骼驱动的脸(眉/眼/嘴) 省掉 50 个 blendshape

程序化动画三件套(独立游戏神器)

① 程序化步态(Procedural Locomotion)

  • 用两条腿部 IK + 骨盆上下/左右摆动曲线
  • 输入:速度、坡度、转向 → 输出:行走/跑步/急停
  • 好处:任意速度、任意坡度都能走,不需要做 8 个方向 × 3 个速度 = 24 条动画

② 次级运动(Secondary Motion / Spring Bone)

每根"软骨"是一个弹簧-阻尼系统:
  accel = (targetPos - curPos) * stiffness - velocity * damping
  • 用于:头发、尾巴、披风、耳、胸部、武器挂饰
  • 成本:极低(几根骨骼 + 一个弹簧更新)
  • 效果:立刻让角色"活起来"
  • 这是独立游戏性价比最高的角色技术之一

③ 程序化表情/身体语言

  • 用 5–8 根面部骨骼(眉 L/R、眼睑 L/R、嘴、颊)驱动表情
  • 用参数(Blink、BrowUp、MouthOpen、Smile)组合出表情
  • 替代 30–50 个 blendshape

4. 动画状态机与性能

问题 解法
状态机过于复杂 分層:Base(locomotion) / Override(动作) / Additive(状态)
每帧重建状态机 缓存;避免每帧 SetTrigger
动画过于频繁切换 加过渡时间 + 优先级;用 interrupt 规则
大量角色各跑一个 Animator 动画 LOD:远处角色降更新频率(每 2–3 帧更新一次)
动画压缩导致抖动 关键帧压缩阈值调低;骨骼位置精度保留
根运动不同步 明确 Root Motion 开关策略;物理与动画分离

动画 LOD 策略

LOD 更新频率 骨骼 混合
LOD0(近) 每帧 全部 全混合树
LOD1(中) 每帧 Core + Mid 简化混合
LOD2(远) 每 2–3 帧 Core 无混合,只播主循环
LOD3(极远) 每 5 帧 无骨骼(用 VAT 或静止) —

5. 2D 角色动画技术

方式 成本 适用 说明
逐帧(Frame-by-frame) 极高(资产量) 手绘风格、Cuphead 类 表现力上限最高
骨骼动画(Spine/DragonBones/Unity 2D Animation) 中 大部分 2D 游戏 可复用、可换装、可做 IK
网格变形(Mesh Deform) 中 需要柔体感 介于两者之间
切图 + 位移/旋转/缩放 极低 简单 UI、Q 版 便宜但僵硬
程序化(代码驱动) 低 简单生物、果冻怪 独立游戏友好

2D 动画资产量估算

一个角色动画资产量 ≈ 动作数 × 每动作帧数 × 方向数
逐帧:12 动作 × 12 帧 × 4 方向 = 576 张 → 极高
骨骼:12 动作 × 1 套骨骼动画 × 1 方向(可镜像/翻转)= 12 条 → 低

决策:除非美术坚持且预算充足,否则2D 独立游戏优先骨骼动画,再在关键动作(大招、死亡)上补逐帧。

6. 换装与变体(独立游戏省资产关键)

方式 适用 说明
模块化网格(换头/身/武器) 3D 需要统一骨骼与接缝处理
材质参数换色 3D/2D 最便宜
Palette Swap(调色板替换) 2D 像素 极便宜,复古风神器
叠加层(装备 mesh) 3D/2D 需要处理蒙皮跟随
Shader 变体(破洞/污渍/发光) 3D/2D 参数驱动
纸娃娃(Paper Doll) 2D 分层贴图叠加

敌人变体公式:

1 套基础模型 × (3 种配色 × 2 种体型 × 3 种武器) = 18 个视觉不同的敌人
实际资产:1 套模型 + 3 套贴图 + 2 套缩放 + 3 个武器

7. 面部与表情(按预算分档)

档 方案 成本
最低 无表情(靠身体语言 + 相机) 0
低 2D 面部贴图切换(3–5 张) 极低
中 6–8 根面部骨骼 + 参数驱动 低
中高 Blendshape 15–25 个 中
高 Blendshape 50+ + 眼球/口型 高(独立游戏一般不需要)

省法:大多数独立游戏的剧情表现力,靠相机调度 + 身体动画 + 少量表情就够了。 把预算花在"镜头语言"上比花在面部 blendshape 上更划算(见 domains/07)。

8. 动画与玩法的联通(TA 的职责)

需求 技术实现
动画驱动位移 Root Motion 或曲线驱动的位移量
动画事件(挥剑判定帧) Animation Event / Notify,必须可视化编辑
输入响应延迟 动画前摇裁剪(cancel window);输入缓冲
命中判定与动画对齐 用动画曲线定义"伤害窗口",不要硬编码帧号
动画取消 定义可取消区间(Attack → Dodge 在 X 帧后)
打击感 见 domains/03 的时间轴
角色与地形贴合 脚部 IK + 地面检测
角色与环境交互 IK 目标点(手扶墙、抓边缘)

TA 该提供的工具:动画事件编辑器、伤害窗口可视化、动画帧数/曲线查看器。

9. 常见坑

坑 表现 解法
骨骼命名不统一 换装/复用失败 强制骨骼命名规范 + 校验器
蒙皮权重爆炸 关节处扭曲 限制 4 骨骼/顶点;自动归一化
缩放为负 法线翻转 导出时应用变换
动画导入缩放不一致 角色大小差 100 倍 统一导出预设
根运动导致角色漂移 位置被动画覆盖 明确 Root Motion 策略
骨骼太多导致 CPU 高 大量角色时掉帧 骨骼 LOD + GPU Skinning
动画压缩导致手指抖 远处不明显,近处明显 关键骨骼提高压缩精度
换装穿模 装备与身体穿插 定义 Body Mask / 体积碰撞检查
面部 blendshape 内存高 内存爆 用骨骼表情替代

10. 自检清单

  1. 骨骼预算定了吗?主角/敌人/群怪分别是多少?
  2. 骨骼分层(LOD)做了吗?
  3. GPU Skinning / VAT 用上了吗?
  4. 程序化三件套(IK / 次级运动 / 参数化步态)用了几个?
  5. 动画资产量估算过吗?有复用策略吗?
  6. 动画 LOD 有吗?
  7. 骨骼命名规范有校验吗?
  8. 换装/变体方案定了吗?1 套模型能变几个?
  9. 动画事件(伤害窗口)可视化了吗?
  10. 面部方案与预算匹配吗?(别做过度的 blendshape)
  11. 2D 项目:逐帧还是骨骼?混合策略是什么?
  12. 关掉所有动画,角色还是那个角色吗?(剪影测试)

11. 一句话总结

独立游戏的角色表现力 = 1 套骨骼 × 程序化动画 × 参数化变体, 而不是"做很多动画"。 你省下的每一条动画资产,都是在给"次级运动"和"相机调度"这两种更便宜的表现力买单。