Qt Quick 3Dアーキテクチャ
Qt Quick 3D は、 を拡張し、3D コンテンツのレンダリングをサポートします。新しい内部シーングラフとレンダラーだけでなく、いくつかの新しいパブリック QML インポートなど、広範な機能が追加されています。このドキュメントでは、 3D のアーキテクチャについて、パブリック API からレンダリングパイプラインの動作の詳細まで説明します。Qt Quick Qt Quick
モジュールの概要
Qt Quick 3D は、追加の 3D API を公開する複数のモジュールとプラグイン、および既存の 3D アセットのコンディショニングとインポートのためのユーティリティで構成されています。
QMLインポート
- QtQuick3D - 3Dのすべてのコアコンポーネントを含むメインインポートQt Quick
- QtQuick3D.AssetUtils - 実行時に3Dアセットをインポートするためのライブラリ
- QtQuick3D.Helpers - 3D設計や3Dシーンのデバッグに使用できる追加コンポーネントのライブラリ。
C++ ライブラリ
- QtQuick3D - 唯一のパブリックC++モジュール。 QMLインポートで公開されるすべての型の定義と、いくつかのC++ APIが含まれています。QtQuick3D
- QQuick3DGeometry - 手続き型メッシュデータを作成するサブクラス
- QQuick3DTextureData - 手続き型テクスチャデータを作成するサブクラス
- QQuick3D::idealSurfaceFormat - 理想的なサーフェスフォーマットを取得するために使用されます。
QtQuick3DAssetImport
- アセットのインポートを支援し、アセットをQMLに変換する内部プライベートライブラリ。QtQuick3DRuntimeRender
- 空間シーングラフノードとレンダラーを含む内部プライベートライブラリ。QtQuick3DUtils
- 他のすべてのC++モジュールで共通のユーティリティ・ライブラリとして使用される内部プライベート・ライブラリ。
AssetImporters プラグイン
アセットインポートツールは、プラグインベースのアーキテクチャで実装されています。Qt Quick 3Dに同梱されているプラグインは、アセットインポーターライブラリとツールであるBalsamの機能を拡張します。
- Assimp - このプラグインは、サードパーティのライブラリ libAssimp を使用して、3D 交換フォーマットの 3D アセットをQt Quick 3D QML コンポーネントに変換します。
Qt Quick 3D は Qt Graphics Stack にどのように適合するか?
上の図は、Qt Quick 3D が Qt グラフィックス・スタックにどのように統合されているかを示しています。 Qt Quick 3D は 2DQt Quick API の拡張として動作し、3D シーンアイテムをView3D と組み合わせて使用する場合、シーンは Qt Rendering Hardware Interface (RHI) を介してレンダリングされます。RHI は、API 呼び出しを、指定されたプラットフォームの正しいネイティブ・レンダリング・ハードウェア API 呼び出しに変換します。上図は、各プラットフォームで利用可能なオプションを示しています。ネイティブ・バックエンドが明示的に定義されていない場合、Qt Quick 、各プラットフォームのレンダリングに適したネイティブ・バックエンドがデフォルトで使用されます。
スタックのQt Quick 3D コンポーネントとQt Quick スタックの統合については、次のセクションで説明します。
3Dと2Dの統合
3Dコンテンツを2Dで表示することが、Qt Quick 3D APIの主な目的である。3Dコンテンツを2Dに統合するための主要なインターフェースは、View3D コンポーネントです。
View3D コンポーネントは、コンテンツを持つ他のQQuickItem 派生クラスと同様に動作し、仮想関数QQuickItem::updatePaintNode を実装します。Qt Quick は、同期フェーズの間、Qt Quick シーングラフ内のすべての「ダーティ」アイテムに対して updatePaintNode を呼び出します。これには、View3D によって管理される 3D アイテムも含まれ、updatePaintNode 呼び出しの結果として同期フェーズが実行されます。
View3D の updatePaintNode メソッドは、以下のアクションを実行します:
- レンダラーがまだ存在しない場合は、レンダラーとレンダーターゲットをセット アップします。
- SceneManager を介して 3D シーン内のアイテムを同期する。
- Qt Quick によってレンダリングされた「ダイナミック」テクスチャを更新する(以下の3D テクスチャパスの 2D)。
ただし、3D シーンのレンダリングは、View3D updatePaintNode メソッドでは発生しません。代わりに updatePaintNode はQt Quick 3D 用のレンダラーを含むQSGNode サブクラスを返し、Qt Quick レンダリングプロセスのプリプロセスフェーズで 3D シーンをレンダリングします。
Qt Quick 3Dがどのようにレンダリングされるかは、View3D::renderMode :
オフスクリーン
View3D のデフォルト・モードはOffscreen です。オフスクリーンモードを使用する場合、View3D はオフスクリーン・サーフェスを作成し、そこにレンダリングすることでテクスチャ・プロバイダになります。このサーフェスはQt Quick でテクスチャとしてマッピングされ、QSGSimpleTextureNode でレンダリングされます。
このパターンは、Qt Quick ですでにQSGLayerNodesがどのように動作しているかに非常に近い。
アンダーレイ
Underlay モードを使用すると、3DシーンはView3D を含むQQuickWindow に直接レンダリングされます。レンダリングはシグナルQQuickWindow::beforeRenderPassRecording() の結果として行われ、Qt Quick の他のすべてが3Dコンテンツの上にレンダリングされることになります。
オーバーレイ
Overlay モードを使用すると、3DシーンはView3D を含むQQuickWindow に直接レンダリングされます。レンダリングはシグナルQQuickWindow::afterRenderPassRecording() の結果として行われ、3Dコンテンツは他のすべてのQt Quick コンテンツの上にレンダリングされます。
インライン
Inline レンダーモードはQSGRenderNode を使用し、オフスクリーン・サーフェスを使用せずにQt Quick のレンダー・ターゲットに直接レンダリングすることができます。これは、Qt Quick シーンの 2D レンダリング中に、レンダーコマンドをインラインに注入することで実現します。
このモードは、Qt Quick レンダラーと同じ深度バッファを使用し、Qt Quick とQt Quick の 3D では z 値の意味がまったく異なるため、問題になることがあります。
3D統合における2D
3Dシーンをレンダリングするとき、2D要素を3Dに埋め込む必要があるシナリオはたくさんあります。3Dシーン内に2Dコンテンツを統合するには、2つの異なる方法があります。
ダイレクト・パス
ダイレクト・パスは、2DQt Quick コンテンツを、あたかも3Dシーンにフラット・アイテムとして存在するかのようにレンダリングするために使用されます。たとえば、次のようなシーン定義を考えてみましょう:
Node {
Text {
text: "Hello world!"
}
}
子コンポーネントがQQuickItem タイプの空間ノードに設定されると、まず QQuick3DItem2D によってラップされます。これは、2D アイテムに 3D 座標を追加するだけのコンテナです。これは、2Dアイテムに3D座標を追加する単なるコンテナです。これにより、3Dシーンに正しく表示されるように、それ以降の2Dの子アイテムがどのようにレンダリングされるかのベースとなる3D変換が設定されます。
シーンをレンダリングするとき、これらの 2D アイテムの QSGNode はQt Quick Renderer に渡され、適切なレンダリング コマンドが生成されます。コマンドはインラインで実行され、現在の3D変換を考慮するため、2Dレンダラーとまったく同じようにレンダリングされますが、3Dでレンダリングされたかのように表示されます。
この方法の欠点は、Qt Quick 2Dレンダラーにはライティングの概念がないため、3Dシーンのライティング情報を2Dコンテンツのシェーディングに使用できないことです。
テクスチャパス
テクスチャ・パスは、2Dシーン(Qt Quick )を使用して動的なテクスチャ・コンテンツを作成します。次のテクスチャ定義を考えてみましょう:
Texture { sourceItem: Item { width: 256 height: 256 Text { anchors.centerIn: parent text: "Hello World!" } } }
このアプローチは、Qt Quick のレイヤーアイテムと同じように動作します。つまり、すべてがトップレベルアイテムのサイズのオフスクリーンサーフェスにレンダリングされ、そのオフスクリーンサーフェスは、他の場所で再利用できるテクスチャとして使用できます。
このテクスチャはシーン内のマテリアルによって使用され、Qt Quick アイテムのコンテンツをレンダリングすることができます。
シーンの同期
シーンマネージャ
Qt Quick 3Dのシーンマネージャーは、3Dシーン内の空間アイテムを追跡し、同期フェーズ中にアイテムが対応するシーングラフノードを更新していることを確認する役割を担います。Qt Quick では、この役割は2Dの場合、QQuickWindow によって実行される。シーン・マネージャーは、フロントエンドのノードとバックエンドのシーン・グラフ・オブジェクトの間の主要なインターフェースである。
各View3D アイテムは、構築時にビルトインシーンルートに関連付けられ、作成されるため、少なくとも1つのシーンマネージャーを持つ。空間ノードがView3D の子として追加されると、それらはView3D のシーンマネージャーに登録されます。インポートされたシーンを使用する場合、View3D の直接の子ではないノードを管理するために、2つ目の SceneManager が作成されます(または、すでに存在する場合は参照されます)。これは、View3D とは異なり、インポートされたシーンは、参照されるまでQQuickWindow 上に存在しないため、必要です。追加の SceneManager は、インポートされたシーンに属するアセットが、それらが参照されるQQuickWindow ごとに少なくとも一度は作成されることを確認します。
シーンマネージャーは内部 API ですが、シーンマネージャーは update() メソッドを呼び出すことで、ダーティにマークされたすべてのオブジェクトの updateSpatialNode を呼び出す責任があることを知っておくことが重要です。
フロントエンドとバックエンドの同期
同期の目的は、フロントエンド (Qt Quick) で設定されたステートが、バックエンド (Qt Quick Spatial Scene Graph Renderer ) で設定されたものと一致するようにすることです。デフォルトでは、フロントエンドとバックエンドは別々のスレッドで動作します。フロントエンドは Qt メインスレッドで、バックエンドはQt Quick のレンダースレッドで動作します。同期フェーズでは、メインスレッドとレンダースレッドが安全にデータを交換できます。このフェーズの間、シーンマネージャはシーン内の各ダーティノードに対して updateSpatialNode を呼び出します。これにより、新しいバックエンドノードが作成されるか、レンダラーが使用する既存のノードが更新されます。
Qt Quick 空間シーングラフ
Qt Quick Qt Quickフロントエンドオブジェクトは エンジンによって制御され、バックエンドオブジェクトにはシーンをレンダリングするためのステートデータが格納されます。フロントエンドオブジェクトは を継承し、 エンジンに公開されます。QMLソースファイルのアイテムは、直接フロントエンドオブジェクトにマッピングされます。Qt Quick QObject Qt Quick
これらのフロントエンドオブジェクトのプロパティが更新されると、1つ以上のバックエンドノードが作成され、シーングラフに配置されます。3Dシーンのレンダリングには、2Dのレンダリングよりも多くのステートが含まれるため、3Dシーンオブジェクトのステートを表現するために、専用のシーングラフノードが別に用意されています。このシーングラフは、Qt Quick Spatial Scene Graphとして知られています。
フロントエンドのオブジェクトとバックエンドのノードは、2つのクラスに分類できます。つは空間的なもので、3D空間のどこかに存在するという意味です。これが実際に意味するのは、これらのタイプはそれぞれトランスフォーム行列を含むということだ。各子アイテムは親のトランスフォームを継承するので、空間アイテムの場合、親子関係は重要です。
もう1つのクラスのアイテムはリソースです。リソース・アイテムは3D空間での位置を持たず、他のアイテムによって使用される単なる状態である。これらのアイテムの間には親子関係があり得ますが、所有権以外の意味はありません。
Qt Quick の2Dシーングラフとは異なり、空間シーングラフはリソースノードを直接ユーザーに公開します。そのため、たとえばQt Quick では、QSGTexture はパブリック API ですが、このオブジェクトを直接公開するQQuickItem はありません。代わりにユーザーは、テクスチャの出所とレンダリング方法の両方を記述したImageアイテムを使用するか、QSGTexture 自体を操作するC++コードを記述する必要があります。Qt Quick 3Dでは、これらのリソースはQML APIで直接公開されます。これは、リソースがシーン状態の重要な一部であるために必要です。例えば、多くのマテリアルが同じテクスチャを使うことができます。また、実行時にテクスチャのプロパティを設定し、テクスチャのサンプリング方法を直接変更することも可能です。
空間オブジェクト
空間オブジェクトはすべて Node コンポーネントのサブクラスで、3D 空間での位置、回転、スケールを定義するプロパティが含まれています。
リソースオブジェクト
リソースオブジェクトは、Object3D コンポーネントのサブクラスです。Object3D は、QObject のサブクラスに、シーンマネージャで使用するための特別なヘルパーを追加したものです。リソースオブジェクトには親子関係がありますが、これはリソースの所有権のために役立ちます。
- Texture
- TextureData
- Geometry
- Material
- デフォルトマテリアル
- PrincipledMaterial
- CustomMaterial
- Effect
- SceneEnvironment
ビュー3Dとレンダーレイヤー
フロントエンドとバックエンドの分離に関しては、View3D が、レンダリングするシーン コンテンツを定義するものであるため、View3D が、ユーザーの視点からの分離ポイントです。Qt Quick Spatial Scene Graphでは、レンダリングされるシーンのルートノードはLayerノードです。レイヤノードは、View3D のプロパティとSceneEnvironment のプロパティの組み合わせを使って、View3D によって作成される。View3D のシーンをレンダリングするとき、シーンをレンダリングするためにレンダラーに渡されるのはこのレイヤノードである。
シーンのレンダリング
レンダーターゲットの設定
レンダリングプロセスの最初のステップは、シーンのレンダーターゲットを決定し、設定することです。SceneEnvironment でどのプロパティを設定するかによって、実際のレンダー ターゲットは異なります。最初の決定は、コンテンツがウィンドウサーフェスに直接レンダリングされるか、オフスクリーンテクスチャにレンダリングされるかです。デフォルトでは、View3D 、オフスクリーン・テクスチャにレンダリングされます。ポストプロセッシングエフェクトを使用する場合、オフスクリーンテクスチャへのレンダリングは必須です。
シーンレンダリングターゲットが決定されると、いくつかのグローバルステートが設定されます。
- ウィンドウサイズ - ウィンドウにレンダリングする場合。
- ビューポート - レンダリングされるシーン領域のサイズ。
- scissor rect - ビューポートがクリッピングされるべきウィンドウのサブセット。
- clear color - レンダーターゲットをクリアする色。
レンダリングの準備
レンダリングの次の段階は準備段階で、レンダラーがハウスキーピングを行い、指定されたフレームで何がレンダリングされる必要があるかを把握し、必要なリソースがすべて利用可能で最新であることを確認します。
準備段階自体には2つのフェーズがあります。何をレンダリングし、どのリソースが必要かを決定する高レベルの準備と、RHIを使用して実際にレンダリングパイプラインとバッファを設定し、メインシーンパスのレンダリング依存関係を設定する低レベルの準備です。
高レベルのレンダリング準備
このフェーズの目的は、空間シーングラフの状態を、レンダーコマンドの作成に使用できるものに抽出することです。ここでの概要は、レンダラーが、照明状態のセットを持つ単一のカメラの視点からレンダリングするジオメトリとマテリアルの組み合わせのリストを作成するということです。
最初に行われるのは、すべてのコンテンツのグローバルな共通ステートを決定することです。SceneEnvironment がlightProbe を定義している場合、そのライトプローブテクスチャに関連付けられている環境マップがロードされているかどうかをチェックし、ロードされていない場合は新しい環境マップをロードまたは生成します。環境の生成自体は、ソーステクスチャをキューブマップに畳み込むための一連のパスとなります。このキューブマップは、マテリアルシェーディングに使用される放射照度と鏡面反射情報の両方を含みます。
次に、レンダラーがシーン内のどのカメラを使用するかを決定する必要があります。アクティブなカメラがView3D で明示的に定義されていない場合は、シーンで使用可能な最初のカメラが使用されます。シーンにカメラがない場合、コンテンツはレンダリングされず、レンダラーはベールアウトします。
カメラが決まれば、このフレームの投影行列を計算できます。各レンダラブルはどのように投影されるかを知る必要があるため、この時点で計算が行われます。これは、どのレンダリング項目をレンダリングすべきかを計算できるようになったことも意味します。すべてのレンダリング可能アイテムのリストから始めて、無効または完全に透明であるため表示されないアイテムをすべて削除します。次に、アクティブなカメラでフラストラムカリングが有効になっている場合、レンダリング可能な各アイテムがカメラのフラストラムのビューから完全に外れているかどうかをチェックし、外れている場合はレンダリング可能リストから削除します。
カメラの投影に加え、カメラの方向も計算されます。これは、シェーディング コードのライティング計算に必要だからです。
シーン内にライトノードがある場合、利用可能な最大ライトの長さのリストに集められます。シーン内にレンダラーがサポートするライトの数よりも多くのライトノードが存在する場合、その制限を超える追加のライトノードは無視され、シーンのライティングに寄与しません。ライトノードのスコープを指定することは可能ですが、スコープを設定しても、各ライトのライティング状態は、ライティングを持つすべてのマテリアルに送信されますが、スコープにないライトの明るさは 0 に設定されるため、実際には、これらのライトはこれらのマテリアルのライティングに寄与しないことに注意してください。
レンダラブルのリストが短くなったので、シーンの現在の状態を反映するために、各項目を更新する必要があります。各レンダラブルに対して、適切なマテリアルがロードされているかチェックし、ロードされていない場合は新しいマテリアルを作成します。マテリアルは、シェーダーとレンダリングパイプラインの組み合わせで、描画コールを作成するために必要です。さらにレンダラーは、レンダラブルのレンダリングに必要なリソースがロードされていることを確認します。たとえば、モデルに設定されたジオメトリやテクスチャなどです。まだロードされていないリソースはここでロードされます。
次に、レンダラブル リストは 3 つのリストにソートされます。
- Opaque Items(不透明なアイテム):前面から背面へ、言い換えると、カメラに最も近いアイテムからカメラから最も遠いアイテムへとソートされます。これは、ハードウェアオクルージョンカリングやフラグメントシェーダーの早期Z検出を利用するために行われます。
- 2D アイテム:Qt Quick レンダラーによってレンダリングされるQtQuick アイテムです。
- 透明アイテム:背面から前面へ、言い換えると、カメラから最も遠いアイテムからカメラに最も近いアイテムへとソートされます。これは、透明なアイテムは、その後ろにあるすべてのアイテムとブレンドする必要があるためです。
ローレベルレンダーの準備
このフレームで考慮する必要があるものがすべて決定されたので、メインのレンダーパスの配管と依存関係に対処できます。このフェーズで最初に行うことは、メインパスに必要なプリパスをレンダリングすることです。
- DepthPassのレンダリング - Screen Space Ambient OcclusionやShadowingのような特定の機能には、深度プリパスが必要です。このパスは、すべての不透明なアイテムが深度テクスチャにレンダリングされます。
- Render SSAOPass - Screen Space Ambient Occlusionパスの目的は、アンビエントオクルージョンテクスチャを生成することです。このテクスチャは、シェーディング時に特定のエリアを暗くするためにマテリアルによって後で使用されます。
- レンダリングシャドウパス(Render ShadowPasses) - 影が有効になっているシーン内の各ライトは、追加のシャドウパスに寄与します。レンダラーには 2 つの異なるシャドウイング テクニックがあるため、ライト タイプによって異なるパスがあります。指向性ライトからシャドウをレンダリングする場合、シーンは指向性ライトの方向とカメラフラクタムのサイズの組み合わせから2Dオクルージョンテクスチャにレンダリングされます。ポイントライトやスポットライトから影をレンダリングする場合、ライトのオクルージョンテクスチャは、ライトの各面方向に対するオクルージョン寄与を表す立方体マップになります。
- スクリーンテクスチャをレンダリングする - このパスは、スクリーンテクスチャを必要とするCustomMaterial を使用する場合にのみ発生します。このパスは深度パスのように動作しますが、代わりにすべての不透明なアイテムをカラーテクスチャにレンダリングします。
依存関係のレンダリングが終わると、残りのパスの準備は行われますが、レンダリングは行われません。この準備には、高レベルの準備ステージで収集されたステートを使用し、ユニフォームバッファ値の作成/更新、サンプラーと依存テクスチャの関連付け、シェーダーリソースバインディングのセットアップ、描画コールの実行に必要なパイプラインステートの作成に関連する他のすべてのもののようなグラフィックスプリミティブに変換することが含まれます。
シーンレンダリング
準備の大変な作業が終わったので、簡単なのはメインシーンのコンテンツに貢献するコマンドを実行することです。レンダリングはこの順番で動作する:
- クリアパス(Clear Pass) - これは実際にはパスではありませんが、SceneEnvironment に設定されている backgroundMode によって、ここでさまざまなことが起こります。背景モードが透明またはカラーの場合、カラーバッファは透明または指定されたカラーでクリアされます。ただし、背景モードが SkyBox に設定されている場合は、カメラの視点から SkyBox をレンダリングするパスが実行され、バッファも初期データで満たされます。
- 不透明パス - 次に、すべての不透明アイテムが描画されます。これはパイプラインの状態を設定し、各アイテムの描画コマンドをリストの順番に実行するだけです。
- 2D パス - シーンに 2D アイテムがある場合は、Qt Quick レンダラーが呼び出され、それらのアイテムをレンダリングするために必要なレンダーコマンドが生成されます。
- 透明パス - 最後に、シーン内の透明アイテムが不透明アイテムと同じ方法で1つずつレンダリングされます。
これでシーンのレンダリングは終了です。
後処理
後処理機能が有効になっている場合、シーンレンダラの結果は、後処理フェーズの入力であるテクスチャであると仮定できます。すべての後処理メソッドは、このシーン入力テクスチャを操作する追加パスです。
後処理フェーズのすべてのステップはオプションであり、ビルトイン機能とユーザー定義エフェクトが有効になっていない場合、シーンレンダーの出力は最終レンダーターゲットで使用されるものです。ただし、tonemapping はデフォルトで有効になっています。
ビルトイン・ポストプロセッシング
ExtendedSceneEnvironment およびその親タイプ は、3Dシーンで使用される最も一般的なエフェクトと、レンダラーによって生成されたハイダイナミックレンジのカラー値を0~1LDRの範囲にマッピングするために使用されるトーンマッピングを提供します。エフェクトには、被写界深度、グロー/ブルーム、レンズフレア、ビネット、カラー調整とグレーディング、フォグ、アンビエントオクルージョンなどがあります。SceneEnvironment
後処理エフェクト
アプリケーションは、独自のカスタム後処理エフェクトをSceneEnvironment::effects プロパティの順序付きリストとして指定できます。このリストが空でない場合、その中のエフェクトは、ExtendedSceneEnvironment によって提供されるビルトインエフェクトの前に適用されます。各後処理エフェクトは、前のエフェクトの出力が次のエフェクトの入力になるようなチェーンの一部です。このチェーンの最初のエフェクトは、シーンレンダラーステップの出力から直接入力を得ます。エフェクトがシーンレンダラの深度テクスチャ出力にアクセスすることも可能です。
このプロセスの各エフェクトは、複数のサブパスで構成できます。つまり、コンテンツを中間バッファにレンダリングすることが可能です。マルチパスエフェクトの最終パスは、ポスト処理フェーズの次のステップで使用されるカラーデータを含む単一のテクスチャを出力することが期待されます。
テンポラルおよびプログレッシブアンチエイリアス
Temporal and Progressive Antialiasing steps are optional enabled by setting properties in theSceneEnvironment. 厳密にはポスト処理フェーズの一部ではありませんが、Temporal and Progressive Antialiasingの実際の結果はポスト処理フェーズで実現されます。
Temporal Antialiasingは、シーンがアクティブに更新されているときに実行されます。有効にすると、アクティブカメラは、シーンを描画しながら、各フレームのカメラ方向に非常に小さな調整を行います。その後、現在のフレームは、以前にレンダリングされたフレームとブレンドされ、レンダリングされたものを滑らかにします。
プログレッシブ・アンチエイリアスは、シーンが更新されていないときにのみ実行されます。有効にすると、更新が強制され、シーンの現在の状態が、アクティブなカメラの方向に非常に小さな調整を加えてレンダリングされます。最大8つのフレームが蓄積され、あらかじめ設定された重みでブレンドされます。これは非アニメーションシーンを滑らかにする効果がありますが、更新のたびに余分なフレームがレンダリングされるため、パフォーマンスが犠牲になります。
スーパーサンプリング・アンチエイリアス(SSAA)
スーパーサンプリングアンチエイリアシングは、シーンを滑らかにする強引な方法です。これは、シーンの要求サイズの倍数であるテクスチャにレンダリングし、その後、ターゲットサイズにダウンサンプリングすることで動作します。たとえば、2倍のSSAAが要求された場合、シーンは意図されたサイズの2倍のテクスチャにレンダリングされ、その後、この段階の一部としてダウンサンプリングされます。これはパフォーマンスとリソース使用量に大きな影響を与える可能性があるため、可能であれば避けるべきです。この方法に必要なテクスチャは、レンダリングハードウェアがサポートするサイズよりも大きい可能性があるため、この方法を使用するにはView3D のサイズが大きすぎる可能性もあります。
© 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.