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
頂点情報 X5.0
頂点情報 Y5.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 変数の定義部分を以下のように変更します。

https://github.com/Live2D/CubismJavaFramework/blob/develop/framework/src/main/java/com/live2d/sdk/cubism/framework/model/CubismUserModel.java#L392

修正前コード

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 リファレンスをご参照ください。

この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。