대상 변경 해석

다음 섹션에서는 각 프레임에서 소스 캐릭터의 현재 위치를 대상 캐릭터에 투영하는 데 필요한 프로세스에 대해 간략하게 설명합니다.

단계 1: 소스 HIKCharacterState 업데이트

각 프레임에서 대상 변경 솔버를 호출할 때는 원본 순운동학 애니메이션에서 파생된 소스 캐릭터의 현재 위치를 제공해야 합니다. 초기화 단계에서 소스 캐릭터에 대해 만든 HIKCharacterState의 현재 자세를 제공합니다.

HumanIK는 게임 엔진에서 현재 FK 위치 및 캐릭터의 관절 회전을 사용하여 HIKCharacterState의 노드를 동기화하기 위한 여러 가지 옵션을 제공합니다. 사용 가능한 모든 옵션에 대한 자세한 내용은 애니메이션 데이터 설정 및 검색을(를) 참조하십시오.

한 가지 일반적인 방법은 HIKCharacterState의 각 노드에 대해 HIKSetNodeStateTQSfv() 함수를 호출하는 것입니다. 이 함수에는 다음 인수가 필요합니다.

예를 들면 다음과 같습니다.

HIKSetNodeStateTQSfv (MySrcCharacter, MySrcCharState, RightHandNodeId,
                                                      myModel.GetTrans(RightHandNodeId),
                                                      myModel.GetQuatRot(RightHandNodeId),
                                                      myModel.GetScale(RightHandNodeId)}

단계 2: IK 해석 단계 설정

역운동학 해석 프로세스는 여러 단계로 나누어지며, 각 단계에서 선택한 관절 체인, 당기기와 같은 제약 조건의 효과, 바닥 접점(손과 발 접점 참조) 또는 스쿼시 및 늘이기(스쿼시 및 늘이기 참조)와 같은 특수 변환의 결과에 대해 새 위치를 계산합니다.

대상 변경 솔버에서 역운동학 솔버를 호출할 때 수행된 해석 단계를 확인하려면 HIKSetIKSolvingStep() 함수를 호출합니다. 이 함수는 다음 두 개의 인수를 사용합니다.

예를 들면 다음과 같습니다.

HIKSetIKSolvingStep (MyEffectorState, HIKSolvingStepAll);

| 연산자(bitwise OR)와 이들을 연결하여 HIKSolvingStep 열거에 나열된 여러 해석 단계를 지정할 수 있습니다. 예를 들면 다음과 같습니다.

HIKSetIKSolvingStep (MyEffectorState, HIKSolvingStepBodyPull |
                                      HIKSolvingStepLeftShoulder |
                                      HIKSolvingStepLeftArm |
                                      HIKSolvingStepLeftHand);

해석 단계를 0으로 설정하여 IK 해석 패스를 효율적으로 건너뛸 수도 있습니다.

단계 3: 대상 캐릭터 속성 설정

대상 캐릭터에 대해 만든 HIKPropertySetState에서 구성 설정을 변경하여 HumanIK 대상 변경 솔버를 제어할 수 있습니다. 예를 들어 캐릭터의 여러 노드에 대해 도달, 당기기 및 저항 설정을 구성할 수 있습니다. HIKPropertySetStates에서 사용할 수 있는 구성 옵션 및 해당 속성 설정 방법에 대한 자세한 내용은 캐릭터 속성대상 변경 관련 속성을(를) 참조하십시오.

소스 캐릭터의 HIKPropertySetState는 소스 캐릭터의 높이를 대상 캐릭터에 적용하기 위해 역운동학 솔버에 필요한 속성 HIKFootBottomToAnkleId를 검색할 때만 사용됩니다. 발 접점(손과 발 접점 참조)을 사용하는 경우와 기본 T 자세에서 소스 및 대상 캐릭터의 발목이 바닥으로부터 같은 거리에 있지 않은 경우에만 소스 캐릭터에 대해 이 설정 하나를 지정해야 합니다.

단계 4: 솔버 시작

HumanIK 대상 변경 솔버를 시작하려면 HIKSolveForCharacter() 함수를 호출합니다. 이 함수에는 다음 인수가 필요합니다.

예를 들면 다음과 같습니다.

HIKSolveForCharacter (MyTargetChar, MyTargetCharState, MySrcChar, MySrcCharState, 
MyEffectorSet, MyTargetPropertySet, MySrcPropertySet);

대상 변경 솔버는 다음과 같이 진행됩니다.

  1. 소스 캐릭터의 HIKCharacterState에서 모든 노드의 방향을 대상 캐릭터의 HIKCharacterState에 복사합니다.
  2. 제공한 HIKEffectorSetState를 설정합니다. 기본적으로 이 단계는 대상 캐릭터의 HIKPropertySetState에 있는 도달, 당기기 및 저항 캐릭터 속성 값과 일치하도록 각 이펙터의 도달, 당기기 및 저항 값을 설정하는 단계로 구성됩니다. 대상 변경 관련 속성을(를) 참조하십시오.
  3. 역운동학 솔버를 호출하여 대상 캐릭터의 HIKCharacterState에서 IK 패스를 수행합니다. 이 패스에서는 대상 캐릭터의 HIKPropertySetState에서 처음에 제공한 도달, 당기기 및 저항 설정을 적용하고 바닥 접점과 같은 추가적인 특수 효과를 수행합니다.

단계 5: 대상 HIKCharacterState 검색

대상 변경 솔버에서는 대상 캐릭터에 대해 생성되는 포즈를 해당 캐릭터에 대해 인수로 전달한 것과 동일한 HIKCharacterState에 저장합니다. 이 HIKCharacterState에서 각 노드의 변환, 방향, 배율 조정을 검색하고 게임 엔진 캐릭터에 다시 적용해야 합니다.

HumanIK에서는 HIKCharacterState에서 노드의 3D 위치, 회전 및 배율 조정을 검색할 수 있는 여러 가지 옵션을 제공합니다. 사용 가능한 모든 옵션에 대한 자세한 내용은 애니메이션 데이터 설정 및 검색을(를) 참조하십시오.

캐릭터에 대해 계산된 포즈를 검색하는 한 가지 일반적인 방법은 HIKCharacterState의 각 노드에 대해 HIKGetNodeStateTQSfv() 함수를 호출하는 것입니다. 이 함수에는 다음 인수가 필요합니다.

예를 들면 다음과 같습니다.

const float trans[4];
const float quatRot[4];
const float scale[4];
HIKGetNodeStateTQSfv (MyCharState, RightHandNodeId, trans, quatRot, scale); 
... // apply retrieved values back to game engine here 

각 노드에 대해 검색된 값을 게임 엔진에서 캐릭터의 해당 관절에 다시 적용하는 것은 사용자에게 달려 있습니다.