Pose (UE)
업데이트: 2024/09/05
이 페이지에는 알파 버전에 관한 설명이 포함되어 있습니다.
개요
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); } }