バーチャルアシスタント
Qt Quick アプリケーションでは、QML とタイムラインを使って作成したダイナミックなアニメーションでバーチャルアシスタントの 3D モデルを表示します。
バーチャルアシスタントの例では、バーチャルアシスタントの3Dモデルにタイムラインアニメーションで生命を吹き込み、ユーザーのエンゲージメントとインタラクションを高める方法を示します。
3Dモデルのインポート
Qt Design Studio でモデルを読み込むには、.gltf ファイルをプロジェクトにインポートするだけです。Qt Design Studioは、オブジェクトを表すQMLファイルを自動的に作成します。また、必要なアセットも生成されます。Qt Design Studioを使用しない場合は、手動でBalsamツールを実行する必要があります。この例では、生成された QML ファイルを修正し、ステート、アニメーション、および仮想アシスタントの特定のパーツをピックするための不可視モデルを追加しています。
シーン環境の準備
このシーンでは、スカイボックスを作成し、自然な照明を提供するためにHDR画像を使用しています。
environment: ExtendedSceneEnvironment { backgroundMode: SceneEnvironment.SkyBox lightProbe: Texture { source: Constants.sceneName } antialiasingMode: SceneEnvironment.MSAA antialiasingQuality: SceneEnvironment.VeryHigh fxaaEnabled: true probeExposure: 0.6 probeOrientation: Qt.vector3d(0, settingsPanel.skyboxRotation, 0) specularAAEnabled: true tonemapMode: SceneEnvironment.TonemapModeLinear vignetteEnabled: true vignetteRadius: 0.15 }
カメラオプション
カメラのプロパティは設定パネルから変更できます。スライダを使用して、視野(FOV)とスカイボックスの回転を操作できます。チェックボックスは、カメラの位置と回転をインタラクティブに変更できるOrbitCameraController を有効にします。
アニメーション
アニメーションは、複数のTimeline タイムラインとKeyframe キーフレームを使用して作成されます。各Timeline はバーチャルアシスタントの異なる状態と接続されています。状態が変わると、接続されたアニメーションがすぐに再生を開始します。各アニメーションが終了すると、オブジェクトはデフォルトの状態に戻り、モデルnodes の位置や回転などのデフォルト値が復元されます。アニメーションは、スケルトンのノードのプロパティ値を変更し、顔の要素(目、口)をアニメーションさせるために、異なるmorph targets のウェイトを変更します。
アニメーションを実行するには、アニメーションパネルのボタンを使います。また、手、下半身、顔などの特定のモデル要素をクリックして、モデルのその部分に関連するアニメーションを有効にします。
スケルトンアニメーション
- 入口アニメーション
- 退場アニメーション
- シーン探索アニメーション
- バク転アニメーション
- 下半身バウンドアニメーション
- 左右の手を振るアニメーション
モーフターゲットアニメーション
- 顔のアニメーション(幸せと悲しみ)
モデルの左手を振るアニメーションの実装例:
Timeline { id: leftHandWavingTimeline animations: [ TimelineAnimation { id: leftHandWavingAnimation onFinished: node.restoreDefaults() running: false loops: 1 duration: 2000 to: 2000 from: 0 } ] startFrame: 0 endFrame: 2000 enabled: false KeyframeGroup { target: hand_l property: "x" Keyframe { value: 2.89 frame: 400 } Keyframe { value: 2.89 frame: 1600 } Keyframe { value: 1.89 frame: 2000 } } KeyframeGroup { target: hand_l property: "y" Keyframe { value: 1 frame: 400 } Keyframe { value: 1 frame: 1600 } Keyframe { value: 0.5 frame: 2000 } } KeyframeGroup { target: hand_l property: "z" Keyframe { value: 1 frame: 400 } Keyframe { value: 1 frame: 1600 } Keyframe { value: -0.1 frame: 2000 } } KeyframeGroup { target: hand_l property: "eulerRotation.x" Keyframe { value: -15 frame: 400 } Keyframe { value: -5 frame: 700 } Keyframe { value: -15 frame: 1000 } Keyframe { value: -5 frame: 1300 } Keyframe { value: -15 frame: 1600 } Keyframe { value: -0.18 frame: 2000 } } KeyframeGroup { target: hand_l property: "eulerRotation.y" Keyframe { value: -15 frame: 400 } Keyframe { value: -30 frame: 1600 } Keyframe { value: -145 frame: 2000 } Keyframe { value: -40 frame: 700 } } KeyframeGroup { target: hand_l property: "eulerRotation.z" Keyframe { value: -88 frame: 400 } Keyframe { value: -30 frame: 700 } Keyframe { value: -86.05 frame: 1000 } Keyframe { value: -30 frame: 1300 } Keyframe { value: -86.05 frame: 1600 } Keyframe { value: -178.92 frame: 2000 } } KeyframeGroup { target: morphTarget38 property: "weight" Keyframe { value: 1 frame: 0 } Keyframe { value: 0.25 frame: 400 } Keyframe { value: 0.25 frame: 1600 } Keyframe { value: 1 frame: 2000 } } KeyframeGroup { target: morphTarget42 property: "weight" Keyframe { value: 0 frame: 2000 } Keyframe { value: 0.75 frame: 1600 } Keyframe { value: 0.75 frame: 400 } Keyframe { value: 0 frame: 0 } } KeyframeGroup { target: morphTarget27 property: "weight" Keyframe { value: 0 frame: 0 } Keyframe { value: 1 frame: 400 } Keyframe { value: 1 frame: 1600 } Keyframe { value: 0 frame: 2000 } } KeyframeGroup { target: morphTarget28 property: "weight" Keyframe { value: 1 frame: 2000 } Keyframe { value: 0 frame: 1600 } Keyframe { value: 0 frame: 400 } Keyframe { value: 1 frame: 0 } } }
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。