LOD(詳細レベル)とは、異なる表示スケールでオブジェクトを管理することを意味し、2つの部分に分けられます。ただし、それらのいずれかを使用してもかまいませんが、ほとんどの場合はこれで十分です。
大きさ(表示スケール)に応じて、レイヤー(同じタイプのオブジェクトのグループ)を表示/非表示します。
一般化(ポリゴンを単純化するアルゴリズム)と呼ばれる代数幾何ベースの方法。次の写真を見てください
ポリゴンメッシュを一般化(単純化)するための最も有名で効率的な方法は、デカルト-オイラー多面体定理として知られています(本を参照する場合は式4.5で申し訳ありませんが、それが最善でした)。ほとんどの空間データベースで使用されています。たとえば、PostgreSQLのPostGISモジュール。ポリゴンの小さい辺を削除し、非常に丸い辺を作成します(上記の図)。
ゲームにLODを実装するには、ズームイン/アウト操作中にマップ(シーン)の縮尺を保存および管理する必要があります。スケールはゼロから無限に変化し、これを特定の範囲に分割する必要があります。たとえば次のようなものです。
- 1 /ゼロ=無限から1/50
- 1/50から1/100
- 1/100から1/1000
- 1/1000から1 /無限= 0
次に、上記の各範囲でどのタイプのオブジェクト(レイヤー)を表示または非表示にするかを定義する必要があります。たとえば、消火栓のような小さなタイプのオブジェクトは、ユーザーが4番目の範囲にいるときは、そのスケールでは非常に小さく、識別できないため、表示しないでください。画面。
したがって、ユーザーがズームインとズームアウトを使用して倍率を変更すると、上記の制限をある範囲から別の範囲に移動し、ゲームはこれらの表示スケールを使用して、シーン上のオブジェクトを表示または非表示にして詳細レベルを管理します。これにより、ズームアウト操作中にオブジェクトが突然フェードするという個別のソリューションが作成されますが、表示スケールと拡大範囲は慎重に定義されているため、ユーザーは何も感じません。
上記の4つの範囲のグループは単なる例であり、試行錯誤によって自分のケースに最適なものを見つける必要があります。そのためのルールはありません。
時々、ゲームは独自のLODメソッドを使用します。SubwaySurferは、テクスチャを持たない小さな長方形を表示して建物を遠くに示し、突然近づくとテクスチャを取得し、ゲーマーはそれを感じます。あなたは非常に重要な投影システムについて話さなかったし、あなたがどのようなゲームを作っているのかについても話さなかった。
ただし、openGlで完全な3Dゲームを実装していて、グラフィックハードウェアに転送する前にいくつかのメッシュをフィルターしたい場合、バッファーオブジェクトと頂点配列(VBO、VAO)のバインド/アンバインド操作を減らすのに役立つと確信していますOpenGlを扱う。
レイヤー管理のみを使用するか、オイラーの一般化を実装する
ほとんどの場合、一般化アルゴリズムを実装する必要はなく、オブジェクトのフィルタリングは機能し、必要な効率(リフレッシュレート)に到達しますが、場合によっては完全に異なります。ポリゴンの小さな辺を削除するだけの簡単なアルゴリズムですが、大きさと定数の積であるしきい値を定義する必要があります。そのため、大きな辺はより遠くの視点でフィルタリングされます。
レイヤーの管理を忘れて、オイラーの一般化アルゴリズムのみを実装すると、非常にきちんとした継続的な方法が提供され、各辺と線を事前に定義されたしきい値に対してチェックし、画面上で識別できるほど大きい場合にのみ表示します。
PS:倍率は0より大きい浮動小数点数で、1 / scaleに等しく、スケールは通常1未満です。これは、1:1スケールはゲーム内の現実世界の長さを意味するためです。