このページでは

Qt Quick 3Dのディテールレベル

詳細度(LoD)

詳細度(LoD)とは、カメラからの距離に応じて3Dモデルの代替バージョンを使用する手法を指します。 この手法の目的は、モデルが遠くにある場合や画面上の占有率が低い場合には簡略化されたバージョンを使用し、近くにある場合や画面上の占有率が高い場合にはより詳細なバージョンを使用することで、リソースの使用を最適化することです。このアプローチにより、視覚的な忠実度を維持しながら、GPUリソースを効率的に使用することができます。

Qt Quick 3Dでは、自動および明示的な詳細度システムの両方が提供されています。自動システムは、メッシュファイル内に複数の詳細度が保存された単一のメッシュを使用することに基づいています。明示的なシステムは、LodManager コンポーネントを使用して、異なる詳細度を子モデルとして指定することに基づいています。

自動詳細度

自動LOD機能を利用する主な方法は、Balsamアセットインポートツールを使用してコンテンツをインポートすることです。アセットのインポート時に「--generateMeshLevelsOfDetail 」フラグを指定すると、ツールは可能な場合、各メッシュに対してLODを生成します。これは、全体的な特徴を維持しつつ、元のメッシュのジオメトリを簡略化することで実現されます。 その結果、各詳細レベルごとに追加のジオメトリと新しいインデックス値が生成されるほか、特定のレンダリングサイズに対してどのメッシュを使用するかを決定するために使用される距離係数も生成されます。 この距離係数は、レンダリング対象のオブジェクトからカメラまでの距離に関連していますが、最も重要なのは、ピクセルあたりのジオメトリの比率が適切であることです。このデータは .mesh ファイルに書き込まれ、モデルで使用される際に自動的に適用されます。

LOD生成オプションが強調表示されたBalsam UIの設定

この自動システムにはトレードオフがあり、デフォルトで有効になっていない理由は、ジオメトリを削減した際に視覚的なアーティファクトが生じる可能性があるためです。 使用されるジオメトリ簡略化アルゴリズムはモデルの特徴を保持するよう努めますが、意図した視覚的外観を維持するために、メッシュの法線を再計算する必要がある場合があります。これは、アセットをインポートする際に `--recalculateLodNormals ` フラグを使用することで実行できます。 法線の再計算プロセスは、引数--recalculateLodNormalsMergeAngle および--recalculateLodNormalsSplitAngle にオイラー角の値を指定することで、法線がそれぞれ結合または分割される角度を制御し、さらに微調整することができます。

自動システムの主な利点は、適切な設定でアセットをインポートすれば、簡単に使用できることです。自動システムを使用するために追加のコードは必要なく、詳細レベル(LOD)ジオメトリを含む生成済みメッシュファイルを参照するモデルは、画面上でそのモデルが占めるピクセル数に基づいて、適切なジオメトリを自動的に選択します。

global level またはper-model level で、Camera またはModel のlevelOfDetailBias プロパティを使用することで、自動LOD選択の挙動を微調整することが可能です。これらのバイアスプロパティそれぞれのデフォルト値である1.0は、自動システムによって計算された値を信頼することを意味します。 この値は理想値に対するバイアスであり、1.0 より小さい値に設定すると、より低い詳細レベルに切り替わる前に、レンダリングサイズがさらに小さくなる必要があります。1.0 より大きい値に設定すると、より早い段階で低い詳細レベルが使用されるようになります。 値を 0.0 に設定すると、詳細レベルの使用が完全に無効化され、常に元のメッシュジオメトリが使用されます。

自動システムは、明示的なシステムほど柔軟ではありません。例えば、自動システムはすべての詳細レベルで常に同じマテリアルを使用しますが、これは必ずしも望ましいとは限りません。もう一つの潜在的な欠点は、異なる詳細レベル間の遷移がないことです。理想的には自動詳細レベル設定では必要ないはずですが、特定のユースケースでは望ましい場合もあります。

明示的な詳細レベル

明示的な詳細度(LOD)システムは、自動システムよりも柔軟性が高いですが、使用するにはより多くの作業が必要です。 明示的なシステムは、LodManager コンポーネントを使用し、異なる詳細レベルを子要素のModel コンポーネントとして指定することに基づいています。LodManager の子要素のうち、Modelのインスタンスであるものはすべて、詳細レベルとみなされます。各詳細レベルが独自のジオメトリやマテリアルを持つ完全にカスタマイズされたモデルになり得るため、これは非常に強力な機能です。

また、LodManager コンポーネントにはdistances プロパティがあり、これを使用してどの子Model を使用するかを決定します。カメラの距離が各距離境界に近づくにつれて、LodManager ノードは次の子Model へと遷移します。fadeDistance プロパティを使用すると、距離境界付近でクロスフェード遷移が開始および終了する距離を設定できます。

以下は、明示的な詳細度(LOD)システムの使用例です:

さまざまな詳細レベルを持つインスタンス化されたオブジェクトを含む胸像

この例では、LodManager を使用して、大理石の胸像の各詳細レベルごとに異なるメッシュファイルを明示的に指定しています。

LodManager {
    camera: camera
    distances: [100, 140, 180]
    fadeDistance: 10

    Model {
        scale: Qt.vector3d(100, 100, 100);
        source: "meshes/marble_bust_01_LOD_0.mesh"
        materials: [ marbleMaterial ]
    }

    Model {
        scale: Qt.vector3d(100, 100, 100);
        source: "meshes/marble_bust_01_LOD_1.mesh"
        materials: [ marbleMaterial ]
    }

    Model {
        scale: Qt.vector3d(100, 100, 100);
        source: "meshes/marble_bust_01_LOD_2.mesh"
        materials: [ marbleMaterial ]
    }

    Model {
        scale: Qt.vector3d(100, 100, 100);
        source: "meshes/marble_bust_01_LOD_3.mesh"
        materials: [ marbleMaterial ]
    }
}

このコードについて、以下に定義内容を示す図を示します。この図では、距離リストを使用して各詳細レベル間の境界を定義する方法と、クロスフェード遷移を定義するために使用されるfadeDistanceプロパティの役割が示されています。

LODシステムのアーキテクチャ図

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