Pose (UE)

最終更新: 2024年9月5日

此页面包含有关Alpha版的描述。

概述

Pose是管理Pose设置格式.pose3.json中描述的部件群显示状态的功能。
通过使用Pose,您可以管理不想同时显示在画面上的部件,例如“放下状态的手臂”和“交叉状态的手臂”。
此外,通过使用Pose,可以支持具有不同Part ID的模型(换装等)。

.pose3.json可以在Cubism Viewer for OW中设置。
有关如何设置部件等详细信息,请参考此处

如何处理组件

通过将CubismPoseComponent追加到CubismModel Actor的子组件,可以使用Cubism SDK for Unreal Engine中的Pose。

如果在.model3.json中设置了.pose3.json的路径,载入时CubismPoseComponent会自动作为子组件追加到CubismModel Actor中,所以用户端无需设置。

行为

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

请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。