캐릭터 골격에 HumanIK 내에서 지원되는 노드 목록에 직접 매핑되지 않는 관절이 하나 이상 있는 경우, HumanIK에서 필요로 하는 최소한의 노드가 캐릭터에 모두 있으면 HumanIK를 사용하여 해당 캐릭터를 제어할 수 있습니다. 캐릭터에는 이와 같이 알 수 없는 추가 관절이 얼마든지 있을 수 있습니다. 하지만 HumanIK 솔버는 사전 정의된 일부 관절인 Biped 및 네 발 달린 동물 골격의 작동 방식에 대해 기본 제공되는 지식을 기반으로 계산을 수행하고 캐릭터에서 지원되지 않는 관절은 HumanIK가 인식하는 관절 범위에 포함되지 않으므로, 이 솔버에서는 지원되지 않는 관절을 직접 변환하거나 회전할 수 없습니다.
이에 대한 결과는 HumanIK 및 게임 엔진 간에 애니메이션 데이터를 교환할 때 전역 공간을 사용하는지 또는 로컬 공간을 사용하는지에 따라 달라집니다.
전역 공간을 사용하여 HumanIK 및 게임 엔진 간에 애니메이션 데이터를 교환하는 경우, HumanIK 솔버에서 인식하는 노드(예: HIKNodeId 열거에 나열된 노드)에 대해 계산되는 위치 및 회전 값을 가져오고 이러한 값을 기준으로 알 수 없는 추가 노드에 대한 위치 및 회전을 새로 계산하여 알 수 없는 추가 관절을 지원할 수 있습니다.
로컬 공간은 부모 노드와 관련하여 각 노드의 변환, 방향 및 배율 데이터를 표시합니다. HumanIK는 내부적으로 정규화된 전역 공간에서 작동하지만, HIKCharacterState에서 데이터 세트를 사용하여 노드의 변환, 회전 및 배율을 설정하거나 검색할 경우 로컬 공간 변환을 사용할 수 있습니다. HIKCharacterState 데이터에 대한 데이터 세트 함수을(를) 참조하십시오.
캐릭터 골격에 HumanIK에서 알 수 없는 관절이 포함되어 있는 경우, 알 수 없는 해당 관절을 변환 및 회전하면 골격에 있는 자식 관절의 로컬 공간에 영향을 미칩니다. 예를 들어 캐릭터가 어깨와 팔꿈치 사이에 추가 팔 관절이 있는 로봇인 경우 이 추가 관절을 회전하면 팔꿈치 노드의 위치와 회전에 영향을 미칩니다. 따라서 손목 노드, 손 노드 및 모든 손가락의 전역 위치 및 방향에도 영향을 미칩니다.
알 수 없는 관절이 관절 체인 끝에 있으면 로컬 공간 변환을 사용하는 게임 캐릭터에 HumanIK 솔버에서 생성된 HIKCharacterState를 다시 적용하는 것만으로도 알 수 없는 관절을 손쉽게 지원할 수 있습니다. 예를 들어 HumanIK에서 알 수 없는 일련의 꼬리 관절이 있는 캐릭터가 있고, 이 캐릭터의 궁극적인 부모는 HumanIK 허리 노드라고 가정합니다. HumanIK 솔버가 허리 노드를 이동하거나 회전할 경우, 허리 노드의 로컬 공간 변환을 게임 캐릭터에 다시 적용하면 HumanIK에서 꼬리를 직접 제어하지 않더라도 허리 노드를 따라 꼬리를 이동하고 회전할 수 있습니다.
하지만 위에서 설명한 추가 팔꿈치가 있는 로봇처럼 알 수 없는 관절이 두 개의 HumanIK 관절 사이에 있는 경우, 알 수 없는 관절의 자식인 HumanIK 노드에 대해 부모 오프셋을 정의해야 합니다. 이 부모 오프셋은 노드의 로컬 회전, 변환 및 배율 조정 시 알 수 없는 부모 관절의 효과를 정의합니다. 예를 들어 위에 소개된 시나리오를 이어가자면 로봇의 팔꿈치 관절에 부모 오프셋이 정의되어 있어야 하며, 부모 오프셋의 회전, 변환 및 배율 조정은 골격 계층에서 팔꿈치 바로 위에 있는 추가 관절의 로컬 공간과 일치합니다. 이 부모 오프셋에 대해 설정한 변환, 회전 및 배율 조정 값은 골격 계층에서 알 수 없는 관절 위에 있는 다음 HumanIK 관절과 관련지어 정의해야 합니다.
노드의 부모 오프셋을 설정하려면 먼저 HIKCharacterDefinition에서 노드에 알 수 없는 부모가 포함된 초기화 시간을 지정해야 합니다. 원하는 각 노드에 해당하는 mUsedNode 요소의 값을 HIKNodeParentOffset으로 설정합니다. 이렇게 하면 HIKCharacterDefinition에서 만들어진 각 HIKCharacter에 지정된 노드의 부모 오프셋을 저장하도록 HumanIK가 추가 메모리를 할당합니다. 자세한 내용은 초기화을(를) 참조하십시오.
이 작업은 자유 각도가 할당되지 않은 노드의 경우에만 필요합니다. mUsedNode 요소의 값을 HIKNodeLimits로 설정하여 노드에 자유 각도를 할당하면 부모 오프셋에 메모리가 자동으로 할당됩니다. 자유 각도을(를) 참조하십시오.
노드의 부모 오프셋은 HIKCharacter에 유지됩니다. 오프셋이 변경(예: 추가 관절을 확장하거나 압축하고, 또는 해당 부모와 관련하여 다른 변환으로 이동)되면 부모 오프셋을 업데이트해야 합니다. 이렇게 하면 골격 계층에서 모든 HumanIK 노드를 부모 오프셋 아래로 효과적으로 이동할 수 있습니다.
HumanIK에서 알 수 없는 부모 관절이 있는 노드에 대해 부모 오프셋을 설정하려면 HIKSetParentOffsetfv() 함수를 호출합니다. 이 함수에서 사용되는 매개변수에 대한 자세한 내용은 API 참조를 참조하십시오.
HIKSetParentOffsetfv(MyHIKCharacter, RightElbowNodeId, lParentTOffset.mData, lParentQOffset.mData, lParentSOffset.mData);