ポーズについて

[最終更新日:2019/01/18]

 

 

 

ポーズ機能とは

ポーズとは複数の同種パーツのうち、単一のパーツだけをモーションに基づいて切り替えをフェード表示する機能です。
複数の同種パーツとは右手Aと右手Bなど同時に表示されると表示的に矛盾を起こすものを指します。

モーション内のパーツ不透明度の操作を最終的にパーツへ適用する処理部分でもあります。

このページへの理解のために「モデルについて」の「CubismModelクラスでモデルに存在しないパラメータIDを使う」を事前に読むことをお勧めします。

 

モーションからのパーツ不透明度操作の流れ

モーション再生でのパーツ不透明度操作

パーツ不透明度の整合性を保つため、Original WorkFlow の Frameworkでのモーション再生単体では直接パーツ不透明度に対して操作を行いません。

モーション再生のパーツの不透明度操作は、かわりにパーツと同じIDパラメータへ対しての上書きに置き換わります。
このときモデルに存在しないパラメータIDは仮想パラメータとして値の保持だけ行われます。
モーション切り替えに伴うフェード処理などは行われず、ただ上書きのみが行われます。

OW SDKではモーションへのパーツ不透明度操作の補間方法はステップが適用されることを想定しています。

 

 

ポーズの適用

モデルの更新処理の最後のフェーズでPose機能を適用することで、
pose3.jsonに記述された情報を基にグループごとにどのパーツを表示するか、
仮想パラメータの値を参照して決定していきます。

Poseをモデルに適用するAPIは以下になります

 

パーツ操作のカーブはステップを推奨されていますがリニアなどを選択している場合、
0.001より大きくなった時点で表示状態と認識します。

表示パーツの決定時に操作前のパーツ不透明度から差分時間との比例計算で新しい不透明度がリニア補間として決定します。

 

表示パーツとその新しい不透明度が決定したあと、グループ全体に対して不透明度の上書き処理が実行されます。
非表示パー��の新しい不透明度は表示するパーツの不透明度との関係で背景が透けないレベルで不透明度を低下させていきます。

 

 

Poseのデータ構造

Poseが取り扱う情報はパラメータ、パーツ情報へのアクセスを高速にするため、
パーツIDでアクセスしたときのパラメータ、パーツのインデックスをPartData構造体で固めて保有します。

また連動するデータはLinkとしてPartDataの子要素として保有します。

 

CubismPoseはグループ情報を一次元のPartData配列と各グループの個数情報の配列で表現します。

 

一次元配列のPartDataは各グループの個��情報をもとに配列上の先頭位置と要素数をDoFadeへ渡すことによりグループとして処理がされます。

 

 

Parent IDによる不透明度の連動

Pose適用処理の最後に呼ばれる以下の関数により、Linkに指定したパーツへ値を伝搬します。

 

このLinkはOWViewerでParent IDを表記されたPartIDがCubismIdHundleの配列で格納されます。
下の図であればPartManteL001のLinkにはPartArmLB001とPartArmLC001のCubismIdHundleが格納されます。

 

Linkと表記されていますが親子関係であり、
親パーツへの不透明度操作がなければ連動がされないことに注意してください。
Linkに表記された子同士の連動はされません。

 

 

インスタンスの生成(.pose3.jsonファイルの読み込み)

ポーズは.pose3.jsonファイルに保存され、CubismPoseクラスを使用します。
生成には以下の関数を使用します。

実装例

 

 

ポーズの適用

ポーズの適用には以下の関数を使用します。

事前にモーションの適用など仮想的なパラメータの計算を済ませておく必要があります。

 

 

 

破棄

モデルが解放されるタイミングでCubismPoseインスタンスも破棄する必要があります。

Copyright © 2018 Live2D Inc.