シーンが大きくなるにつれて、パフォーマンスは大きな問題になります。これを管理するための方法の一つは、カメラが被写体からどれだけ離れているかに応じて、さまざまな詳細レベル( Level of Detail )でメッシュを持つことです。 これは 詳細レベル (LOD) と呼ばれます。
LOD Group は、ゲームオブジェクトの Level of Detail (LOD) を管理するために使います。Level of Detail は、1オブジェクトにいくつかのメッシュを使う、最適化の技法です。メッシュが、ジオメトリのディティールを削減した、同じオブジェクトで置き換えられます。オブジェクトがカメラから遠く離れ、違いが気にならない場合、低ディティールのメッシュが表示される、という方法です。メッシュを単純なジオメトリにすることで、ハード要件が低くなります。LOD を賢く使う事で、パフォーマンスを改善することができます。
LOD の各レベルは、上にカメラアイコンの付いた水平バーで確認できます。(LOD:0、LOD:1、LOD:2 等。) LOD バーに表示されているパーセンテージは、その LOD レベルがアクティブになる境界ボックスの高さと、画面の高さを相対的に求めた割合です。水平バー内を仕切る縦線をドラッグすれば、パーセンテージを変えることができます。また、LOD レベルをバーに追加あるいは削除するには、該当 LOD 上で右クリックし、メニューから Insert Before または Delete を選択します。カメラアイコンの位置は、現在のパーセンテージを示します。LOD バーの中のパーセンテージは、対応する LOD レベルがアクティブになる閾値を示しています。これは、オブジェクトの画面スペース上の高さと、画面の高さを相対的に求めた割合で測定されます。LOD Bias が 1 以外である場合、カメラの位置は、実際に LOD が切り替わる位置とは違う可能性がありますのでご注意ください。
選択したい LOD バー上でクリックすると、Renderers パネルがその下に表示されます。“Renderers” は、LOD レベルを表すメッシュを持った GameObject のことで、これは通常は LODGroup コンポーネントを持つオブジェクトの子になります。Renderers パネル上で(“Add” と表示された)空のボックスをクリックするとオブジェクトブラウザーが表示され、該当の LOD レベルのオブジェクトを選択することができます。レンダラーにはどのオブジェクトでも選択できますが、LODGroup GameObject がすでに子になっていない場合は、子にするかどうか確認されます。
Unity 5 から、各 LOD レベルに Fade Mode を選択できるようになりました。フェーディングは、二つの隣接した LOD を「ブレンド」することで切り替わりをスムーズにするために使用されます。ただし、Unity はデフォルトでは LOD ジオメトリをブレンドするビルトイン技術は提供していません。開発されるゲームの種類やアセット制作パイプラインに適した技術をご自分で実装していただく必要があります。Unity はオブジェクトの画面サイズから 「ブレンド係数」を算出し、それをシェーダーにパスします。
ブレンド係数の算出方法には二つのモードがあります。
Percentage: オブジェクトの画面上の高さが現在の LOD の高さパーセンテージから次に移ると、ブレンド係数が 1 から 0 になります。現在の LOD のメッシュのみがレンダーされます。 Cross-fade: クロスフェーディング ゾーン(現在の LOD の終わりの、次の LOD への遷移が起こる部分)を定義するために、Transition Width の値を指定する必要があります。この遷移ゾーンにおいては、両方の LOD レベルがレンダーされます。現在の LOD のブレンド係数は 1 から 0 へ、次の LOD のブレンド係数は 0 から 1 に推移します。
blend factor は、シェーダープログラム上では unity_LODFade.x uniform
変数としてアクセスされます。LOD フェーディングによってレンダーされたオブジェクトには LOD_FADE_PERCENTAGE
または LOD_FADE_CROSSFADE
のキーワードが選択されます。
SpeedTree ツリーの参考例をご参照ください。LODGroup がどのように設定されているか、また SpeedTree シェーダーが unity_LODFade
変数をどのように使用しているかをご確認いただけます。
インスペクター下部に、二つの Recalculate ボタンがあります。Bounds ボタンは、新しい LOD レベルが追加された後にオブジェクトの境界ボリュームを再計算します。Lightmap Scale ボタンは、LOD レベルの境界の変さらに基づいて、ライトマップ上で正しく Scale in Lightmap を更新します。