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);
}
}
请问这篇文章对您有帮助吗?
是否