如何直接使用 CubismNative 框架

[最近更新时间 : 2020/01/30]

Cubism SDK for Native 中包含的示例项目使用 CubismNativeFramework(SDK 包/框架/或更少)来处理 Cubism 模型。
在创建处理 Cubism 模型的项目时,基于示例项目使用它可能会更好,但在现有应用程序或用户自己的引擎中实现时,有些情况需要直接处理 Cubism 的 APINative框架。有。
但是,由于包中包含的示例项目功能强大,因此仅参考它并不容易理解和隔离结构。

下面,我们将介绍直接调用 Cubism Framework 并为上述用户处理模型的最小片段。

 

Cubism框架周期

使用Cubism框架的步骤如下:

  1. Cubism框架的初始化
  2. 获取模型文件路径
  3. 加载模型
  4. 更新过程
  5. 模型破坏
  6. Cubism框架终止过程

 

Cubism框架的初始化

Cubism Framework的初始化过程如下。

CubismFramework 通过使用传递给 CubismFramework::StartUp() 的第一个参数的分配器来分配内存。
适用于 Native 的 Cubism SDK 在 CubismNativeSamples中有分配器示例。
Cubism 框架中使用的分配器也需要实现来指定和保护对齐。
因此,基本上,使用示例一似乎是可以的,因为它可以快速合并,但如果您想自定义内存分配到自己的,您可以将其替换为用户实现的那一个。可以修改样本并将其合并。

有关分配器的具体实现,请参见 此处,有关创建自定义内存分配器的说明,请参见此处

Tips

初始化时只调用一次 CubismFramework::Initialize(),然后跳过连续调用,除非 CubismFramework 被破坏。
但是,一旦 CubismFramework 被销毁,调用 CubismFramework::Initialize() 再次对其进行初始化。

 

 

获取模型文件路径

对于 Cubism 的嵌入数据集,每个相对路径都在 model3.json 中描述。
可以直接指定一个.moc3文件或者纹理加载,但基本上推荐从model3.json获取路径加载。

要解析 model3.json,请使用 CubismFramework 的 CubismModelSettingJson 类。

 

 

加载模型

模型通过CubismModel 接口加载。

CubismModel 的一个实例由CubismNativeFramework 中的 CubismUserModel :: _model 持有。
使用时,建议从继承 CubismUserModel 的类中处理。

还可以在外部管理诸如纹理、动作和面部表情动作等资源。

这里,作为一个例子,我们将解释使用继承 CubismUserModel 的 CubismUserModelExtend。

 

要读取的moc3文件的路径可以通过上面介绍的model3.json获取,但是面部表情、物理、姿势、眨眼、口形同步、用户数据和运动路径也可以从model3.json获取。
在 SDK 示例中,这些是在加载模型的同时加载的。
每种阅读方法请参考以下内容。

 

Tips

上面的代码片段基于一个模型将显示在屏幕上的假设。
如果要同时在屏幕上显示多个模型,请创建与要显示的模型一样多的 CubismUserModel 派生类的实例。

 

更新过程

Cubism模型的更新过程是通过调用CubismModel::Update()来完成的,它是CubismModel的接口,方法和模型初始化一样。
当 CubismModel::Update() 被调用时,就进行了 Cubism Core 更新过程,从目前为止设定的参数和部件的值更新顶点信息。

在更新过程中,视线跟踪、物理模拟、运动播放等总是在Update()之前进行。

CubismModel::Update()后操作参数值不生效。
之后如果再调用 CubismModel::Update() 就会有反映,但是建议把这个过程合二为一,因为负载比较高。

 

播放动作 CubismMotionManager :: UpdateMotion () 会覆盖用于播放动作的 ID 参数的任何值。
因此,在此过程之前对参数值的任何操作都将被 CubismMotionManager::UpdateMotion()覆盖。
建议先进行运动播放处理,再进行视线跟踪、物理模拟等数值运算。

 

此外,如果所有的参数都没有用于要播放的动作,或者如果因为动作播放停止而没有操作参数的值,则在前一帧中执行的值操作的结果将保留。
因此,后续的相对参数值操作可能会导致意外结果。
通过在模型中反映运动的过程前后调用 CubismModel::LoadParameter() 和 CubismModel::SaveParameter(),可以重置之后执行的相对值操作。

 

视线追踪、物理模拟、动作播放等处理本身请参考各文档。

通过将更新后的顶点信息等传递给渲染器,可以在屏幕上绘制Cubism模型。

 

模型破坏

要销毁模型,请销毁 CubismUserModel 派生类的生成实例。
这会破坏该模型从 CubismUserModel 析构函数中保存的运动、面部表情、物理和其他信息。

 

 

Cubism框架终止过程

调用 CubismFramework::Dispose() 释放 CubismFramework 预留的交集资源。
在调用 CubismFramework::Initialize() 之前不要调用 CubismFramework::Dispose()。

另外,在调用 CubismFramework::Dispose() 之前,必须销毁所有模型。
这是因为销毁模型的过程使用了分配器的Deallocate()。

Tips

Cubism Framework初始化的数据位于静态区域,不依赖于模型数据。
因此,它可以在多个模型之间复用,如果只是想切换模型,则无需调用 CubismFramework::Dispose()。

© 2010 - 2022 Live2D Inc.