Live2D 与 PSB 动画插件实战
为什么需要动态立绘
传统吉里吉里2 里,角色立绘是静态图片,切换表情要手动准备多张图(微笑一张、生气一张、惊讶一张)。这种方式有几个问题:
- 需要准备很多张立绘(表情 × 服装 × 姿势,可能几十张)
- 切换是「跳变」,没有过渡动画
- 工作量大,美术和脚本都要花时间
动态立绘用骨骼动画实现:一张源图上挂载骨骼,通过骨骼参数变形实现表情、头发飘动等效果。主流的两种方案就是 Live2D 和 PSB。
Live2D:商业化的主流选择
什么是 Live2D
Live2D 是日本 Live2D Inc. 开发的 2D 角色动画技术:
- 一张 PNG 源图 + 骨骼绑定 + 参数调节 → 可以动态变形的角色
- 支持眨眼、说话嘴型、头发/衣服飘动等效果
- 工业级精度,商业项目广泛使用(《明日方舟》《原神》等都有 Live2D)
- ATRI -My Dear Moments-(用 Kirikiri Z 开发)就是典型案例
在吉里吉里2 里用 Live2D
第一步:获取 Live2D Plugin
Kirikiri 社区有 Live2D 插件:
- 原版 krkr2:Live2D Cubism Plugin(支持 Cubism 2.x 的 moc 文件)
- Kirikiri Z:内置了新版 Live2D Cubism 扩展(支持 Cubism 3.x 的 moc3 文件)
- 需要在 Live2D 官方网站申请 SDK
第二步:模型文件
Live2D 模型交付时通常包括:
| 文件 | 作用 |
|---|---|
.moc / .moc3 | 模型本体(骨骼 + 变形网格) |
.model.json | 模型配置文件(纹理、参数等) |
.png | 贴图(角色立绘) |
.motion3.json | 动作数据(摇头、眨眼、说话等) |
.physics3.json | 物理参数(头发/衣服自然飘动) |
.exp3.json | 表情数据 |
第三步:代码调用
// 加载 Live2D 模型
var model = Live2D.load("live2d/hero.model.json");
// 设置表情
model.setExpression("smile");
// 播放动作
model.playMotion("wave");
// 绑定到图层
Layer.get(1).attach(model);
// 设置参数(比如眨眼)
model.setParameterValue("PARAM_EYE_L_OPEN", 1.0); // 完全睁眼
model.setParameterValue("PARAM_EYE_L_OPEN", 0.0); // 闭眼
第四步:自动眨眼和口型
// 启用自动眨眼(Live2D 2 插件)
model.enableAutoBlink(5, 3); // 平均 5 秒眨眼一次,每次 3 帧
// 语音播放时自动口型
Live2D.enableAutoLipSync(true);
Wave.playVoice("voice/hero_001.ogg"); // 引擎自动分析音频驱动口型
Kirikiroid2 的限制
Kirikiriroid2(Android 模拟器)不支持 Live2D 插件——因为模拟器只支持硬编码的内置插件。如果需要 Android 端的 Live2D,用 KrKr2 Next。
授权问题
- 个人/同人:免费(Live2D Free Edition),但模型体积限制、精度限制
- 商业游戏:需要向 Live2D Inc. 申请商业授权,按营收分成
- 直接从 Live2D 官方网站联系申请流程
PSB / PSD 分层动画:Photoshop 原生方案
什么是 PSB/PSD
- PSD(Photoshop Document):Photoshop 原生格式
- PSB(Photoshop Big):大尺寸版本,支持超过 2GB 的文件
两者都是分层格式——Photoshop 里一个文件的每个图层都能独立读写。
PSB 插件做什么
PSB 插件让吉里吉里2 能直接读取 PSD/PSB 文件的各图层,然后用 TJS2 代码控制每个图层的可见性、位置、偏移,实现动态效果:
- 头发飘动:上下几层头发图层交替偏移
- 眨眼:眼皮图层出现/隐藏
- 服装变化:不同服装图层切换
- 口型说话:嘴部几张图按顺序显示
模型文件组织
hero.psd ← Photoshop 源文件
├─ 线稿层
├─ 着色层
├─ 眼睛_眨眼_closed
├─ 眼睛_眨眼_half
├─ 嘴_说话_1
├─ 嘴_说话_2
├─ 嘴_说话_3
├─ 头发_前
├─ 头发_后
├─ 身体
└─ ...
代码调用
// 加载 PSD/PSB 文件
var psb = PSB.load("psb/hero.psd");
// 列出所有图层
var layers = psb.getLayerNames();
// → ["线稿层", "眼睛_眨眼_closed", "嘴_说话_1", ...]
// 控制图层可见性
var eyeLayer = psb.getLayer("眼睛_眨眼_closed");
eyeLayer.visible = true; // 闭眼
eyeLayer.visible = false; // 睁眼
// 图层偏移(实现飘动效果)
var hairFront = psb.getLayer("头发_前");
hairFront.offsetX = 10; // 往右偏 10 像素
// 渲染到图层
var composed = psb.compose();
Layer.get(1).drawImage(composed, 0, 0);
PSB vs Live2D 对比
| 对比项 | Live2D | PSB |
|---|---|---|
| 原始素材 | 一张 PNG + 骨骼绑定 | Photoshop 分层文件 |
| 动画精度 | 高(骨骼变形) | 中(图层切换/偏移) |
| 美术门槛 | 需要专门学 Live2D Cubism | 会 Photoshop 就行 |
| 代码复杂度 | 低(插件封装好) | 中(需要自己写图层控制逻辑) |
| 授权费用 | 商业项目要授权 | Photoshop 本身 + PSB 插件开源 |
| 社区支持 | Kirikiri Z 内置 | 第三方插件,更新不频繁 |
| Android 兼容 | KrKr2 Next 支持 | 可能不可用 |
选择建议:
- 商业项目 / 追求最高品质 → Live2D
- 同人 / 独立开发者 / 美术用 Photoshop 熟练 → PSB
社区资源
- Live2D 官方站:live2d.com(SDK 下载、授权申请、官方文档)
- Live2D Cubism Editor:官方模型制作工具(免费版够用)
- PSB Plugin:sourceforge 上有 Kirikiri PSB 插件的旧版本,或 GitHub 搜
kirikiri psb - ATRI Live2D 示例:keshe1.luckykeeper.site 展示了 ATRI 的 Live2D 模型(moc3 格式)
性能注意
- Live2D 动画比静态立绘 CPU 开销大很多,低端机可能掉帧
- PSB 图层多了也会卡,一般角色控制在 15~30 层
- 多个 Live2D 角色同时显示时开销加倍,只在需要时加载
总结
让立绘动起来是吉里吉里2 提升质感的最有效手段。Live2D 是工业级选择,PSB 是成本更低的替代方案。两者都需要插件支持,在 Kirikiroid2 上要注意兼容性。