如何直接使用 CubismJava 框架

[最后更新时间:2022/10/06]

Cubism SDK for Java 目前是 alpha 版本。beta 版和正式版的规格可能会有所变化。

Cubism SDK for Java 中包含的示例项目使用 CubismJavaFramework(在 SDK 包中的 /Framework/ 下)处理 Cubism 模型。
在创建处理 Cubism 模型的项目时,我认为最好以示例项目为基础,但在现有应用程序或用户自己的引擎中实现它时,有些情况需要直接处理 CubismJavaFramework API。我认为。
但是,由于包中包含的示例项目功能强大,因此仅参考它并不容易理解和隔离结构。

下面,我们将介绍一个直接调用 CubismFramework 并处理模型的最小片段,针对上述用户。

 

Cubism框架周期

使用Cubism框架的步骤如下:

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

 

Cubism框架的初始化

CubismFramework的初始化过程如下。

CubismFramework 使用 CubismFramework.startUp () 初始化。
Cubism SDK for Native 将分配器(ICubismAllocator)作为第一个参数,但在 Cubism SDK for Java(alpha 版本)中没有使用。

Tips

CubismFramework.initialize() 在初始化时只调用一次,之后即使连续调用也会跳过 CubismFramework,除非它被销毁。
然而,一旦 CubismFramework 被销毁,调用 CubismFramework.initialize() 再次初始化它。

 

获取模型文件路径

Cubism 的内置数据集具有在 .model3.json 中描述的每个相对路径。
可以直接指定要加载的 MOC3 文件或纹理,但基本上建议从 .model3.json 获取路径并加载。

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

 

 

加载模型

模型通过CubismModel 接口加载。

CubismModel 实例由 CubismJavaFramework 中的 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.saveParameters(),可以对后续的相对值操作进行复位。

 

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

通过将使用 _model.update 函数更新的物理计算和顶点信息传递给渲染器,可以在屏幕上绘制立体主义模型。

 

模型破坏

Cubism SDK for Java(alpha 版本)基本上将资源的释放留给垃圾回收,但在模型生成中,它是通过使用 Java Native Interface (JNI) 访问 Native 函数来实现的。
因此,需要对该部分进行删除处理。

 

 

Cubism框架终止过程

调用 CubismFramework.dispose() 释放 CubismFramework 预留的交集资源。
在调用 CubismFramework.initialize() 之前不要调用 CubismFramework.dispose()。

Tips

由于使用 CubismFramework 初始化的数据不依赖于模型数据,因此可以在多个模型之间复用。
因此,如果只是切换模型,则无需调用 CubismFramework.dispose()。

© 2010 - 2022 Live2D Inc.