关于模型(Java)

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

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

 

 

 

关于编辑模型信息

模型信息基本上是在 Cubism Editor 的模型工作区中创建的。
.moc3文件中记录了顶点等关于参数的移动。
附加到 Artmesh 的其他物理计算和用户数据作为单独的文件输出,.model3.json 文件是记录与模型相关的所有文件引用的文件。

这些可以在输出 .moc3 文件的同时输出。“导出嵌入数据”
此外,通过使用 Cubism Viewer(用于 OW),您可以添加运动、面部表情文件和姿势文件的内置设置。

 

使用框架从 .model3.json 文件中读取

在使用Framework进行读取时,假设从.model3.json文件中提取模型所需的信息,并维护和使用继承CubismUserModel类的实例。

ICubismModelSetting 类中提取的每个元素都可以由 CubismUserModel.load ~~ 系统函数加载。

通过遵循示例中 LAppmodel.loadAssets 函数中的以下函数的流程,从 .model3.json 文件加载的整体流程很容易理解。

  • LAppModel.setupModel 函数
  • CubismUserModel.createRenderer 函数
  • LAppModel.setupTextures 函数

 

创建实例(读取 .moc3文件)

首先,将 .moc3文件加载到内存中。
将读取缓冲区传递给 CubismMoc.create 函数并首先创建一个 CubismMoc 实例。
然后调用 CubismMoc.createModel 函数来创建一个 CubismModel 实例。
从这个 CubismModel 实例中,您可以操作参数并获取绘图信息。

CubismMoc.createModel函数统计CubismMoc内部函数生成的Model的数量,当CubismMoc被销毁时,需要销毁该CubismMoc生成的所有CubismModel。

 

 

图形环境协会

框架使用从 CubismRenderer 类派生的类,以便模型的纹理信息不依赖于图形 API。
所有与模型相关的图形相关信息都由 CubismRenderer 类的派生类管理。
SDK for Java R1 alpha1的时候只支持Android,所以不需要管理派生类,但是考虑到以后可能加入图形API以及与现有SDK的规范统一,规范如下跟随。

首先,使用 RendererType 枚举指定要生成的图形环境类型,并将其作为 CubismUserModel.createRenderer 函数的参数调用。
(Java R1 alpha1 的 SDK 仅支持 Android。)
在createRenderer函数内部,生成了参数对应的图形API的派生类,通过CubismRenderer.initialize函数注册CubismModel实例,将CubismRenderer实例和CubismModel实例链接起来。

 

 

纹理关联

Framework 中模型的纹理由 CubismRenderer 类的派生类管理。
Android OpenGL ES 2.0 处理使用 CubismRendererAndroid 类中的 CubismRendererAndroid.bindTexture 函数注册,该类是 CubismRenderer 类的派生类。
第一个参数可以通过Editor上的模型纹理号和纹理集号来确认。
第二个参数是纹理的 OpenGL ES 2.0 管理编号。

 

 

指定显示位置和大小

通过以上设置,模型可以绘制出来,但很多情况下显示位置和比例相差太大,无法在屏幕上显示。
CubismModel.getDrawableVertexPositions函数返回的顶点范围见“DrawableVertexPosition的范围”
使用 CubismModelMatrix 类、CubismModel.getCanvasWidth 函数和 CubismModel.getCanvasHeight 函数来调整大小。

这个矩阵在绘制前乘以Projection矩阵,作为MVP矩阵传递给渲染器。

 

 

顶点更新

执行 CubismModel.update 函数,将 CubismModel 实例的参数操作反映在图形网格的顶点上。

 

 

绘画

绘图不是从 CubismModel 实例执行的,而是通过指示链接的渲染器执行的。

 

 

破坏

销毁实例时,需要销毁所有CubismModel,然后销毁CubismMoc。
为了保持这个顺序,使用 CubismMoc.deleteModel 函数销毁 CubismModel。
如果你不通过这个函数,会发出警告,因为在 CubismMoc 中检查的模型数量不匹配。

 

 

在 CubismModel 类中使用模型中不存在的参数 ID

在 CubismModel 类参数,部分不透明度操作中,有一个函数可以处理 .moc 文件中不存在的 ID。
该函数使用了 CubismMotion 类、CubismPose 类等,使用它创建新机制时,请注意使用的 ID,以免与现有函数冲突。
另外,请记住,当您阅读框架时,您可能会使用创建的参数来处理其他功能。
* 访问不存在的最大值、最小值和初始值时会出错。

© 2010 - 2022 Live2D Inc.