2

みなさん、こんにちは。

みなさん、こんにちは。: )

VR エクスペリエンス ユーザーの動きを検出し、対応するアバターのポーズまたは仮想世界内のユーザーの表現を更新する VR エクスペリエンスを UE4 に実装しています。

そうするために、このトピックで言われていることに基づいて、C++ でこの動作を実装しました。

https://forums.unrealengine.com/showthread.php?25264-Pose-a-skeletal-mesh-in-runtime

つまり、USkeletalMeshComponent (スケルタル メッシュが画面に表示されるもの) と UPoseableMeshComponent (USkeletalMeshComponent の「マスター ポーズ コンポーネント」として設定されている) があり、各トラッキング センサーから回転データをクォータニオンとして受け取ります。

一方では、UPoseableMeshComponent のメッシュは USkeletalMeshComponet のメッシュに設定されます。一方、ポーズ可能なメッシュのボーンは、各ボーンのトラッキング センサーからの対応する回転データで更新されます。UPoseableMeshComponent が「マスター ポーズ コンポーネント」として設定されているため、それに応じて骨格メッシュが自動的に更新されますUSkeletalMeshComponent。

これは、指の指節ではないすべてのボディ パーツを操作する場合に完全に機能します。これは、次のように、ワールド空間でこれらのボディ パーツに回転が設定されているためです。

m_pPoseableMeshComp->SetBoneRotationByName(strBoneName, qBoneRotation.Rotator(), EBoneSpaces::WorldSpace);

ただし、技術的な理由から、LOCAL 空間で各指の指節のボーンの回転を設定することが必須ですが、ポーズ可能なメッシュはワールド空間とコンポーネント空間でのみ機能するようです。「SkinnedMeshComponent.h」をチェックアウトすると、EBoneSpaces::Type に「LocalSpace」列挙値がありますが、コメントされています。

/** Values for specifying bone space. */

 UENUM()
 namespace EBoneSpaces
 {
     enum Type
     {
         /** Set absolute position of bone in world space. */
         WorldSpace        UMETA(DisplayName = "World Space"),
         /** Set position of bone in components reference frame. */
         ComponentSpace    UMETA(DisplayName = "Component Space"),
         /** Set position of bone relative to parent bone. */
         //LocalSpace        UMETA( DisplayName = "Parent Bone Space" ),
     };
 }

「コンポーネント参照フレームでボーンの位置を設定する」というフレーズが理解できません。ローカル空間の「代替」としては機能していないようです (骨がアバターのピボット ポイントを中心に回転しているかのように)。ポーズ可能なメッシュのローカル空間で回転を設定する他の方法、または回避策はありますか?

よろしくお願いします。: )

4

0 に答える 0