NarraLeaf
模型运行时

模型运行时

Studio 中的 Live2D 与 Spine 角色:绘制运行时的作用、由使用方提供的原因,以及它在项目中的位置

视觉小说中的角色大多是图片:一张成品差分对应一个姿态,或一组按标签切换的图层。这两种角色由 Studio 自行绘制

Live2DSpine 角色不是图片,而是带绑定的模型,自带动画系统,由运行时负责绘制。运行时是模型格式厂商编写的渲染器。Studio 不包含任何运行时,也不代为下载。运行时由使用方提供,每个项目一次;安装后,Studio 将该角色按普通角色处理:它按脚本站位、随摄像机运动、由剧本控制姿态,并在读档后正确恢复

运行时由使用方提供的原因

Studio 是公开源码的免费软件,两个渲染器都不能包含在其中。Live2D 的协议禁止以「源码分发且可被第三方修改」的许可覆盖其代码;Spine 的协议要求使用含有其运行时的产品的每一位用户各自持有付费的 Editor 授权。因此 NarraLeaf 不将任何一个渲染器随 Studio 分发;代为下载同样构成分发行为

Studio 负责渲染器之外的全部环节:

Studio 负责使用方负责
角色本身:站位、图层、变换、不透明度、存档条目从厂商处获取运行时,并接受其许可协议
将运行时安装进项目并校验承担所发行游戏的许可义务
读取模型,填充其动作、表情与参数提供模型本身
将运行时打包进构建产物

实际结果是,渲染器由发行方在其构建的游戏中分发

商业发行前请阅读厂商条款。Studio 在安装时会列出要点,但不能替代厂商自身的许可协议,NarraLeaf 也不是该协议的当事方

运行时的存放位置

每个运行时占用项目内的一个目录:

index.js
README.md

目录名即运行时名称:角色引用的是它,引擎在运行期解析的也是它。index.js 是唯一必需的文件;缺少该文件的目录会被报告为安装不完整,并在打包时跳过

运行时属于项目内容而非缓存,会被复制进每个构建产物。Live2D 的运行时文件约 1 MB,渲染器编译在其中

两家厂商的条款涵盖的都是「在发行的游戏中再分发其渲染器」,不涵盖公开的源码仓库。请将 runtimes/puppet/ 排除在你公开的仓库之外;没有它的机器重新安装一次即可

管理运行时

项目 → 运行时 列出 Studio 支持的全部运行时,以及在当前项目中发现的运行时及其状态:

项目 → 运行时列出 Live2D Cubism 与 Spine,两者都显示为本工程未安装
状态含义
已安装index.js 存在且可加载
已安装但不完整目录存在,但缺少 index.js。安装未完成,或解压内容有误
本工程未安装目录不存在。不使用模型的项目属于此状态

同一安装流程也可从需要该运行时的角色处进入

在已安装运行时的机器上创建的角色,在未安装的机器上仍引用同一名称。该角色不会损坏,Studio 也不会改写它,而是报告本工程未安装并提供安装入口。刚克隆的项目即为该状态

创建角色

运行时在创建角色时选择,之后不可更改:新建角色 → Live2D Cubism / Spine / 自定义运行时。角色 kind 在创建时固定,因为三种 kind 之间不共享数据,切换会丢弃原有内容

新建的模型角色有两项待设置:

绘制运行时

当前机器是否已安装该角色所需的运行时。未安装时,安装 会打开对应产品的安装流程

模型

模型本身作为项目资产。模型是一个目录,包含清单文件以及清单引用的贴图、动作与物理文件,因此按目录导入而非按文件导入。若项目中尚无模型资产,该行提供导入入口

两项均设置完成后,检视面板的其余部分才会出现,因为这些内容读取自模型:Studio 通过已安装的运行时挂载模型并查询其内容。动作、表情、皮肤与参数将显示为可选列表,上方预览以静止姿态绘制模型

运行时可以不报告模型内容。此时各控件显示为文本输入框,需手动输入名称,其余行为不变

在剧本中控制姿态

除普通角色支持的命令外,模型角色还接受四条命令:

命令别名设置
/motion Doll run/anim动画。不指定名称时清除动画,模型回到静止
/face Doll smile/expr/expression表情。与切换图片角色姿态的命令相同
/skin Doll winter/costume皮肤,适用于支持皮肤的格式
/param Doll ParamAngleX 12模型的单个数值参数

各名称均来自模型报告的内容,以列表形式提供

引擎中的对应元素

模型角色编译为引擎的木偶 (Puppet) 元素:一个由引擎持有、内部由后端绘制的区域。Studio 负责安装后端并向其提供模型,区域本身由引擎负责。编写运行时时,该页面即为契约

本页目录