LOADING

加载过慢请开启缓存 浏览器默认开启

Cubism 2.0 MOC 文件解析

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 变形器

变形器包含两种类型,BDAffineBDBoxGrid,分别对应 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 为贝塞尔曲面的控制点坐标,rowcolumn 分别表示两个方向的贝塞尔曲线分段数。

参数控制

每个变形器的变形参数是以关键帧的形式保存的,每个关键帧包含了一个变形器的完整状态,也可以认为一个关键帧对应一个变形器。

通过 Param 的值和插值算法来确定关键帧之间的中间态。

单个 Param 控制的 part,使用线性插值。

两个 Param 控制的 part,使用双线性插值。

三个 Param 控制的 part,使用三线性插值。

Live2D 最多支持 3 个参数控制同一个 part。