CubismNativeFrameworkを直接利用する方法

[最終更新日 : 2019/09/03]

Cubism SDK for Nativeに同梱されているサンプルプロジェクトは、CubismNativeFramework(SDKパッケージの /Framework/ 以下)を用いてCubismモデルを扱っています。
Cubismモデルを扱うプロジェクトを作成する場合はサンプルプロジェクトを基礎にご利用いただくのがよろしいかと思われますが、既存のアプリケーションやユーザ独自のエンジンなどに実装するときはCubismNativeFrameworkのAPIを直接扱いたい場合がございます。
しかし、同梱されているサンプルプロジェクトは高機能なため、そちらを参考にするだけでは構造の理解と切り分けが容易ではありません。

以下では、上記のようなユーザを対象として、CubismFrameworkを直接呼び出してモデルを扱う最小のスニペットを紹介します。

 

CubismFrameworkのサイクル

CubismFrameworkを扱うための手順は以下のとおりです。

  1. CubismFrameworkの初期化
  2. モデルファイルのパスを取得
  3. モデルの読み込み
  4. アップデート処理
  5. モデルの破棄
  6. CubismFrameworkの終了処理

 

CubismFrameworkの初期化

CubismFrameworkの初期化処理は以下のとおりです。

CubismFrameworkは、CubismFramework::StartUp()の第一引数に渡したアロケータを用いてメモリの確保を行います。
Cubism SDK for Nativeには、CubismNativeSamplesにアロケータのサンプルがございます。
CubismFrameworkで使用するアロケータはアライメントを指定して確保する実装も必要となっております。
そのため、基本的にはサンプルのものを利用していただくのが素早く組み込めるためよろしいかと思われますが、メモリの確保も独自なものにカスタマイズしたい場合はユーザ側で独自に実装したものに置き換えたり、サンプルを改造して組み込むことも可能です。

アロケータの具体的な実装につきましては こちら を、カスタムメモリアロケーターの作成上の注意に関しましては こちら をご覧ください。

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を用いて説明いたします。

Tips

上記のスニペットは、画面にモデルを1体表示することを前提としたものです。
画面上に同時に複数体のモデルを表示する場合、表示するモデルと同数のCubismUserModelの派生クラスのインスタンスを生成します。

 

 

アップデート処理

Cubismモデルのアップデート処理は、モデルの初期化と同様にCubismModelのインターフェースであるCubismModel::Update()を呼び出すことで行います。
CubismModel::Update()を呼び出すとCubism Coreの更新処理が行われ、それまでに設定されたパラメータやパーツの値から頂点情報を更新します。

この更新後の頂点情報などをレンダラに渡すことで、Cubismモデルを画面に描画することができます。

 

 

モデルの破棄

モデルを破棄するには、生成したCubismUserModelの派生クラスのインスタンスを破棄します。
これにより、このモデルが保持しているモーションや表情、物理演算などの情報がCubismUserModelのデストラクタから破棄されます。

 

 

Cubism Frameworkの終了処理

CubismFrameworkが確保した共通部分のリソースを解放するには、CubismFramework::Dispose() を呼び出します。
CubismFramework::Dispose() は、 CubismFramework::Initialize() を呼ぶ前には呼び出さないでください。

また、CubismFramework::Dispose() を呼ぶ場合、あらかじめすべてのモデルを破棄しておく必要があります。
これは、モデルを破棄する処理がアロケータのDeallocate()を利用しているためです。

Tips

CubismFrameworkで初期化したデータはstaticな領域に配置されており、モデルデータには依存していません。
そのため複数のモデル間で使い回すことができ、モデルの切り替えだけであればCubismFramework::Dispose()を呼び出す必要はありません。

Copyright © 2019 Live2D Inc.