Pose (UE)
最終更新: 2024年9月5日
このページにはアルファ版に関する記述が含まれます。
概要
Poseは、Poseの設定形式の.pose3.jsonに記述されたパーツ群の表示状態を管理する機能です。
Poseを使用することで、「下ろした状態の腕」と「組んだ状態の腕」のように、画面には同時に表示させたくないパーツを管理することができます。
また、Poseを利用することで、PartのIDが異なるモデル(衣装替え等)にも対応することが可能です。
.pose3.jsonは、Cubism Viewer for OWで設定することができます。
パーツの設定方法などの詳細につきましては こちら をご覧ください。
コンポーネントの扱い方
Cubism SDK for Unreal Engine における Pose は CubismPoseComponent を CubismModel アクタの子コンポーネントに追加することで使用することができます。
.model3.json に .pose3.json のパスが設定されている場合は、インポートの際に自動的に CubismModel アクタに CubismPoseComponent が子コンポーネントとして追加されるため、ユーザー側での設定は不要です。
挙動
CubismPoseComponent はポーズの対象として設定されているパーツに対応するCubismPartComponent と同じIdをもつCubismParameterComponentの値を参照(存在しない場合は作成)し、その値が0でないパーツを表示するパーツとして選択します。
float VisiblePartOpacity = 1.0f; // find the visible part in a group for (const FCubismPosePartParameter& PartParam : PartGroup.Parts) { const TObjectPtr<UCubismPartComponent>& Part = PartParam.Part; const TObjectPtr<UCubismParameterComponent>& Parameter = PartParam.Parameter; if (!Part || !Parameter) { continue; } if (Parameter->Value > 0.0f) { VisiblePart = Part; VisiblePartOpacity = Part->Opacity; break; } }
選択された表示パーツの不透明度(VisiblePartOpacity)が1より小さい場合は、指定されたFadeInTimeの値に応じて増加させます。
VisiblePartOpacity = FMath::Min(VisiblePartOpacity + DeltaTime / FadeInTime, 1.0f);
一方、非表示パーツの不透明度(OtherPartOpacity)は、以下の計算式に基づき表示パーツの不透明度の変化に合わせて低下させていきます。
float OtherPartOpacity; // decrease opacity of the other parts aligned with the visible part { if (VisiblePartOpacity < Phi) { OtherPartOpacity = VisiblePartOpacity * (Phi - 1.0f) / Phi + 1.0f; // a line through (0, 1) and (phi, phi) } else { OtherPartOpacity = (1.0f - VisiblePartOpacity) * Phi / (1.0f - Phi); // a line through (1, 0) and (phi, phi) } const float backOpacity = (1.0f - OtherPartOpacity ) * (1.0f - VisiblePartOpacity); if (backOpacity > BackOpacityThreshold) { OtherPartOpacity = 1.0f - BackOpacityThreshold / (1.0f - VisiblePartOpacity); } }