다음 섹션에서는 각 프레임에서 소스 캐릭터의 현재 위치를 대상 캐릭터에 투영하는 데 필요한 프로세스에 대해 간략하게 설명합니다.
각 프레임에서 대상 변경 솔버를 호출할 때는 원본 순운동학 애니메이션에서 파생된 소스 캐릭터의 현재 위치를 제공해야 합니다. 초기화 단계에서 소스 캐릭터에 대해 만든 HIKCharacterState의 현재 자세를 제공합니다.
HumanIK는 게임 엔진에서 현재 FK 위치 및 캐릭터의 관절 회전을 사용하여 HIKCharacterState의 노드를 동기화하기 위한 여러 가지 옵션을 제공합니다. 사용 가능한 모든 옵션에 대한 자세한 내용은 애니메이션 데이터 설정 및 검색을(를) 참조하십시오.
한 가지 일반적인 방법은 HIKCharacterState의 각 노드에 대해 HIKSetNodeStateTQSfv() 함수를 호출하는 것입니다. 이 함수에는 다음 인수가 필요합니다.
HIKSetNodeStateTQSfv (MySrcCharacter, MySrcCharState, RightHandNodeId, myModel.GetTrans(RightHandNodeId), myModel.GetQuatRot(RightHandNodeId), myModel.GetScale(RightHandNodeId)}
역운동학 해석 프로세스는 여러 단계로 나누어지며, 각 단계에서 선택한 관절 체인, 당기기와 같은 제약 조건의 효과, 바닥 접점(손과 발 접점 참조) 또는 스쿼시 및 늘이기(스쿼시 및 늘이기 참조)와 같은 특수 변환의 결과에 대해 새 위치를 계산합니다.
대상 변경 솔버에서 역운동학 솔버를 호출할 때 수행된 해석 단계를 확인하려면 HIKSetIKSolvingStep() 함수를 호출합니다. 이 함수는 다음 두 개의 인수를 사용합니다.
HIKSetIKSolvingStep (MyEffectorState, HIKSolvingStepAll);
| 연산자(bitwise OR)와 이들을 연결하여 HIKSolvingStep 열거에 나열된 여러 해석 단계를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
HIKSetIKSolvingStep (MyEffectorState, HIKSolvingStepBodyPull |
HIKSolvingStepLeftShoulder |
HIKSolvingStepLeftArm |
HIKSolvingStepLeftHand);대상 캐릭터에 대해 만든 HIKPropertySetState에서 구성 설정을 변경하여 HumanIK 대상 변경 솔버를 제어할 수 있습니다. 예를 들어 캐릭터의 여러 노드에 대해 도달, 당기기 및 저항 설정을 구성할 수 있습니다. HIKPropertySetStates에서 사용할 수 있는 구성 옵션 및 해당 속성 설정 방법에 대한 자세한 내용은 캐릭터 속성 및 대상 변경 관련 속성을(를) 참조하십시오.
소스 캐릭터의 HIKPropertySetState는 소스 캐릭터의 높이를 대상 캐릭터에 적용하기 위해 역운동학 솔버에 필요한 속성 HIKFootBottomToAnkleId를 검색할 때만 사용됩니다. 발 접점(손과 발 접점 참조)을 사용하는 경우와 기본 T 자세에서 소스 및 대상 캐릭터의 발목이 바닥으로부터 같은 거리에 있지 않은 경우에만 소스 캐릭터에 대해 이 설정 하나를 지정해야 합니다.
HumanIK 대상 변경 솔버를 시작하려면 HIKSolveForCharacter() 함수를 호출합니다. 이 함수에는 다음 인수가 필요합니다.
HIKSolveForCharacter (MyTargetChar, MyTargetCharState, MySrcChar, MySrcCharState, MyEffectorSet, MyTargetPropertySet, MySrcPropertySet);
대상 변경 솔버에서는 대상 캐릭터에 대해 생성되는 포즈를 해당 캐릭터에 대해 인수로 전달한 것과 동일한 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
각 노드에 대해 검색된 값을 게임 엔진에서 캐릭터의 해당 관절에 다시 적용하는 것은 사용자에게 달려 있습니다.