このページでは

Qt 3D Animation C++ Classes

Qt 3D のアニメーションモジュールは、Qt 3D の活用を始めるのに役立つ、あらかじめ作成された要素のセットを提供します。詳細...

このモジュールはバージョン 6.8 以降、非推奨となっています。新しいコードでの使用は強く推奨しません。

名前空間

クラス

Qt3DAnimation::QAbstractAnimation

Qt3D アニメーション用の抽象基底クラス

Qt3DAnimation::QAbstractAnimationClip

キーフレームアニメーションデータを提供する型の基底クラス

Qt3DAnimation::QAbstractClipAnimator

アニメーションの再生機能を提供する型の基底クラス

Qt3DAnimation::QAbstractClipBlendNode

アニメーションブレンドツリーの構築に使用される型の基底クラス

Qt3DAnimation::QAdditiveClipBlend

加算係数に基づいて、2つのアニメーションクリップの加算ブレンドを実行します

Qt3DAnimation::QAnimationAspect

以下のものにキーフレームアニメーション機能を提供するQt 3D

Qt3DAnimation::QAnimationCallback

アニメーションコールバックオブジェクトを表す

Qt3DAnimation::QAnimationClip

キーフレームアニメーションデータを指定します

Qt3DAnimation::QAnimationClipData

アニメーションデータを含むクラス

Qt3DAnimation::QAnimationClipLoader

ファイルからキーフレームアニメーションデータを読み込むことを可能にする

Qt3DAnimation::QAnimationController

アニメーション用のコントローラクラス

Qt3DAnimation::QAnimationGroup

アニメーションをグループ化するクラス

Qt3DAnimation::QBlendedClipAnimator

ブレンドノードのツリーに対するアニメーション再生機能を提供するコンポーネント

Qt3DAnimation::QCallbackMapping

クリップ内のチャンネルをコールバックオブジェクトの呼び出しにマッピングできるようにする

Qt3DAnimation::QChannel

QAnimationClipData のチャンネルを定義します。アニメーションシステムは、各チャンネルコンポーネントを個別に補間しますが、「Rotation」(大文字小文字を区別)という名前の QChannel の場合を除きます。この場合、4 つの QChannelComponent があり、各 QChannelComponent に対して同数のキーフレームがあります。 その場合、補間はSLERPを使用して行われます

Qt3DAnimation::QChannelMapper

クリップ内のチャンネルを、アプリケーション内のオブジェクトのプロパティにマッピングすることができます

Qt3DAnimation::QChannelMapping

クリップ内のチャンネルを、アプリケーション内のオブジェクトのプロパティにマッピングすることができます。

Qt3DAnimation::QClipAnimator

シンプルなアニメーション再生機能を提供するコンポーネント

Qt3DAnimation::QClipBlendValue

ブレンドツリーにクリップを含めるために使用されるクラス

Qt3DAnimation::QKeyFrame

キーフレームを処理するための基底クラス

Qt3DAnimation::QKeyframeAnimation

QTransformに対する単純なキーフレームアニメーションを実装するクラス

Qt3DAnimation::QLerpClipBlend

正規化された係数に基づいて、2つのアニメーションクリップの線形補間を実行します

Qt3DAnimation::QMorphTarget

ブレンドシェイプアニメーションにモーフターゲットを提供するクラス

Qt3DAnimation::QMorphingAnimation

ブレンドシェイプ・モーフィングアニメーションを実装するクラス

Qt3DAnimation::QVertexBlendAnimation

頂点ブレンドによるモーフィングアニメーションを実装するクラス

詳細な説明

このモジュールは現在開発中ですが、テクノロジープレビューとして利用可能です。つまり、不安定であり、変更される可能性が高く、あくまで便宜上提供されているものです。

#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.