Qt 3D Animation C++ Classes
Qt 3D のアニメーションモジュールは、Qt 3D の活用を始めるのに役立つ、あらかじめ作成された要素のセットを提供します。詳細...
このモジュールはバージョン 6.8 以降、非推奨となっています。新しいコードでの使用は強く推奨しません。
名前空間
クラス
Qt3D アニメーション用の抽象基底クラス | |
キーフレームアニメーションデータを提供する型の基底クラス | |
アニメーションの再生機能を提供する型の基底クラス | |
アニメーションブレンドツリーの構築に使用される型の基底クラス | |
加算係数に基づいて、2つのアニメーションクリップの加算ブレンドを実行します | |
以下のものにキーフレームアニメーション機能を提供するQt 3D | |
アニメーションコールバックオブジェクトを表す | |
キーフレームアニメーションデータを指定します | |
アニメーションデータを含むクラス | |
ファイルからキーフレームアニメーションデータを読み込むことを可能にする | |
アニメーション用のコントローラクラス | |
アニメーションをグループ化するクラス | |
ブレンドノードのツリーに対するアニメーション再生機能を提供するコンポーネント | |
クリップ内のチャンネルをコールバックオブジェクトの呼び出しにマッピングできるようにする | |
QAnimationClipData のチャンネルを定義します。アニメーションシステムは、各チャンネルコンポーネントを個別に補間しますが、「Rotation」(大文字小文字を区別)という名前の QChannel の場合を除きます。この場合、4 つの QChannelComponent があり、各 QChannelComponent に対して同数のキーフレームがあります。 その場合、補間はSLERPを使用して行われます | |
クリップ内のチャンネルを、アプリケーション内のオブジェクトのプロパティにマッピングすることができます | |
クリップ内のチャンネルを、アプリケーション内のオブジェクトのプロパティにマッピングすることができます。 | |
シンプルなアニメーション再生機能を提供するコンポーネント | |
ブレンドツリーにクリップを含めるために使用されるクラス | |
キーフレームを処理するための基底クラス | |
QTransformに対する単純なキーフレームアニメーションを実装するクラス | |
正規化された係数に基づいて、2つのアニメーションクリップの線形補間を実行します | |
ブレンドシェイプアニメーションにモーフターゲットを提供するクラス | |
ブレンドシェイプ・モーフィングアニメーションを実装するクラス | |
頂点ブレンドによるモーフィングアニメーションを実装するクラス |
詳細な説明
このモジュールは現在開発中ですが、テクノロジープレビューとして利用可能です。つまり、不安定であり、変更される可能性が高く、あくまで便宜上提供されているものです。
#include <Qt3DAnimation>対応する C++ ライブラリをリンクするには、qmake プロジェクトファイルに以下を追加してください:
QT += 3danimationクラス、型、および関数は、Qt3DAnimation 名前空間の下で宣言されています。
概要
Qt 3D のアニメーションモジュールは、シミュレーション内のオブジェクトのプロパティに適用できるアニメーションの指定および使用をサポートします。当初、このモジュールはキーフレームベースのアニメーションをサポートしています。つまり、プロパティの値は特定の時点で「キー」として設定され、再生時にはキーフレーム内の既知の値の間を補間することでプロパティ値が計算されます。Qt 3D のアニメーションモジュール内でのアニメーションの評価処理はすべて、Qt 3D スレッドプール上で実行されます。これにより、アニメーションがスムーズに実行され、高いスループットに対応できるようになります。
アニメーションデータ
キーフレームアニメーションデータは、Qt3DAnimation::QKeyFrameData などのQt 3D アニメーション API を使用してプログラムで作成することも、Blender、Maya、3D Studio Max などのデジタルコンテンツ制作(DCC)ツールから取得することもできます。Qt 3D では、Blender 用のアニメーションデータ用エクスポートスクリプトの例を提供しています。 現在、Qt 3D のアニメーション機能が扱うフォーマットは、シンプルなJSONベースのフォーマットです。これにより、開発者もアーティストもアニメーションデータを容易に扱えるようになります。実行時の処理に最適化されたフォーマットは、今後追加される予定です。
キーフレームアニメーションデータは、Qt3DAnimation::QAnimationClipLoader クラスを使用してファイルから読み込むことができます。アニメーションデータをプログラムで指定するには、Qt3DAnimation::QAnimationClip クラスを使用します。
デフォルトでは、キーフレームデータは3次ベジエ曲線を使用して指定されます。これにより、少数のキーフレームデータポイントから滑らかなアニメーションを作成できます。その他の補間方式については、今後追加される予定です。
アニメーションの再生
キーフレームを含むアニメーションデータに加え、Qt 3D Animation は、アニメーションを再生し、その結果として得られるプロパティ値をシミュレーション内のオブジェクトのプロパティにマッピングするための API も提供しています。現在、アニメーションを再生するには 2 つの方法があります:
これらはいずれもQt3DCore::QComponent のサブクラスとして実装されているため、Qt3DCore::QEntity オブジェクトによってこれらのタイプのオブジェクトを集約し、シミュレーション対象のエンティティにアニメーション機能を追加することができます。
シンプルなアニメーション再生
Qt3DAnimation::QClipAnimator クラスは、一度に1つのQt3DAnimation::QAbstractAnimationClip を再生できます。エンティティにアニメーションを追加するには、Qt3DAnimation::QClipAnimator クラスのインスタンスを、そのエンティティのcomponents プロパティに追加するだけです。
Qt 3D のAnimationモジュールは、QPropertyAnimation やAbstractAnimation とは若干異なるアプローチを採用しています。これらのアニメーションフレームワークでは、アニメーションがアニメーション値とターゲットとなるオブジェクトおよびプロパティの両方を指定します。一方、Qt 3D のアニメーションコンポーネントでは、これら2つの相互に独立した概念が分離されています。例えば、Qt3DAnimation::QClipAnimator コンポーネントには、アニメーションデータ(Qt3DAnimation::QAnimationClip またはQt3DAnimation::QAnimationClipLoader )を指定するためのclip プロパティがあります。
これにより、アニメーション値の計算は可能になりますが、これらの値をオブジェクトのプロパティにマッピングするには、さらに情報が必要です。これは、Qt3DAnimation::QChannelMapping オブジェクトのリストを含むQt3DAnimation::QChannelMapper によって実現されます。Qt3DAnimation::QChannelMapping は、アニメーションクリップの特定のチャンネルを、ターゲットオブジェクトの指定されたプロパティにマッピングするために使用されます。このようにアニメーションデータとプロパティのマッピングを分離することで、アニメーションデータやオブジェクトを複数用意することなく、同じアニメーションを多くのオブジェクトに適用できます。また、アニメーションデータを他のオブジェクトに簡単に再適用することも可能になります。
アニメーションのブレンド再生
Qt3DAnimation::QBlendedClipAnimator コンポーネントを使用すると、Qt3DAnimation::QClipAnimator で可能な範囲を超えて、ターゲットプロパティにプロパティの変更を適用する前に、複数のアニメーションクリップをブレンドすることができます。このanimatorコンポーネントも、標準のQt3DAnimation::QClipAnimator コンポーネントと同様にチャンネルマッパーを受け取ります。ただし、単一のアニメーションクリップを指定する代わりに、blendTree プロパティを設定して、ブレンドツリーのルートノードを指定する必要があります。
ブレンドツリーとは、ブレンドツリーノード上のプロパティの関数として、アニメーションクリップがどのように集約またはブレンドされるかを表すデータ構造です。現在サポートされているブレンドツリーノードは以下の通りです:
ソースとなるアニメーションクリップの入力は、Qt3DAnimation::QClipBlendValue クラスのインスタンスを使用して、ブレンドツリー内のリーフノードとして指定されます。これらのアニメーションクリップは、多種多様な方法で組み合わせることができます。 現時点では、Qt3D Animationモジュールは線形補間(LERP)および加算ブレンド演算を提供しています。今後、さらに多くのブレンドノードタイプが追加される予定です。これらには、少なくとも一般化されたLERPノードと重心LERPノードが含まれる見込みです。
例として、次のブレンドツリーを考えてみましょう。
Clip0----
|
Lerp Node----
| |
Clip1---- Additive Node
|
Clip2----Clip0 が3秒間の歩行アニメーションサイクルを表し、Clip1 が2秒間の走行アニメーションサイクルであると仮定します。これらは両方とも、Lerp ブレンドノードの入力(および依存関係)です。Lerp ノードの評価結果は、Lerp ノードのblendFactor プロパティに依存します。これは、例えばヒューマノイドキャラクターエンティティの速度にバインドされる可能性があります。キャラクターの速度が上がるにつれて、アニメーションはClip0 の歩行アニメーションからClip1 の走行アニメーションへと徐々にクロスフェードしていきます。
さらに、Clip2 が、追加可能なバリエーションアニメーション(例えば、腕を振ったり頭を振ったりする動作)を表していると仮定しましょう。この追加クリップの合成量は、Additive ブレンドノードのadditiveFactor プロパティによって制御できます。
ブレンドツリーを評価する際には、正規化された時間(または位相)が使用されるため、異なる再生時間のクリップでも問題なくブレンドすることができます。例えば、歩行と走りのアニメーションクリップの長さが異なっていても、アニメーターが足音が同じ位相で揃うように作成していれば、これらをスムーズに補間することができます。
このことから、ブレンドされたクリップの再生時間は、実際にはツリー内の各ノードのブレンド係数によって決まることがわかります。上記の例でLerp ノードのみを考慮すると、Lerp ノードのブレンド係数が0の場合、Clip0の「walk」アニメーションのみが使用され、再生時間は3秒になります。 ブレンド係数が1の場合、再生時間は2秒になります。中間値のブレンド係数では、再生時間は3秒と2秒の間で線形補間されます。
独自のブレンドツリーを定義することで、入力アニメーションクリップのコレクションをどのように組み合わせるかを完全に制御できます。ブレンドツリーは、ブレンドノードのプロパティによって設定できます。また、ブレンドノード自体のプロパティは単なる標準プロパティであるため、必要に応じて他のアニメーションによって制御することも可能です。
参考
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.