SDKによるモーション作成の違いについて

[最終更新 2018/05/28]

各SDKのモーションに関する特徴

UnitySDK OWSDK
使用機構 Mecanim(Animatorなど) CubismMotionManager
モーション終了後の未指定要素の挙動 初期値にリセット モーションの終了時の値
パーツ間の整合性の保護 なし あり
モーションの切り替え 直線補間での切り替え
Mecanimでの指定でモーション単位
パラメータはイージング補間
パーツ不透明度は直線補間
3つの区枠でのフェード値の登録が可能

 

Unity、Mecanimの特徴

Unityでのモーション制御はMecanim機能で行います。
使用するコンポーネントはAnimatorでグラフィカルな環境で状態遷移の形でモーションコントロールを作成します。
状態遷移の切り替え制御にはAnimatorに設定できるパラメーターを使用し、
このパラメータの制御にはスクリプトやAnimationClipにAnimator制御用カーブなどを使用します。

 

BrendTreeはOWSDKにはない、モーション同士のブレンドが可能です。
この機能は表情のブレンドなどに使用すると強力です。

Mecanimについて、詳しくはUnity公式マニュアルのアニメーションをご覧ください。

 

UnitySDKでモーションを作るときの注意点

パーツの整合性

最も注意しなければならないのは切り替えパーツの整合性です。
NativeSDKではポーズ機能によって自動で整合性が保たれますが、
UnitySDKではパーツの整合性を保つために、モーションからAnimator上の状態遷移まで注意する必要があります。

 

・切り替えパーツすべてに整合性のとれた値を入力する。

未指定のパラメーター、パーツの値は初期値に戻るため、思わぬ動作をすることがあります。
また、レイヤー機能を使った時に他のレイヤーの影響を受ける可能性があります。

 

・BlendTreeに切り替えのあるモーションを入れない。

パーツの値が中途半端に影響して表示が乱れる可能性があります。

 

状態毎に必要なモーション

UnitySDKではモーション終了後の値は初期値に戻るため、
NativeSDKで行われるモーション履歴による状態遷移ができません。

細かい状態も、移行と待機で別々のモーションを作成する必要がでてきます。

 

モーション切り替え時の線形補間

モーションの切り替え時の補間方法はNativeSDKがイージング(EaseInOutSine)補間なのに対して、
UnityのMecanimが提供する補間方法は直線補間です。
この補間方法は透明度などでは違和感がありませんが、回転デフォーマなどの直線補間では機械的な印象を受けます。

 

OWSDKの特徴

NativeSDKではCubism 3 Viewer (for OW)を使った.model3.jsonへの登録と、コードによる呼び出しによってモーションを制御します。
グラフィカルな環境でない代わりに、ポーズ機能によって自動的、かつリアルタイムで切り替えパーツの整合性を保ちます。
モーション終了後に値が残る特性があるため、最終のモーションを状態遷移として使用することもできます。
個別に合成方法を指定できる表情モーションも利用できます。

 

プログラムの改造

NativeSDKの特徴として挙げる項目はすべてSDKに含まれるFrameworkとサンプルをそのまま使用した場合の特性です。
Frameworkをそのまま使用したり、サンプルを基にプログラムを作成した場合は先に挙げた特性を引き継ぎます。
しかし、NativeSDKではCore以外のプログラムはすべて公開されているので、アプリケーションの仕様に合わせてSDK側の実装を変更することが可能です。
最終的にはLive2Dモデルを使用するプログラムの仕様に沿ってください。

 

ポーズ機能を正しく動作させるために

ポーズ機能は、該当パーツへのモーションからの指定を監視し、最初に0でない操作を見つけたパーツを表示パーツとして認識する方式です。
UnitySDK同様にすべての切り替えパーツに値を打つことが必要です。
また、小さな値でも残っていると反応するので、確実に非表示に対して0を設定していることが重要です。

 

モーションにおけるポーズ機能以外でのパーツ不透明度操作の不能

ポーズ機能を経由してパーツの不透明度を操作する関係上、
パーツ操作の指定がないパーツはたとえモーションの中に指定があっても操作が反映されません。
単一のパーツの表示非表示を操作するときには対になる空のパーツを用意してやる必要があります。

 

モーションの呼び出し特性

優先順位

CubismMotionManagerを利用してモーションを再生する場合、再生の優先順位を設定する項目があります。
また、これから再生するときに優先度を予約することもできます。
再生中、予約中の優先順位とモーションの再生要求の優先順位を比較することで再生の選別することができます。

 

 

フェード指定の優先順位

NativeSDKではフェード時間の指定を3つの区枠で登録することができます。

優先順位 1 2 3 4
指定 パラメータ単位 モデルへのモーション登録 モーション標準 未指定の標準値(1秒)
設定方法 「フェード値の設定」 「モーションの設定」 「フェード値の設定」

 

ループ設定

現在Cubism 3 Animatorではループの設定を行えないため、Motionファイルを読み込むときのループの設定は基本Falseで固定されています。

��ーションファイルからの設定を読み込むには上記のコメントアウトしている部分を下記に変更して復帰させることで可能となります。

[注意] ret->_loop は正しい変数名ではないため、コメントアウトを外すとともに ret->_isLoop に記述を変更してください。

また、エディタでの設定は現在できないため、モーションファイルの設定を変更するにはテキストエディタで直接.motion3.jsonを加工する必要があります。

加えてループ時のフェードイン設定に関してfalseを指定するとエディタのような動作になります。
ループ時のフェードイン設定を変更するには先ほどのループ設定の指定したに下記のように追加してください。

 

ループ時のフェードイン設定に関しては現在モーションファイル内に設定項目がないことに注意してください。

Loop設定は切り替えにはフェードを使いたいが、アイドル中にはフェードを効かせたくない場合に有効な設定です。

Loop設定を使用しないサンプルのアイドル動作は、動作しているモーションがない場合にのみアイドルモーションを再生し始める仕組みになっています。
このため、サンプルからそのまま派生させる形でプログラム作成するときには、
アイドリングモーションの切り替えが目立たないように考慮する必要があります。

 

Copyright © 2019 Live2D Inc.