Qt 3D レンダリングプロのヒント
Qt 3D では、最も単純な形状をレンダリングするために、いくつかの段階を経て様々な処理を行う必要があります。これらの段階で何か問題が発生すると、良い場合は期待したものと違うものが、悪い場合は真っ黒な画面が表示されてしまうかもしれません。
テクニック選択
Qt 3D には、様々なレンダリング API や API のバージョンに対応したシェーダを提供するためのテクニック選択メカニズムが用意されています。
不必要な時間の浪費を避けるために、テクニックの API フィルタデータがターゲットとするプラットフォームに対して正しいことを確認する必要があります。
順序の問題
レンダラーが実行する描画コールの順序は、シーン内のエンティティの順序と必ずしも同じではありません。
レンダラーは、グラフィックス API に送信されるコールを最適化しようとします。使用されているマテリアル/シェーダ、指定されたマテリアルに定義されているレンダリングステート、その深さ、2つのマテリアルに共通するパラメータなどに基づいて描画コールを順序付けます。
レンダリングが特定の描画順序に依存する場合、いくつかのオプションがあります:
- FrameGraphのQt3DRender::QLayer コンポーネントとQt3DRender::QLayerFilter を使ったフィルタリング。
- RenderPass または、FrameGraphの または を使ったテクニックフィルタリング。Qt3DRender::QRenderPassFilter Qt3DRender::QTechniqueFilter
ブレンド
適切な引数と関数を使ってブレンドをマスターすることは、それ自体が芸術です。そのため、適切な視覚的結果を得ることは、しばしば当たり外れがあります。
Anders Riggelsenのオンラインビジュアライザーは、どの引数や関数が自分に合うかを見つけるのに役立つかもしれません。
Scene3D とのブレンド
Qt Quick シーンを通して Qt 3D シーンをScene3D エレメントでレンダリングする場合、適切なレンダリングを得るために、レンダリングステートのブレンディング引数を調整する必要があることに注意する必要があります。これは、Qt 3Dが最初にシーンをオフスクリーンのテクスチャにレンダリングし、それをQt Quickシーンの残りの部分とブレンドするためです。
賢明な値は、ソースアルファがQt3DRender::QBlendEquationArguments::Zero で、デスティネーションアルファがQt3DRender::QBlendEquationArguments::One です。
便利なツール
Qt 3Dの最初のバージョンでは、トラブルシューティングがかなり限定的であったため、OpenGLの描画コールをキャプチャして、何が起こっているかを知る手がかりを得るためのツールが役に立ちました。
これらのツールは、Qt 3Dアプリケーションによって行われるすべてのOpenGLコールのトレースを収集することができます。生成されたトレースファイルを見ることで、描画コールが行われているか、テクスチャが正しくアップロードされているか、ユニフォームが適切な値で設定されているか、などを確認することができます。
Qt 3D ツールについては、今後リリースする予定です。
本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。