Qt 3D Animation C++ Classes

Qt 3D Animation モジュールには、Qt 3D を使い始めるのに役立つ組み込み済みのエレメント一式が用意されています。もっと見る...

このモジュールは6.8以降非推奨です。新しいコードで使用しないことを強くお勧めします。

名前空間

Qt3DAnimation

Qt3DAnimation モジュールのクラスを含みます。

クラス

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のチャンネルを定義します。ただし、QChannelの名前が "Rotation"(大文字と小文字が区別されます)の場合、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 Animationモジュールは、シミュレーションのオブジェクトのプロパティに適用できるアニメーションの指定と使用をサポートします。当初、このモジュールはキーフレームベースのアニメーションをサポートしています。つまり、プロパティは特定の時間に値が「キー設定」され、再生時にプロパティ値はキーフレーム内の既知の値の間を補間して計算されます。Qt 3D Animation モジュール内のアニメーション評価は、すべてQt 3D スレッドプール上で行われます。これにより、アニメーションはスムーズに実行され、高いスループットまでスケールアップすることができます。

アニメーション・データ

キーフレームアニメーションデータは、Qt3DAnimation::QKeyFrameData のようなQt 3D Animation API を介してプログラムで作成することもできますし、Blender、Maya、3D Studio Max のようなデジタルコンテンツ作成(DCC)ツールから取得することもできます。Qt 3D は、Blender 用のアニメーションデータのエクスポートスクリプトの例を提供しています。現在のところ、Qt 3D Animationで使用されるフォーマットは、シンプルなJSONベースのフォーマットです。これにより、開発者とアーティストの両方がアニメーションデータを簡単に扱うことができます。ランタイム消費に最適化されたフォーマットは後で追加される予定です。

キーフレームアニメーションデータは、Qt3DAnimation::QAnimationClipLoader クラスを使ってファイルから読み込むことができます。アニメーション・データをプログラムで指定するには、Qt3DAnimation::QAnimationClip クラスを使用します。

デフォルトでは、キーフレームデータは3次ベジエ曲線を使用して指定されます。これにより、少数のキーフレームデータポイントから滑らかなアニメーションを作成できます。他の補間タイプは後で追加される予定です。

アニメーションの再生

キーフレームを含むアニメーションデータに加えて、Qt 3D Animationは、アニメーションを再生し、結果として得られるプロパティ値をシミュレーション内のオブジェクトのプロパティにマッピングするためのAPIも提供します。現在、アニメーションを再生する方法は2つあります:

どちらもQt3DCore::QComponent のサブクラスとして実装されており、これらのタイプのオブジェクトをQt3DCore::QEntity オブジェクトに集約することで、シミュレーションのエンティティにアニメーション機能を追加することができます。

単純なアニメーションの再生

Qt3DAnimation::QClipAnimator クラスでは、一度に一つのQt3DAnimation::QAbstractAnimationClip を再生することができます。エンティティにアニメーションを追加するには、Qt3DAnimation::QClipAnimator クラスのインスタンスをエンティティのcomponents プロパティに追加するだけです。

Qt 3D Animation モジュールは、QPropertyAnimationAbstractAnimation とは少し異なるアプローチをとります。これらのアニメーション・フレームワークでは、アニメーションはアニメーション値とターゲット・オブジェクトとプロパティの両方を指定します。Qt 3D のアニメーション・コンポーネントは、この2つの直交する概念を分離しています。たとえば、Qt3DAnimation::QClipAnimator コンポーネントには、アニメーション・データ(Qt3DAnimation::QAnimationClip またはQt3DAnimation::QAnimationClipLoader )を指定するためのclip プロパティがあります。

これによってアニメーションの値を計算することができますが、これらの値をオブジェクトのプロパティにマッピングするには、より多くの情報が必要です。これには、Qt3DAnimation::QChannelMapping オブジェクトのリストを含むQt3DAnimation::QChannelMapper を使用します。Qt3DAnimation::QChannelMapping 、アニメーションクリップの特定のチャンネルを、ターゲットオブジェクトの名前付きプロパティにマッピングするために使用します。このようにアニメーションデータとプロパティのマッピングを分離することで、アニメーションデータやオブジェクトのコピーを複数持つことなく、同じアニメーションを多くのオブジェクトに適用することができます。また、アニメーションデータを他のオブジェクトに簡単にリターゲットすることもできます。

ブレンドアニメーションの再生

Qt3DAnimation::QBlendedClipAnimator コンポーネントでは、Qt3DAnimation::QClipAnimator で可能なことを超えて、複数のアニメーション クリップをブレンドしてから、ターゲット プロパティにプロパティ変更を適用することができます。animator コンポーネントは、標準のQt3DAnimation::QClipAnimator コンポーネントと同様に、チャンネル マッパーを取ります。ただし、1つのアニメーションクリップを指定するのではなく、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のウォークアニメーションだけが使用され、3秒のデュレーションになります。ブレンドファクターが1の場合、デュレーションは2秒になります。ブレンドファクターが中間の場合、デュレーションは3秒と2秒の間で線形補間されます。

独自のブレンドツリーを定義することで、入力アニメーションクリップのコレクションをどのように組み合わせるかを完全にコントロールできます。ブレンドツリーは、ブレンドノードのプロパティで設定できます。また、ブレンドノードのプロパティは、標準的なプロパティなので、必要に応じて、他のアニメーションで動かすこともできます。

参考

© 2025 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.