先问一个问题:你有没有在虚拟主播直播间里见过那种“前一秒还在正常说话,下一秒突然捂脸大哭,头顶还冒出个‘不打米哄不好了’小气泡”的整活效果?第一次看到这种操作,很多人的第一反应是“这主播是不是偷偷换了立绘”,其实真相没这么玄乎——它就是一个 Live2D 表情挂件,通过 VTS 或 VUP 在直播时热键触发。
这篇文章不聊重度模型制作,而是从模型资源、文件结构、表情挂载到 VTS / VUP 实机调试,完整走一遍“捂脸大哭”整活挂件的落地过程。无论你是刚接触 live2d 的新人,还是已经在用 VTS 但想自己加表情的 VUP,这份教程都能直接照着抄。
整活挂件看起来“皮”,背后其实是表情参数联动、模型导入、热键绑定这一套标准流程。把这套流程跑通,你以后想要“开心到飞起”“当场裂开”“求打赏要哄”这类效果,就都只是换素材的事了。
1. 背景与核心概念
1.1 Live2D 到底是什么
Live2D 是一种 2D 动态图像技术,它不是真正的 3D 模型,而是把一张拆好的 2D 插画部件(头发、眼睛、嘴巴、手臂、衣服各有独立图层)放进软件里,通过参数驱动这些图层的位置、旋转、缩放和变形,让图片“动”起来。
用一个更通俗的理解:Live2D 模型本质上是一套“皮套 + 骨骼 + 触发器”。皮套是美术图层,骨骼是部件之间怎么联动,触发器就是你在直播软件里按下某个键后,模型会执行的表情或动作。
近几年 VUP(虚拟 UP 主)成为常态,大家口中的 live2d 模型资源也越来越多。很多人以为“下载一个模型文件就能直接用”,这个认知在 PC 端基本成立,但前提是你得知道去哪下载、用什么软件打开、配置文件要放在哪个位置。
1.2 VTS 与 VUP 有什么区别
VTS 全称 VTube Studio,是目前 PC 端使用率很高的 Live2D 虚拟主播软件,Steam 上可下载。它最核心的能力是“摄像头捕捉 + 参数热键触发”,特别适合苹果手机做面部追踪,也支持直接用鼠标点击、键盘按键触发表情和动作。
VUP 是国内开发者做的虚拟主播工具,定位更偏“一体化直播解决方案”。它不仅能加载 Live2D 模型,还内置了弹幕互动、礼物特效、多平台直播推流。对很多国内 VUP 来说,VUP 的上手成本更低,模型资源也更本地化。
标题里写的“VUP可用VTS整活挂件”,用大白话说就是:同一个 Live2D 模型,既可以导入 VTS 用热键触发“捂脸大哭”,也能放进 VUP 里配合弹幕互动使用。两者不冲突,关键在模型本身的参数和表情文件配置得对不对。
1.3 “挂件”在 VTS / VUP 场景中的真实形态
“挂件”这个词在直播圈里有两种理解:
第一种是物理挂件,比如头盔、猫耳、眼镜这类戴在模型上的部件。在 Live2D 模型里,它们本质是模型图层的一部分,跟随头部参数运动。
第二种是表情挂件,也就是本文重点——通过一个快捷键触发一组表情参数,让模型做出“捂脸大哭”这类夸张动作。这个“大哭”可以拆成几个部件:手部图层抬起来遮脸,嘴巴参数张到最大并向下弯曲,眼睛参数变成闭眼并挤压,再加上一个液滴或气泡图层冒出来。
所以“整活挂件”看起来是一个整体效果,实现时其实是“图层 + 两个参数动画 + 一个弹出图层”的组合。理解了这一层,你就能明白为什么有些模型能整活,有些模型却做不了——不是软件不支持,而是模型的部件拆分不够细。
2. 环境准备与版本说明
2.1 用到的软件与工具
完整的整活挂件链路会用到以下几类工具:
| 用途 | 软件/工具 | 说明 |
|---|---|---|
| 模型制作与编辑 | Live2D Cubism | 官方建模工具,也有免费版本 |
| 表情/动作制作 | Live2D Cubism Animator | 制作动画片段,通常与建模软件配套 |
| 直播挂载 | VTube Studio(Steam) | 支持热键触发表情,适合 PC 直播 |
| 直播挂载 | VUP | 国内虚拟主播软件,支持弹幕和礼物交互 |
| 文件检查 | 任意文本编辑器、Python | 用于检查模型配置文件引用路径 |
版本方面需要注意:Live2D 的模型格式发展到了 Cubism 3、Cubism 4,目前主流模型大多是 Cubism 4.x 或更新版本。VTS 对这些版本兼容得比较好,但 VUP 部分旧版本可能对 Cubism 4 模型支持不完整。实际使用时,先确认自己的 VTS 和 VUP 都是最新版本,再导入模型,不然容易出现“模型能加载但表情不触发”的诡异问题。
版本差异较大的时候,不要盲目追求某个固定版本号,核心思路是:模型导出为通用格式(.model3.json),然后在目标软件里测试,哪个版本能正常触发表情,就以哪个版本为准。
2.2 获取 live2d 模型资源的合规渠道
“live2d 模型资源”“live2d 下载免费”这类搜索词热度很高,但这里必须先提醒一个版权问题。
Live2D 模型资源的来源大致有三类:
- 官方示例模型:Live2D 官网会提供一批免费示例模型,适合学习参数和测试流程,授权范围明确。
- 模型分享社区:很多国内外画师会公开自己的模型,下载时看清楚授权说明,有些限制非商用,有些禁止二次修改。
- 定制模型:找画师按你的立绘拆图,再交给建模师制作,这种最灵活,但周期和成本都更高。
免费不等于任意使用。我见过不少 VUP 因为用了“免费但禁改”的模型,之后直播整活被原作者投诉。所以在你动手做“捂脸大哭”挂件前,请先确认模型的授权里是否允许修改表情和动作。
2.3 live2d cubism 安装包怎么选
如果你需要自己调整模型的表情参数,“live2d cubism 安装包”是绕不开的。Live2D Cubism 目前有 Editor 和 Animator 两个核心产品:
- Cubism Editor:负责模型本体的图层拆分、网格变形、参数绑定。
- Cubism Animator:负责制作基于模型的表情动画和动作片段。
大部分整活挂件的表情素材,其实是用 Cubism Editor 调了参数,再通过 Animator 导出成 .motion3.json 动画文件,再注册到模型目录里。如果你的需求只是“把别人做好的表情挂到 VTS 里”,可以不安装 Editor,但如果你想调整表情幅度,比如让“捂脸大哭”哭得更夸张,Editor 就必不可少了。
安装时注意:Cubism 的版本会影响导出模型能在哪些软件里使用。Cubism 4 导出的 .model3.json 结构是主流,尽量选择 4.x 及以上版本。
3. 核心知识拆解:模型的姿态、表情与参数
3.1 Live2D 模型文件结构
一个标准的 Live2D 模型目录里通常有这些内容:
MyModel/ ├── MyModel.model3.json ├── MyModel.moc3 ├── MyModel.physics3.json ├── MyModel.cdi3.json ├── MyModel.2048/ │ ├── texture_00.png │ ├── texture_01.png └── expressions/ ├── Default.exp3.json └── cry.exp3.json各个文件的作用:
.model3.json:模型入口文件,VTS / VUP 都先读它,里面记录了纹理、物理、表情、动作的引用路径。.moc3:模型数据主体,包含图层结构和网格信息。.physics3.json:物理效果,比如头发、胸部、裙摆的晃动。.cdi3.json:模型参数显示名,VTS 里看到的中文/英文参数名就来自它。expressions/目录:存放表情文件,扩展名通常是.exp3.json。motions/目录:存放动作文件,扩展名通常是.motion3.json。
如果你下载的 live2d 模型资源只有一张 PNG 图片,那它不是 Live2D 模型,只是一个普通的立绘,需要用 Cubism Editor 做完整套拆图和绑定后才能变成可用的模型文件。
3.2 表情(Expression)与动作(Motion)怎么区分
在 VTS / VUP 里,表情和动作是两个维度的东西。
表情文件.exp3.json描述的是“一组参数在某个时刻的值”。举例,“捂脸大哭”表情可以在表情文件里写成这样:
{ "Type": "Live2D Expression", "Parameters": [ { "Id": "ParamEyeLOpen", "Value": 0.2 }, { "Id": "ParamEyeROpen", "Value": 0.2 }, { "Id": "ParamMouthForm", "Value": 1.2 }, { "Id": "ParamBodyAngleZ", "Value": -5 } ] }其中ParamEyeLOpen控制左眼睁开程度,ParamMouthForm控制嘴型,ParamBodyAngleZ控制身体左右倾斜。这一段的意思是:眼睛基本闭上,嘴巴张开到较大,身体微微倾斜,模拟出大哭时身体抽动的感觉。
动作文件.motion3.json则是“一段时间内参数的变化过程”,比如从 0 秒到 1 秒内闭眼、抬头、捂脸,再到 2 秒时放下手。它是有时间轴的,更像短视频。
在 VTS 里,表情和动作都可以绑定到热键;在 VUP 里,两者也都可以绑定到弹幕指令。整活挂件通常是“表情文件 + 一个手部图层动画”的组合。
3.3 参数联动与热键触发原理
Live2D 模型的每个部件都绑定在某个参数上。以“捂脸”为例:
- 手部图层绑在
ParamHandAngleZ或专门的ParamHandRZ上。 - 当参数值从小变大,手部图层就会沿手臂根部旋转,从放下的位置抬到脸上。
- 眼睛参数同时变小,完成“闭眼”。
- 嘴巴参数同时变大,完成“大哭嘴型”。
VTS 的热键触发,本质是一次“参数值覆盖”。你按下按键,VTS 读取表情文件或动作文件里的参数值,临时覆盖当前参数,让模型表现出对应效果。松开按键后,参数回到摄像头捕捉的实时状态。
所以你会发现,一个整活挂件是否自然,核心在于表情文件里的参数取值范围是不是合理。如果ParamEyeLOpen本来就是 0(眼睛完全闭上的状态)到 1(完全睁开)的范围,你写成2.0,某些软件会直接忽略,模型就会表现异常。
4. 完整实战:制作一个“捂脸大哭”VTS 整活挂件
下面我们把流程拆开,每一步都给出可直接操作的方法。这里以一个通用模型为例,重点演示表情配置与直播软件绑定过程。
4.1 第一步:准备模型与表情素材
首先从你的模型目录中找到expressions目录,如果没有就新建一个。我们要在里面新增一个cry.exp3.json文件。
实际表情参数的 Id 需要从模型本身的参数列表里确认。如果你有 Cubism Editor,可以先打开模型,在“参数”面板里查看当前模型支持哪些参数,比如常见的:
ParamEyeLOpen 左眼睁开 ParamEyeROpen 右眼睁开 ParamMouthForm 嘴型 ParamCheek 脸颊 ParamHandRZ 右手旋转 ParamBodyAngleZ 身体前后倾斜如果暂时没有 Cubism Editor 也没关系,可以用文本编辑器打开.cdi3.json文件,里面会有参数 Id 列表。
先创建一个最基本的cry.exp3.json:
{ "Type": "Live2D Expression", "Parameters": [ { "Id": "ParamEyeLOpen", "Value": 0 }, { "Id": "ParamEyeROpen", "Value": 0 }, { "Id": "ParamMouthForm", "Value": 1 } ] }这个表情文件的效果是:闭眼、张嘴。它本身已经很接近“大哭”的面部状态,你可以先保存它,后续按需调整参数幅度。
4.2 第二步:在 model3.json 中注册表情
新建的表情文件不会自动被加载,必须在模型的入口文件MyModel.model3.json中登记。用文本编辑器打开model3.json,找到"Expressions"数组:
{ "Moc": "MyModel.moc3", "Textures": [ "MyModel.2048/texture_00.png" ], "Expressions": [ { "Name": "Default", "File": "expressions/Default.exp3.json" } ] }在其中加入一行:
{ "Name": "Cry", "File": "expressions/cry.exp3.json" }完整的 JSON 片段如下:
{ "Moc": "MyModel.moc3", "Textures": [ "MyModel.2048/texture_00.png" ], "Expressions": [ { "Name": "Default", "File": "expressions/Default.exp3.json" }, { "Name": "Cry", "File": "expressions/cry.exp3.json" } ] }这一步极其重要,很多人下载了免费 live2d 模型后自己加了表情文件,但忘记在model3.json里注册,导致 VTS / VUP 里死活找不到新表情。
4.3 第三步:在 VTS 中导入模型并测试表情
打开 VTube Studio,操作如下:
- 点击主界面的“模型”区域,选择“加载模型”。
- 选择包含
model3.json的模型目录。 - 模型加载后,右键模型或进入“表情(Expressions)”面板。
- 在表情列表里找到名为
Cry的表情。 - 双击试一下模型是否会闭眼张嘴。
如果模型有反应,说明表情生效。接下来绑定热键,让直播时一键触发:
- 打开 VTS 的“热键设置”。
- 新建一个热键,选择触发“表情”类型。
- 在表情列表中选择
Cry。 - 按下键盘上的某个键,比如数字键 7。
- 直播时按 7,模型就会做出“哭”的表情。
如果你希望松开按键立即恢复原表情,可以把热键模式设为“按住触发”;如果希望按下后保持大哭状态,再按一次取消,就设为“切换触发”。
4.4 第四步:在 VUP 中加载同一个模型
VUP 的操作路径类似,但在导入前建议先确认模型目录结构完整。VUP 对模型的扫描逻辑和 VTS 略有不同,容易出现“VTS 能加载,VUP 显示模型损坏”的情况,原因通常是缺少物理文件或纹理引用路径写错。
在 VUP 中加载模型:
- 打开 VUP,进入“形象”或“虚拟形象”页面。
- 选择“导入模型”,点击“添加模型”,选择模型目录。
- 如果目录里有正确的
model3.json,VUP 会自动解析。 - 导入后,去“表情”面板查看
Cry是否出现在表情列表里。
VUP 最大的优势是支持弹幕指令触发表情。你可以在弹幕设置里添加一条:
指令:大哭 动作:Cry这样观众在直播间发送“大哭”,你的模型就会自动做这个表情。这也正好解释了标题里“不打米哄不好了”的玩法:观众在弹幕里发“哄好了”时,触发另一个恢复表情,形成一个互动整活流程。
4.5 第五步:写一个脚本检查模型文件完整性
模型文件多了之后,经常出现引用了文件但实际文件不存在的问题。这里提供一个简单的 Python 脚本,用来检查model3.json里引用的所有文件是否真的存在于目录中。
import json from pathlib import Path def check_model(root_dir: str): root = Path(root_dir) model_json = root / "MyModel.model3.json" if not model_json.exists(): print("错误:未找到 model3.json 文件") return with open(model_json, encoding="utf-8") as f: data = json.load(f) refs = [] if "Moc" in data: refs.append(data["Moc"]) for texture in data.get("Textures", []): refs.append(texture) for physics in data.get("Physics", []): refs.append(physics.get("Id", "")) refs.append(physics.get("File", "")) for exp in data.get("Expressions", []): refs.append(exp.get("File", "")) for motion_group in data.get("Motions", {}).values(): for motion in motion_group: refs.append(motion.get("File", "")) missing = [] for ref in refs: if not ref: continue if not (root / ref).exists(): missing.append(ref) if missing: print("以下文件缺失:") for m in missing: print(" -", m) else: print("所有引用文件均存在,模型目录完整") if __name__ == "__main__": check_model(".")运行方式:
python check_model.py把脚本放到模型目录下,它会依次检查.moc3、纹理、物理、表情、动作文件是否存在。对于刚接触 live2d 模型资源的新人来说,这个脚本能省下大量“模型加载失败但不知道哪里缺文件”的排查时间。
4.6 预期效果与进一步整活
完成以上步骤后,你在直播软件里按一下热键,模型就会进入闭眼、张嘴的大哭状态。如果模型本身有手部图层且绑定了手部参数,你可以在表情文件里加入手部旋转参数,把它改成完整版“捂脸大哭”:
{ "Type": "Live2D Expression", "Parameters": [ { "Id": "ParamEyeLOpen", "Value": 0 }, { "Id": "ParamEyeROpen", "Value": 0 }, { "Id": "ParamMouthForm", "Value": 1.2 }, { "Id": "ParamHandRZ", "Value": -1.8 } ] }ParamHandRZ的取值是根据模型默认参数范围来的,通常左手或右手都有一个旋转参数,值是负的还是正的要看部件绑定方向。第一次设置时可以分几个档位测试:-0.5、-1.0、-1.8,观察手有没有抬到脸部区域,找到一个“刚好遮住眼睛又不会穿模到脸外面”的值。
5. 常见问题与排查思路
做 Live2D 整活挂件时,高频问题集中在导入失败、表情不触发、参数异常这三类。下面列成表格,方便快速对照排查。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| VTS 加载模型时提示“Model Not Supported” | 模型版本过旧或文件损坏 | 确认 .moc3 是否完整,尝试用 Cubism Editor 重新导出 |
| VTS 里看不到新加的表情 | 忘记在 model3.json 中注册表情 | 打开 model3.json,检查 Expressions 数组中是否添加了表情文件路径 |
| 表情能触发但表情幅度太小 | 参数值超出模型定义范围或参数 Id 写错 | 用 Cubism Editor 查看参数的合理范围,把 Value 调整到接近上下限 |
| 表情触发后模型“脸歪” | 不同表情文件之间参数冲突 | 每个表情文件只写入需要变化的参数,不需要变化的参数不要填写 |
| VUP 加载模型失败 | 模型目录缺 physics 文件或纹理路径错误 | 用 4.5 节的脚本检查引用文件完整性 |
| 手部图层穿模到脸里 | 手部旋转参数方向和幅度不对 | 分档测试 ParamHandRZ 的正负值,找到合适区间 |
| 触发热键后无法恢复原表情 | 热键模式设置成切换但只按了一次 | 在 VTS 热键设置中检查触发模式,改成“按住触发”或绑定恢复表情热键 |
| 直播时按热键没反应 | 热键被其他软件占用 | 换一个直播时不会冲突的键,例如数字键或 F 系列功能键 |
这里单独说一下参数冲突问题。Live2D 的表情文件机制是“覆盖参数”,如果两个表情文件同时对ParamEyeLOpen赋值,后触发的表情会覆盖前面的值。所以整活表情的配置原则很简单:不要每个表情都写满所有参数,只写这个表情必需的那几个。
遇到“模型加载失败”时,最快的方法是先用文本编辑器打开model3.json,把里面的路径和真实目录逐个比对。80% 的问题都是路径大小写不一致、文件后缀写错、或者漏了斜杠。
6. 最佳实践与工程建议
6.1 模型目录的命名与结构规范
直播软件对模型目录的识别方式基本一致,它只看model3.json的位置,把该文件所在目录当作模型根目录。因此:
- 模型目录名不要随意改,除非你同时修改
model3.json里的相对路径。 - 表情文件统一放
expressions/,动作文件统一放motions/。 - 纹理文件单独放一个目录,避免模型文件堆在根目录,目录一多非常容易乱。
- 所有路径必须使用相对路径,不要用绝对路径。
- 文件名中避免中文和空格,Windows 下中文路径偶尔会导致纹理加载异常,用英文和数字最稳。
6.2 表情文件如何做得可维护
表情文件的价值在于可复用。如果你为某一场直播做了一个“大哭”表情,下次在另一个模型上用不到,那就等于白做了。所以更推荐的做法是:把表情内容按“情绪”维护成一套公共文件,然后在不同模型里复制目录并注册。
表情文件命名的建议是:
emo_cry.json emo_laugh.json emo_angry.json emo_shy.json用统一前缀emo_区分表情文件和动作文件,方便在直播软件里按首字母快速查找。不要用表情1.json、新建文件 2.json这种命名法,因为 VTS 的表情列表里会原样显示文件名,直播时靠模糊记忆找人会很崩溃。
参数范围方面,推荐把常用参数的默认范围打印成一张表贴在电脑旁边:
ParamEyeLOpen 0 ~ 1 ParamEyeROpen 0 ~ 1 ParamMouthForm 0 ~ 1 ParamBodyAngleZ -30 ~ 30手动编辑表情文件时,先看参数的上下限,再赋值。这能避免大部分“表情幅度不对”的问题。
6.3 直播性能与并发触发问题
整活挂件看似简单,但直播时会跟摄像头捕捉参数同时运行。如果表情文件里的参数值写得太极端,或者动作文件时间轴太长,模型会出现“抖动”“抽搐”或延迟。
建议遵循几个经验值:
- 单个表情文件不要包含超过 10 个参数,参数太多会导致表情切换瞬间有跳变。
- 动作文件单个时长控制在 2~5 秒,太长会影响后续表情触发。
- 直播时不要同时按多个表情热键,多个表情叠加会互相抢参数,模型表现不可控。
- 高帧率直播时,如果模型带大量物理效果,优先关闭不必要的 physics3 物理参数,减少 GPU 负担。
6.4 版权与商用风险控制
现在网上的 live2d 模型资源很多,搜索“live2d 下载免费”也能找到大量站点。但我建议在下载前养成看授权说明的习惯,重点关注三件事:
- 是否允许修改模型:有些模型禁止任何修改,你想加“捂脸大哭”表情可能违反授权。
- 是否允许商用:很多免费模型只允许个人日用法,不允许直播收益、视频收益等商用场景。
- 是否可二次发布:有些模型禁止重新打包上传分享。
如果你是在做企业直播、品牌虚拟 IP,更需要谨慎。任何时候都不要把付费模型共享给他人,也不要换个文件名就声称是自己的原创模型。尊重模型作者,这个圈子才能有更多免费资源可玩。
7. 下一步可以怎么玩
到这里,你已经掌握了 Live2D 整活挂件的完整链路:理解模型目录结构、创建表情文件、注册到 model3.json、在 VTS / VUP 中绑定热键或弹幕指令、检查文件完整性。
这套基础能力至少有三个延伸方向:
第一个方向,把表情从“静态表情”升级成“动画动作”。在 Cubism Animator 里做一套“捂脸大哭”的完整动画,导出为 motion3.json,注册到Motions数组里,VTS 就能播放带过程的动画,而不是从正常脸直接跳到大哭脸。
第二个方向,把弹幕互动和礼物联动起来。VUP 支持弹幕指令触发表情,比如观众发送“求哄”就触发大哭,发送“乖”就触发开心表情。这样就实现了标题那种“不打米哄不好了”的互动效果。
第三个方向,自己做模型资源。从拆图开始,把一张插画拆成头发、眼睛、嘴巴、手、身体等图层,再到 Cubism Editor 里做网格绑定,最后导出模型。这条路需要的时间最长,但收获也最大,做完之后你会对参数联动有真正的体感,不再是被动地使用别人做好的文件。
如果你现在手里已经有一个模型,不妨先按 4.2 节的步骤,做一个最简单的表情文件,跑通全流程。先成功一次,再去追求“大哭很真实”“手部动作很顺滑”。技术上真正难的不是那一个参数,而是面对一个陌生的模型目录时,你能快速找出问题在哪。有了这篇文章的基础,这一步你已经可以做到了。