별도의 TQS 값을 사용하여 이펙터 데이터 설정 및 검색

다음 절차는 각 노드의 변환, 방향, 배율 조정 및 IK 제약 조건 값을 나타내기 위해 별도의 숫자 배열이 포함된 데이터 세트를 사용하여 HIKEffectorSetState에서 여러 이펙터에 대한 데이터를 설정하고 검색하는 방법을 설명합니다.

HIKEffectorSetState에서 이펙터 데이터 설정

단계 1: 데이터 블록 구성

16바이트로 정렬된 메모리 버퍼에서 각 노드에 대해 다음 항목을 저장합니다.

  • 전역 공간에서 이펙터의 변환을 정의하는 4개의 부동 소수점 숫자
  • 쿼터니언으로 표시된, 전역 공간에서 이펙터의 방향을 정의하는 4개의 부동 소수점 숫자
  • 전역 공간에서 이펙터의 배율 조정을 정의하는 4개의 부동 소수점 숫자
  • 이펙터에 대해 각각 변환 도달, 회전 도달, 당기기 및 저항 제약 조건의 값을 정의하는 4개의 부동 소수점 숫자. 이러한 값은 0.0에서 1.0 사이에 있어야 합니다.

위에 나열된 각 항목은 16바이트로 정렬되어야 합니다.

이들 값이 위에 나열한 순서대로 있을 필요는 없습니다. 예를 들어 배율 조정 값이 변환 값 앞에 올 수 있습니다.

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

// first Effector 
//----translation values------\\  //---orientation values---\\ //----scaling values----\\
{-45.95f, 87.81f, -205.81f, 0.0f, -0.54f, 0.0f, -0.05f, 0.83f, 0.16f, 0.16f, 0.16f, 1.0f,
//--constraint values--\\
 0.5, 0.5, 1.0, 0.0},
// second Effector 
//----translation values------\\  //---orientation values---\\ //----scaling values----\\
{-36.91f, 85.10f, -203.83f, 0.0f, -0.39f, 0.57f, -0.40f, 0.58f, 0.16f, 0.16f, 0.16f, 1.0f,
//--constraint values--\\
 0.75, 0.75, 0.5, 0.0},
// third Effector 
//----translation values------\\  //---orientation values---\\ //----scaling values----\\
{-37.17f, 47.86f, -218.01f, 0.0f, -0.21f, 0.66f, -0.24f, 0.67f, 0.16f, 0.16f, 0.16f, 1.0f,
//--constraint values--\\
 1.0, 1.0, 0.5, 0.25},
...

단계 2: 데이터 설명 작성

이 데이터 설명은 HIKEffectorDataDescription 구조의 인스턴스여야 합니다. 데이터 설명에 대해 다음 항목을 지정해야 합니다.

  • 각 이펙터의 데이터 블록 내 변환 데이터의 오프셋. 이 오프셋은 16바이트로 정렬되어야 합니다.
  • 각 이펙터의 데이터 블록 내 방향 데이터의 오프셋. 이 오프셋은 16바이트로 정렬되어야 합니다.
  • 각 이펙터의 데이터 블록 내 배율 조정 데이터의 오프셋. 이 오프셋은 16바이트로 정렬되어야 합니다.
  • 각 이펙터의 데이터 블록 내 IK 제약 조건 값의 오프셋. 이 오프셋은 16바이트로 정렬되어야 합니다.
  • 각 데이터 블록의 보폭 또는 크기. 각 데이터 블록에는 4개의 부동 소수점 숫자의 배열 3개와 제약 조건 값에 대한 4개의 부동 소수점 숫자가 포함되어 있기 때문에 데이터 블록에 HumanIK에서 사용되지 않는 추가 사용자 정의 정보가 들어 있지 않는 한, 이 값은 일반적으로 sizeof(float) * 16과 동일합니다.
  • 이러한 매트릭스가 저장되도록, 매트릭스가 데이터 세트에 저장된 모든 이펙터의 고유 ID가 포함된 배열. 이 배열의 마지막 요소는 특별한 열거 값 HIKLastNode되어야 합니다.

    또한 이 배열은 특별한 값 HIKNotUsed를 포함할 수 있고 이 값은 HumanIK가 해당 데이터 블록을 건너뛰도록 지시합니다.

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

int myUsedEffectors[] = {HipsEffectorId, 
                         LeftAnkleNodeId,
                         RightAnkleNodeId,
                         ...
                         RightFootPinkyEffectorId,
                         HIKLastNode
                         };
HIKEffectorDataDescription myDesc = {0,
                                     16,
                                     32,
                                     48,
                                     sizeof(float)*16,
                                     myUsedEffectors
                                     };

단계 3: HumanIK에 데이터 전달

데이터 세트에 포함된 변환, 회전, 배율 조정 및 IK 제약 조건 값을 HIKCharacter에 적용하려면 HIKSetEffectorStateDataTQS() 함수를 호출합니다.

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

HIKSetEffectorStateDataTQS(lEffectorSetState,
                           &myDesc,
                           (void *)goalBuffer[frameId]);

HIKEffectorSetState에서 이펙터 데이터 검색

각 이펙터의 변환, 쿼터니언 회전 및 배율 조정 값에 대한 별도의 숫자 배열을 사용하여 HIKEffectorSetState에서 이펙터 데이터를 검색하려면 다음을 제외하고 위의 별도의 TQS 값을 사용하여 이펙터 데이터 설정 및 검색에 설명한 것과 유사한 프로세스를 따라야 합니다.