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);
	}
}

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