Pose (Cocos Creator)

업데이트: 2023/03/14

개요

Pose는 Pose 설정 형식인 .pose3.json에 기술된 파츠 그룹의 표시 상태를 관리하는 기능입니다.
Pose를 사용하면 「내린 상태의 팔」과 「팔짱을 꼈을 때의 팔」과 같이 화면에 동시에 표시하고 싶지 않은 파츠를 관리할 수 있습니다.
또한 Pose를 이용하면 Part의 ID가 다른 모델(의상 교체 등)에도 대응하는 것이 가능합니다.

.pose3.json은 Cubism Viewer for OW에서 설정할 수 있습니다.
파츠 설정 방법 등에 대한 자세한 내용은 여기를 참조하십시오.

OW 방식으로 가져온 모델과 기존 방식의 모델을 비교하면 Pose에 의해 다음의 3가지가 변화합니다.

  • [Prefab의 루트]/Parts/ 아래의 GameObject에 CubismPosePart가 연결된다.
  • AnimationClip 내의 PartOpacity 커브가 Stepped로 맞으면 Linear 커브로 가공된다.
  • AnimationClip에서 pose3.json에 기술되지 않은 Opacity 커브가 삭제됩니다.

Pose에서는 다음을 수행합니다.

  1. Pose 모션 내에 Stepped로 설정된 Parts의 Opacity(불투명도)의 커브를 가공
  2. Pose용 파츠 식별
  3. 표시할 Pose 파츠를 판별하기 위해 파츠 Opacity 저장
  4. Pose 계산 및 적용
  5. 불투명도 연동

Pose 모션 내에 Stepped로 설정된 Parts의 Opacity(불투명도)의 커브를 가공

Editor 매뉴얼의 포즈 설정에 기술되어 있는 바와 같이 Pose로 취급하는 파츠의 불투명도(PartOpacity)용 커브는, 커브 종류는 스텝(Stepped)을 전제로 하고 있습니다.
Cubism SDK for Cocos Creator에서는 이 곡선을 선형(Linear)으로 가공하여 AnimationClip에 내보냅니다.

Stepped 이외의 종류의 커브를 설정했을 경우 그 커브는 가공되지 않고 그대로 AnimationClip에 내보냅니다.

if (
  shouldImportAsOriginalWorkflow &&
  poseJson ! = null &&
  poseJson.adeInTime ! = 0.0
) {
  let track = CubismMotion3Json.convertSteppedCurveToLinerCurver(
    curve,
    poseJson.fadeInTime
  );
}

이 Opacity의 커브를 가공하는 처리는 CubismMotion3Json.toAnimationClipB()로 실시하고 있습니다.

Pose용 파츠 식별

CubismPosePart는 OW 방식으로 모델을 가져올 때 연결됩니다.
연결하는 Node는 [Prefab의 루트]/Parts/ 아래에 배치된 .pose3.json에 기술된 ID와 같은 이름이 됩니다.

// Pose용 파츠 취득
const part = ArrayExtensionMethods.findByIdFromParts(
  parts,
  group[partIndex].id
);

// CubismPosePart 연결
posePart = part.node.addComponent(CubismPosePart)!;

// Pose 정보를 CubismPosePart에 설정
posePart.groupIndex = groupIndex;
posePart.partIndex = partIndex;
posePart.link = group[partIndex].link;

표시할 Pose 파츠를 판별하기 위해 파츠 Opacity 저장

현재 CubismPart.opacity 값을 이전 프레임에 캐시한 값과 비교하여 .pose3.json에 기술된 그룹 내의 표시 파츠를 판별합니다.
값의 캐시는 CubismPoseController.savePartOpacities()로 실시하고 있습니다.

Pose 계산 및 적용

표시 파츠의 적용은 AnimatinoClip으로 적용합니다.

숨겨진 파츠의 적용은 CubismPoseController.doFade()로 실시합니다.

숨겨진 파츠의 Opacity는 표시하는 파츠의 불투명도와의 관계상 배경이 비치지 않는 레벨에서 불투명도를 저하시킵니다.
CubismPoseController.doFade()로는 표시 파츠를 찾고 나서 비표시 파츠 Opacity를 설정합니다.

불투명도 연동

불투명도 연동은 Pose를 적용한 후 Opacity가 CubismPosePart.link에 쓰여진 연동 파츠는 CubismPoseController.copyPartOpacities로 Opacity를 설정합니다.

이 기사가 도움이 되었나요?
아니요
이 기사에 관한 의견 및 요청사항을 보내 주시기 바랍니다.