Cubism 2.1 MOC 文件解析
moc 二进制流读解析取使用:FreeLive
分析得到的 moc 文件数据结构 用 json 表示如下:
{
"canvasWidth": 1024,
"canvasHeight": 1024,
"Parts": [
{
"Components": [],
"Deformers": []
}
],
"Params": []
}
其中,Parts
为模型包含的所有部件,每个部件包含两个数组,Components
为部件包含的所有组件(可以理解为绘制所需的信息),Deformers
为部件包含的所有变形器。
Components 绘制信息
Component 的主要信息如下:
{
"UvMap": [],
"IndexArray": [],
"PivotPoints": []
}
UvMap
是纹理坐标:\[float1, float2, float3, float4, ...\]
,其中 (float1, float2) 是第一个顶点的纹理坐标,(float3,
float4) 是第二个顶点的纹理坐标,以此类推。
IndexArray
为顶点索引:绘制时的顶点索引,参考 OpenGL 中的索引即可。
PivotPoints
为顶点坐标:结构和纹理坐标类似。
值得注意的是,如果部件使用了 BDBoxGrid
变形器,那么 PivotPoints
实际上是对应曲线变形器所定义的贝塞尔曲面上的坐标。
Deformers 变形器
变形器包含两种类型,BDAffine
和 BDBoxGrid
,分别对应 Cubism Editor / Cubism Modeler 中的旋转变形器和曲面变形器。
BDAffine
其中,BDAffine
的变换,比较简单,主要的数据如下:
{
"Affines": [
{
"Type": 69,
"OriginX": 0.493657053,
"OriginY": 0.3299576,
"ScaleX": 1.0,
"ScaleY": 1.0,
"Rotation": -7.63333149e-14,
"ReflectX": false,
"ReflectY": false
}
]
}
BDBoxGrid
BDBoxGrid
则稍微复杂,主要数据如下:
{
"Row": 5,
"Column": 5,
"PivotPoints": []
}
PivotPoints
为贝塞尔曲面的控制点坐标,row
和 column
分别表示两个方向的贝塞尔曲线分段数。
参数控制
每个变形器的变形参数是以关键帧的形式保存的,每个关键帧包含了一个变形器的完整状态,也可以认为一个关键帧对应一个变形器。
通过 Param 的值和插值算法来确定关键帧之间的中间态。
单个 Param 控制的 part,使用线性插值。
两个 Param 控制的 part,使用双线性插值。
三个 Param 控制的 part,使用三线性插值。
Live2D 最多支持 3 个参数控制同一个 part。