ひとことで
遠くにある物体を、三角形の少ない簡単な形に切り替えて描く方法です。LOD(レベル・オブ・ディテール、詳細度)と呼びます。遠くの物体は画面の上で数ピクセルにしか映らないので、細かい形で描いても見た目はほとんど変わらず、三角形を処理する手間だけがかかります。距離や画面上の大きさに応じて、細かい形(LOD0)から粗い形(LOD1, 2, 3…)へ切り替えると、見た目を保ったまま描く量を大きく減らせます。
ゲームでの使いどころ
- オープンワールドの背景:遠くの建物・木・岩を粗い形にし、さらに遠くは板に描いた絵(インポスター)に置き換える。
- キャラクター:遠くのキャラクターは骨の数や頂点を減らし、アニメーションの更新頻度も落とす。
- 地形:カメラから遠い地形ほど、粗い格子で描く(クリップマップ、四分木の地形)。
- 影・エフェクト:遠くの影の解像度、粒子の数、処理の頻度を落とすのも、広い意味での LOD。
しくみ
レベルを作る:元のメッシュから、メッシュの簡略化で三角形を半分、4 分の 1…と減らした形を、あらかじめ作っておきます。
レベルを選ぶ:距離よりも、「画面の上でどれくらいの大きさに見えるか」で選ぶのが確実です。半径 の物体が距離 にあるとき、画面の高さに対する割合はおよそ
です( は縦の視野角)。 が境目より小さくなったら、次の粗いレベルに切り替えます。視野角を考えるので、望遠(ズーム)にしたときも正しく細かい形に戻ります。
ちらつきを防ぐ:境目のちょうど近くで、レベルが毎フレーム行ったり来たりすると、形がちらつきます(ポッピング)。切り替える境目に余裕(ヒステリシス)を持たせるか、切り替えのときに少しの時間、2 つのレベルをディザで混ぜて描きます(クロスフェード)。
実装のポイント
- 品質の調整を 1 か所に:境目全体に掛ける倍率(バイアス)を用意すると、性能の低い機種では早めに粗くするなど、全体の品質を簡単に調整できます。
- 形だけでなくマテリアルも:遠くでは、法線マップやシャドウを省いた軽いシェーダーに切り替えます。
- インスタンシングと組み合わせる:同じ物体が大量にある場合、レベルごとにインスタンスの列を分けて、レベルごとに 1 回ずつ描きます。
- 影の LOD:影を描くときは、見た目より粗いレベルでも十分なことが多いです。
つまずきやすい点
- ポッピングが目立つ:形やシルエットが大きく変わるレベルどうしで切り替えると、目につきます。レベル間の変化を小さくし、切り替えはカメラから遠く、動きの多い場面で起きるように調整します。
- 細い部品が消える:簡略化で細い柱や枝が消えると、遠くで形が変わって見えます。シルエットを保つように簡略化します。
- メモリが増える:レベルごとに形を持つので、メモリは増えます(すべてのレベルを合わせても、元の形の 1.3〜1.5 倍程度が目安)。
デモで試すこと
- 手前から奥まで並んだ 168 個の結び目が、見かけの大きさに応じて、緑(LOD0)→ 青 → 黄 → 赤(LOD3)と色分けされています。カメラが前後に動くと、レベルが切り替わっていきます。
- 左下で、描いた三角形の数と「すべて LOD0 なら」の数を比べてください。
- 「レベルを色で表示」を切ると、遠くの物体が粗い形になっていても、見た目がほとんど変わらないことがわかります。
- 「LOD を使う」を切ると、三角形の数が何倍にもなります。「切り替えの境目」の倍率を上げると、近くでも粗い形になり、「境目に余裕を持たせる」を切ると、境目の近くで形がちらつきやすくなります。