記事ディレクトリ
3D アプリケーション開発に QML を使用し、3D シーンを最適化し、デザインを最適化すると、3D アプリケーションのパフォーマンスに大きな影響を与えます。この記事では、3D シーンを最適化するためのいくつかのルールと方法について説明します。この記事の内容や意見のほとんどは公式文書を参照し、実際の使用状況と組み合わせたものです。
1. 4つの3Dシーン設計方法
3D シーンを作成および結合するには、さまざまな方法があります。例: 高度なシーン、低レベル シーン、混合シーン、頂点カラー シーン。高度なシーンには、他のバージョンのシーンよりも多くのオブジェクトが含まれています。低レベル、ハイブリッド、および頂点シーンは、ジオメトリとベイク処理されたマテリアルをテクスチャに組み込むことによって最適化されているため、含まれるオブジェクトが比較的少なくなります。次の図は、ナビゲーター ビューの各シーンのコンポーネントを示しています。これは、シーン間の構造の違いを比較して示すために使用されます。
(1-1) 下位シーン
上の図に示すように、低レベル シーンには合計 12 個のオブジェクトが含まれています。各モデル (キャビネット、ランプ、プレート、シンクなど) は個別のメッシュです。
(1-2) 高度なシナリオ
上の画像に示すように、トール シーンには合計 27 個のオブジェクトが含まれています。このシーンは、その他の点では低レベルのシーンと似ていますが、詳細とアニメーション化されたコンポーネント (開閉可能なキャビネットのドアやオーブンのラッチなど) が追加されています。
(1-2) ミックスシーン
ハイブリッド シーンは、すべてのメッシュを 1 つのオブジェクトに結合し、すべてのマテリアルが 1 つのテクスチャにベイク処理されます。
(1-3) 頂点カラーシーン
シーンはすべてのメッシュを 1 つのオブジェクトに結合します。メッシュの色は.mesh
ファイルの頂点データによって記述されます。これにはマテリアルが含まれますが、テクスチャは含まれません。
このセクションでは、高レベル シーン、低レベル シーン、混合シーン、頂点カラー シーンの 4 つのシーンは、本質的に 3D シーンを構成する方法です。高度なシーンでは、多くの 3D オブジェクトが存在しますが、なぜこれほど多くの 3D オブジェクトを含める必要があるのでしょうか? ほとんどの場合、それは合計するために小さなオブジェクトを分離するため动画效果
です动画控制
。シーンにアニメーション要件がない場合、シーンと頂点カラー シーンを混合する方法を使用して 3D シーンをデザインでき、これによりアプリケーションのレンダリング パフォーマンスも向上します。
2. 3D シーンの最適化ルール
3D シーンのグラフィックス レンダリング パフォーマンスを最適化するには、まずシーン内の 3D オブジェクト、ライト、カメラ、またはコンポーネントにアニメーションを追加する必要があるかどうかを検討する必要があります。追加する必要がない場合は、シーンの構造を可能な限り単純化します。例: ジオメトリとベーキング マテリアルをテクスチャに組み合わせることができます。理想的には、3D 画像を 2D 画像に事前レンダリングするだけで十分です。シーンに同じメッシュの複数のインスタンスがあるかどうかを確認し、ある場合は、メッシュのインスタンスを 1 つだけインポートし、それをシーン内で複製し、各コピーに同じマテリアルを使用します。
(2-1)シーングラフ
Qt Design Studio では、シーン グラフは のツリー ビューNavigator
で。同時に、コード ビューでノード階層を表示することもできます。シーン グラフを最小限に抑えることで、シーンの実行に必要な作業を軽減できます。複雑な関数による深い階層の入れ子はパフォーマンス コストを増加させるため、シーン グラフを最適化するには、不要なグループや複雑な階層をできるだけ避ける必要があります。
(2-2) リソースファイルの最適化
レンダリング パフォーマンスを向上させるために、リソース ファイルの使用と読み込みを可能な限り削減します (実際の 3D アプリケーションの開発プロセスでは、さまざまな要因により、デザイン プロセスで多くのリソース ファイルが存在することがよくあります。一般的な方法は次のとおりです: リソースを最適化する)開発中のファイル) 。
3D マテリアル モデルを設計するときは、目的のモデリング効果を実現するために、使用する三角形または頂点の数をできるだけ少なくするようにしてください。3D シーンをレンダリングする場合、グラフィックスの数が少ないほどメモリ要件が軽減され、レンダリングが高速になるためです。
(2-3) CPUパフォーマンスの最適化
3D オブジェクトの表示には、大量の CPU または GPU 処理が必要です。各 3D コンポーネントの処理にはリソースが消費されるため、表示されるオブジェクトの数を減らすと CPU の負荷が軽減されます。最適化の提案は次のとおりです。
(1) 隣接しテクスチャを共有するオブジェクトを結合します。
注: テクスチャを共有しないオブジェクトをマージしても、シーンの実行時の CPU パフォーマンスは向上しません。
(2) 異なるテクスチャを 1 つのテクスチャ アトラスに結合して、マテリアルの使用量を削減します。
(3) オブジェクトを複数回レンダリングすることは避けてください。
(2-4) モデルの形状の最適化
(1) モデルで使用される三角形の数を減らします。
(2) UV マップされた継ぎ目と頂点を 2 倍にして作成されたハード エッジの数を減らします。
3. まとめ
次の表は、3D シーンの最適化に関連するベスト プラクティスをまとめたものです。
シリアルナンバー | 3D動作 | ベストプラクティスのアドバイス |
---|---|---|
1 | 3D シーンから最高のパフォーマンスを引き出す | アニメーションが必要ない場合は、3D シーンを 2D 画像に事前レンダリングできます。 |
2 | シーン内のオブジェクトのアニメーション | すべての静的オブジェクトがマージされ、アニメーション化された各コンポーネントのうち 1 つだけがエクスポートされます。 |
3 | カメラアニメーション | この場合、2D イメージの使用はお勧めできませんが、すべてのジオメトリ、ベイク処理されたライティング、およびマテリアルを 1 つのマテリアルに組み合わせる必要があります。 |
4 | 照明アニメーション | 最適化方法は「カメラアニメーション」と同じです |
5 | メッシュで区切られた 3D シーンで最高のパフォーマンスを実現 | 同じメッシュのすべてのインスタンスに同じマテリアルを使用する |
6 | 実行時にメッシュレンダリングを無効にする | 特定のメッシュを分離して、他のコンポーネントを組み込みます。 |
7 | 低メモリのベイクテクスチャを使用する | メッシュカラーを頂点カラーにベイク処理する |
最近のソフトウェアでは、3D 開発はより高度な開発です (ゲームを除く、笑)。Qt Quick が提供する 3D 開発の基本コンポーネントも非常に強力です。Qt の上位バージョンでは、3D パフォーマンスがさらに最適化され、3D 開発が 1 つとして最適化されています。 Quick の今後の開発の方向性については、公式の最適化とメンテナンスも数多く行われています。
以下は、公式が提供する車両中央制御端末ソフトウェアのデモです。ソフトウェアに 3D 要素が組み込まれており、直感的でクールです。
Qt3D シーン-車両ターミナル-デモ効果