Cubism 5機能のSDK互換性について
最終更新: 2023年8月17日
このページにはベータ版に関する記述が含まれます。
概要
ここでは、Cubism 5のSDK互換性について以下の内容の説明をします。
- 5 SDK ではどのような変更がなされたか。
- 既存の4.2 SDKとの互換性についてどのような注意点や変更点があるか。
名称について
- 4.2 SDKは、Cubism 4 SDK R7 以前のSDKを指します。
- 5 SDKは、Cubism 5 SDK R1 beta1 以降のSDKを指します。
5 Editorと5 SDKの新機能対応表
5 Editor新機能 | SDK対応 [対応時期] |
---|---|
ブレンドシェイプの強化 | 〇 対応(beta1から) |
モーションシンク | △ 対応(Unityのみbeta1から) |
ダーク/ライトテーマ切り替え対応 | Cubism Editorの機能のため、SDKは対応なし |
HiDPIディスプレイ対応 | Cubism Editorの機能のため、SDKは対応なし |
カスタムワークスペース | Cubism Editorの機能のため、SDKは対応なし |
環境設定ダイアログ | Cubism Editorの機能のため、SDKは対応なし |
メッシュの自動生成の精度向上 | Cubism Editorの機能のため、SDKは対応なし |
顔の動きの自動生成 | Cubism Editorの機能のため、SDKは対応なし |
互換性に影響のある修正
- 表情の遷移処理の不具合修正
- Renderer関連処理のクラス構造の変更(Unity以外)
- MetalとOpenGLの描画差異の解消(Nativeのみ)
互換性について
後方互換性および負荷について
ブレンドシェイプの強化
ブレンドシェイプパラメータの負荷については「ブレンドシェイプの強化」で説明しています。
モーションシンク
モーションシンクの互換性については「モーションシンク」で説明しています。
表情の遷移処理の不具合修正
複数の表情パラメータのブレンド計算の際にEditorと異なる不自然なアニメーションとなっていた不具合を修正しました。
そのため5 SDKでは4.2 SDKと異なる表現となります。
4.2 SDKの表現が望ましい場合の修正方法は「表情の遷移処理の不具合修正」で説明しています。
Renderer関連処理のクラス構造の変更
for Native、for Web、for Javaにて、Renderer関連処理の保守性向上のため、Renderer関連クラスの構造及び一部関数を変更しました。
フレームワークのみの置き換えを行うとビルドエラーが発生します。
具体的な修正内容は「Renderer関連処理のクラス構造の変更」で説明しています。
MetalとOpenGLの描画差異の解消
for NativeのMetalにおいて発生していた、OpenGLとの描画差異を解消しました。
4.2 SDKの表現が望ましい場合の修正方法は「MetalとOpenGLの描画差異の解消」で説明しています。
既存の4.2 SDKからのアップデート及び前方互換性について
- 5.0 SDKへとアップデートを行う際には通常と変わらず、ファイルを全て置き換えていただくことで問題なく動作します。
- 5向けに書き出されたMOCファイルは読み込むことが出来ませんので予めご了承ください。
- 5向けに書き出されたMOCファイルを読み込もうとした場合、csmReviveMocInPlace関数を呼び出した際に以下のエラーを出力します。
[CSM] [E]csmReviveMocInPlace is failed. The Core unsupport later than moc3 ver:[4]. This moc3 ver is [5].
ブレンドシェイプの強化
ブレンドシェイプ機能の強化により、ブレンドシェイプに対応したパラメータが増えました。対応したパラメータと対応バージョンは以下の表をご参照ください。
ブレンドシェイプSDK対応表
オブジェクト | プロパティ | 対応バージョン |
---|---|---|
パーツ | – | 5.0 |
描画順 | 5.0 | |
ワープデフォーマ | – | 4.2 |
頂点情報 | 4.2 | |
不透明度 | 5.0 | |
乗算色 | 5.0 | |
スクリーン色 | 5.0 | |
回転デフォーマ | – | 5.0 |
頂点情報 X | 5.0 | |
頂点情報 Y | 5.0 | |
乗算色 | 5.0 | |
スクリーン色 | 5.0 | |
角度 | 5.0 | |
倍率 | 5.0 | |
アートメッシュ | – | 4.2 |
頂点情報 | 4.2 | |
描画順 | 5.0 | |
乗算色 | 5.0 | |
スクリーン色 | 5.0 | |
グルー | – | 5.0 |
適用度 | 5.0 |
既存のSDKからの変更点および負荷について
後方互換性を保つため、4.2までの共通の挙動について差異はありません。
組み込みモデルデータバージョンが「SDK 5.0 / Cubism 5.0 対応」の場合
- ブレンドシェイプパラメータの情報として、パーツ/アートメッシュ/ワープデフォーマ/回転デフォーマ/グルーのプロパティが書き出されます。
- 今まで同様にモデルのDrawableのデータから各プロパティの値を取得します。
負荷についてはブレンドシェイプパラメータの計算分の負荷が増えます。(ブレンドシェイプは線形的に増えていく傾向となっています。)
モーションシンク
新規機能となるため、互換性に関する説明はありません。
表情の遷移処理の不具合修正
4.2 SDKの表現が望ましい場合の修正方法
for Unity
モデルのプレハブを選択状態にし、Inspectorウィンドウから CubismExpressionController の Use Legacy Blend Calculation
にチェックを入れます。
for Native
CubismUserModel::_expressionManager
の型と、CubismUserModel::CubismUserModel()
内の初期化処理を以下のように変更します。
https://github.com/Live2D/CubismNativeFramework/blob/develop/src/Model/CubismUserModel.hpp#L272
修正前コード
CubismExpressionMotionManager* _expressionManager; ///< 表情管理
修正後コード
CubismMotionManager* _expressionManager; ///< 表情管理
https://github.com/Live2D/CubismNativeFramework/blob/develop/src/Model/CubismUserModel.cpp#L42
修正前コード
_expressionManager = CSM_NEW CubismExpressionMotionManager();
修正後コード
_expressionManager = CSM_NEW CubismMotionManager();
for Web
CubismUserModel クラスのコンストラクタ内で行っている、 _expressionManager
を初期化する処理を以下のように変更します。
https://github.com/Live2D/CubismWebFramework/blob/develop/src/model/cubismusermodel.ts#L368
修正前コード
this._expressionManager = new CubismExpressionMotionManager();
修正後コード
this._expressionManager = new CubismMotionManager();
for Java
CubismUserModel に定義されているexpressionManager
変数の定義部分を以下のように変更します。
修正前コード
protected CubismExpressionMotionManager expressionManager = new CubismExpressionMotionManager();
修正後コード
protected CubismMotionManager expressionManager = new CubismMotionManager();
Renderer関連処理のクラス構造の変更
for Native、for Web、for Javaにて、Renderer関連処理の保守性向上のため、Renderer関連クラスの構造及び一部関数を変更しました。
具体的な変更内容は以下になります。
- ClippingManagerの分離
- SetupClippingContext内の高精細マスク処理の分離
- シェーダー関連のソースコード分け
- 共通処理を基底クラスに移動
- DrawMeshの引数の整理
- “OffScreen~~”の名称の統一
万が一お客様がSDKのカスタマイズを行っており通常通りのアップデートが難しい場合には、下記の変更内容をご参照ください。
ClippingManagerの分離
CubismRenderer_xxクラスファイルからClippingManager関連処理をCubismClippingManagerクラスファイルへ分離しました。
for NativeにおいてはCubismClippingManagerクラスは全てのRendererの共通クラスになります。
この変更により、CubismRenderer_xxクラスファイルの可読性の向上、ClippingManager関連処理の保守性が向上しました。
SetupClippingContext内の高精細マスク処理の分離
CubismRenderer_xxクラスファイルから高精細マスク関連の処理を抜き出し、共通化してCubismClippingManagerクラスへ移動しました。
この変更により、CubismRenderer_xxクラスファイルの可読性の向上、高精細マスク関連処理の保守性が向上しました。
シェーダー関連のソースコード分け
Rendererごとに扱いが異なっていたシェーダー関連のコードをCubismShader_xxクラスファイルで扱うよう統一しました。
この変更により、シェーダー関連コードの保守性が向上しました。
共通処理を基底クラスに移動
CubismRenderer_xxクラス内の行列計算など、全ての派生クラスで同様に行っていた処理を基底クラスに移動することで共通化しました。
この変更により、CubismRenderer_xxクラスファイルの保守性が向上しました。
DrawMeshの引数の整理
CubismRenderer_xxクラス内のDraw関連の関数にて、大量の引数を設定する必要があった箇所を整理しました。
modelオブジェクトのメンバ変数を複数設定していたため、modelオブジェクト自体を引数に設定することで引数の数を大幅に削減しました。
この修正により、Draw関連処理の保守性が向上しました。
“OffScreen~~”の名称の統一
複数個所に使用していた”OffScreenBuffer”及び”OffScreenFrame”と命名していたものを”OffScreenSurface”へ名称変更しました。
この変更により、一般的な呼称を用いることでRenderer関連処理の保守性が向上しました。
MetalとOpenGLの描画差異の解消
for NativeのMetalにおいて発生していた、OpenGLとの描画差異を解消しました。
4.2 SDKの表現が望ましい場合の修正方法はCHANGELOG.mdに記載しました。
Cubism Core APIの変更
csmGetMocVersion関数にCubism 5のMOC3ファイルの返り値の定義を追加しました。
詳細についてはLive2D Cubism Core API リファレンスをご参照ください。