HumanIK を使用したときにキャラクタが期待した動作をしない場合(キャラクタが正常でない、あるいは不可能なポーズをするなど)は、次の一連の手順で問題を切り出し、適切な解決策が見つかる場合があります。
HIKCharacter を作成するたびに、HumanIK が新しく作成された HIKCharacter オブジェクトにポインタを返す前に、内部で照合されるランタイム ライセンス キーを提供する必要があります。このライセンス キーが正しくセットアップされていない場合や、付与されているキーの有効期限が切れている場合(あらかじめ設定された期限を超えた場合)、HumanIK インバース キネマティクスとリターゲット ソルバがキャラクタに対しランダムに、不正な位置データを生成します。
失効したライセンスは、以前は HumanIK が正常な結果を出力していたにもかかわらず HumanIK に突然問題が発生したり、HumanIK ソルバを呼び出すたびに同様の問題が発生する原因となる場合があります。
「HumanIK のライセンス キーを設定する」の手順に正しく従っているか確認してください。 ランタイム ライセンス キーの有効期限が切れている場合、Autodesk サポートに連絡して、プロジェクトの新しいライセンス キーを依頼してください。詳細は、「サポート」を参照してください。
Windows プラットフォームで HumanIK ライブラリを、キャラクタライゼーションとプロセスソルビング中に発生するエラーと警告に加え、必要に応じて HumanIK コールスタックへのアクセスをログに記録できる Verbose 構成で使用できます。
開発プロセス中にこのバージョンのライブラリと連携し、警告やエラーを一時的にモニタリングすることで、HumanIK ソルバにより生成されたポーズで明らかになることがある問題の診断に役立つ場合があります。 詳細は、「デバッグ メッセージをログに記録する」を参照してください。
HIKCharacterCreate() または HIKCharacterCreateInPlace() の呼び出しがヌルのポインタを返す場合、ランタイム ライセンス キーかキャラクタ定義でセットアップしたノードに問題がある場合がほとんどです。
問題の原因を特定するため、HIKCharacterDefinition を hikvalidation.h で定義した HIKValidateRequiredBone()、HIKValidateSpine()、HIKValidateNeck() 検証関数に渡すことができます。これらの関数のいずれかが false を返す場合、生成されたエラー文字列を確認して、問題の原因を特定します。
または、HumanIK ライブラリの Verbose ビルドを使用している場合、HIKValidateHierarchy() を呼び出せます。これは、上記の関数をシーケンスで呼び出し、生成したエラーをログに書き込むものです。
上記で説明した検証関数で、キャラクタ定義に問題が見つからなかったことが示された場合、ランタイム ライセンス キーの有効期限が切れている恐れがあります。その場合、Autodesk サポートに連絡し、プロジェクトの新しいライセンス キーを依頼してください。詳細は、「サポート」を参照してください。
HIKCharacterizeGeometry() の呼び出しで false が返ってきた場合、大抵はキャラクタにセットアップした T スタンスに問題があります。
問題の原因を特定するため、HIKCharacter を hikvalidation.h で定義した HIKValidateHipsXAxis()、HIKValidateArmsXAxis()、HIKValidateSpineYAxis()、HIKValidateBonePosition() 検証関数に渡すことができます。 これらの関数のいずれかが false を返す場合、生成されたエラー文字列を確認して、問題の原因を特定します。
または、HumanIK ライブラリの Verbose ビルドを使用している場合、HIKValidateGeometry() を呼び出せます。これは、上記の関数をシーケンスで呼び出し、生成したエラーをログに書き込むものです。
HumanIK の使用では、ゲーム エンジンと HumanIK との間のアニメーション データの双方向フローを行う必要があります。HumanIK ソルバを呼び出してキャラクタの新しいポーズを作成するたびに、通常、キャラクタのスケルトンのジョイントの位置と方向をゲーム エンジンから取得し、その情報を HIKCharacterState に、「HumanIK」で説明した形式で保存する必要があります。 同様に、HumanIK ソルバで生成されたポーズを HIKCharacterState から取得し、その情報をゲーム エンジンに再度転送する必要があります。
転送すると、この双方向データ フローは HumanIK を使用するプロセスに対し処理されますが、組み込みの初期にセットアップするのは簡単ではありません。HIKCharacterState および HIKEffectorSetState でアニメーション データを設定し取得するための HumanIK で使用できるさまざまな関数の詳細については、「アニメーション データを設定および取得する」を参照してください。
HumanIK でキャラクタを変更して、ゲーム エンジンがデータを正しく変換するかを検証します。問題を確認するために行える手法の 1 つに次があります。
送信したポーズと全く同じポーズになるはずです。ゲーム エンジンの最初のポーズと全く同じにならない場合、HIKCharacterState でのデータの設定方法か、HIKCharacterState からデータを取得する方法か、あるいはその両方に問題があります。
キャラクタのデフォルトのスタンスが良好で、ゲーム エンジンと HumanIK との間でデータ フローとすべてのアニメーション データが確実に転送されている場合、問題はキャラクタの HIKPropertySetState の 1 つまたは複数のキャラクタ プロパティに予期しない値が設定されていることが原因である場合があります。
問題がある操作を、すべてのプロパティがデフォルト値になっている新しく作成した HIKPropertySetState で繰り返してみます。これにより問題が解決する場合は、予期しない動作の原因となっているプロパティ設定が見つかるまで、前回設定したプロパティ値に 1 つずつ戻してみます。
上記のすべての手順で問題が修正されなかった場合で、キャラクタが依然として予期しない動作が続いている場合は、Autodesk サポート エンジニアが支援のため待機しています。
素早い解決のためには、担当のエンジニアが状況を理解し、問題を解決するために考えられる手段を特定できるよう、問題についてできるだけ多くの情報と状況を、できるだけ早く提供するようにしてください。たとえば、次のような情報が有益です。
お問い合わせ先については、「サポート」を参照してください。