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