HumanIK는 다음에 설명한 대로 애니메이션 데이터를 설정하고 검색할 때 두 가지 높은 레벨의 방법 옵션을 제공합니다.
HumanIK는 HIKCharacterState에서 단일 노드 또는 HIKEffectorSetState에서 단일 이펙터의 변환, 방향 및 배율 조정을 설정하고 검색하기 위해 다양한 여러 함수를 제공합니다. 다양한 여러 노드 또는 이펙터에 대한 데이터를 설정하거나 검색하기 위해, 원하는 각 노드 또는 이펙터를 통해 반복하여 각 노드 또는 각 이펙터에 대해 이러한 함수 중 하나를 한 번씩 호출할 수 있습니다.
이 방법은 개념적으로 간단하고 특히 적은 수의 노드 또는 이펙터에 대해 데이터를 설정하거나 검색하는 데 적합합니다. 예를 들어 목표점을 단일 팔 다리에 할당하는 IK 제어기를 작성하는 경우 이러한 함수 중 하나를 사용하여 해당 이펙터의 변환을 설정할 수 있습니다. 그러나 많은 노드 또는 이펙터에 대해 데이터를 설정하거나 검색해야 하는 경우(예를 들어 게임 엔진 캐릭터에 포즈를 다시 적용하기 위해 HIKCharacterState에 포함된 해석 결과를 검색하는 경우) 이 방법은 아래에 설명한 데이터 세트 방법을 사용하는 것보다 효과적이지 않습니다.
HIKCharacterState에서 각 노드 또는 HIKEffectorSetState에서 각 이펙터에 대해 데이터를 설정하고 검색하기 위해 별도의 함수를 사용하는 대신 데이터 세트 및 동봉된 데이터 설명을 사용하여 즉시 여러 노드의 상태를 동기화할 수 있습니다.
이 방법은 일반적으로 위에 설명한 반복적인 방법을 사용하는 것보다 훨씬 빠르고 필요한 함수 호출의 수를 줄이는 추가적인 이점도 있습니다. 그러나 이 방법은 시작하여 실행하기 위해 좀더 고급 설정 및 메모리 관리가 필요합니다.
데이터 세트는 여러 노드 또는 이펙터의 변환, 방향 및 배율 조정을 포함할 수 있는 연속적인 단일 메모리 블록입니다. 이 데이터에 대한 포인터는 16바이트로 정렬되어야 합니다.
데이터 세트 내에서 각 노드 또는 이펙터에 대한 정보는 불연속 데이터 블록에 순차적으로 포함됩니다. 첫 번째 데이터 블록에는 하나의 노드 또는 이펙터에 관련된 모든 데이터가 들어 있고, 다음 데이터 블록에는 다음 노드 또는 이펙터에 대한 동일한 데이터가 들어 있고 그 다음 노드 또는 이펙터 등에도 마찬가지 입니다. 각 데이터 블록은 정확하게 동일한 방법으로 구성되어야 합니다. 데이터 블록 내에서 각 데이터 유형의 오프셋 및 데이터 블록의 전체 크기(또는 보폭)가 정확하게 모든 노드 또는 이펙터에 대해 동일해야 합니다. 예를 들어 노드의 변환 데이터가 한 데이터 블록에 대해 32바이트의 오프셋에 있는 경우 다른 모든 데이터 내에서도 동일한 오프셋에 위치해야 합니다. 데이터 블록 내의 모든 오프셋은 16바이트로 정렬되어야 합니다.
또한 자체 용도로 이와 같은 데이터를 포함하는 것이 편리한 경우 데이터 블록은 HumanIK에서 사용되지 않는 다른 임의 데이터를 포함할 수 있습니다.
동봉한 각 데이터 세트에 대해 데이터 설명을 제공해야 합니다. 데이터 설명은 데이터 세트의 메모리 레이아웃을 정의하는 구조입니다. 예를 들어 노드 또는 이펙터가 정의되는 순서(데이터 블록이 해당 노드 ID 또는 이펙터 ID에 적용), 각 데이터 블록 및 데이터 보폭 내에서 변환, 회전 및 배율 조정 데이터의 오프셋(각 데이터 블록의 전체 크기)이 있습니다.
데이터 설명에 사용해야 하는 구조는 HIKCharacterStates 또는 HIKEffectorSetStates에서 데이터를 설정하고 검색하는지 여부, 변환 매트릭스 또는 개별 변환, 방향, 배율 조정 값을 사용하여 애니메이션 데이터를 나타내는지 여부에 따라 달라집니다.