如何直接使用 CubismWeb 框架

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

Cubism SDK for Web中包含的示例项目使用SDK包的“/Framework”目录下的处理来处理Cubism模型。
在创建处理 Cubism 模型的项目时,您可以基于示例项目使用它,但在现有应用程序或您自己的引擎中实现它时,您可能希望直接处理 Cubism Web 框架的 API。
但是,由于包中包含的示例项目功能强大,因此仅参考它很难理解和隔离结构。

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

 

Cubism框架周期

使用Cubism框架的步骤如下:

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

 

Cubism框架的初始化

Cubism Framework的初始化过程如下。

CubismFramework 使用 CubismFramework.startUp () 初始化。
Cubism SDK for Native 将分配器作为第一个参数,但 Cubism SDK for Web 不使用它。

请参考示例中的同名函数实现printMessage()的内容。

 

Tips

初始化时只调用一次 CubismFramework.initialize(),然后跳过连续调用,除非 CubismFramework.dispose() 破坏了 CubismFramework 实例。
但是,一旦您销毁了 CubismFramework 实例,请调用 CubismFramework.initialize () 再次对其进行初始化。

 

 

获取模型文件

对于Cubism的嵌入数据集,每个相对路径在model3.json中都有描述,字节数据参照this读取。
推荐解析model3.json获取模型文件路径等并读取。

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

也可以直接指定和加载 .moc3文件和纹理。
如果直接指定并加载,则需要修改代码。

示例中,在LAppModel.loadAssets() 中使用了fetch(),从资源路径中获取文件,读取字节数据,获取Json的内容。

 

 

加载模型

使用 CubismModel 接口加载模型。

CubismNativeFramework 中的 CubismUserModel._model 持有 CubismModel 的一个实例,使用 CubismUserModel.loadModel() 获取并保存模型数据。

使用 CubismModel 时,建议从继承 CubismUserModel 的类中处理。
在示例中,LAppModel 类继承自 CubismUserModel。

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

示例中,LAppModel.setupModel()中使用fetch()从ICubismModelSetting中保存的文件路径中读取模型数据。

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

Tips

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

 

 

更新过程

Cubism模型的更新过程是通过将要更新的参数和值与CubismModel接口CubismModel.setParameterValueById()等传递给目标模型来设定的。
调用 CubismModel.update() 进行更新。
当调用 CubismModel.update() 时,在 Cubism Core 中进行更新处理,根据目前设定的参数和部件的值更新顶点信息等。

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

在下面的代码中,模型的参数操作是直接在带有_model(CubismModel)的类中进行的,并调用了Cubism Core的更新过程来应用该操作。

 

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

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

 

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

 

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

 

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

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

 

模型破坏

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

 

 

Cubism框架终止过程

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

Tips

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

© 2010 - 2022 Live2D Inc.