Unity 5 の LOD Group には、LOD の各レベル間をクロスフェードで滑らかに繋ぐための機能が用意されています。ただし、この機能を使用したシェーダーはシェーダーは標準では提供されていないため、カスタムシェーダーを用意する必要があります。
この、LOD クロスフェードを行うカスタムシェーダーのサンプルを用意しました。
https://github.com/keijiro/CrossFadingLod
アルファブレンドを使用したバージョンとディザを使用したバージョンがあります。例としては前者の方がシンプルで分かりやすいです。後者は Unity 側で用意されている補助マクロを使用して実装しています。
ポイントとなるのは下記の2点です。
- Unity 側から提供される uniform 変数 unity_LODFade の x 値をクロスフェード値として適用する。
- シェーダーキーワード "LOD_FADE_CROSSFADE" でマルチコンパイルを行っておく。
2点めは少し分かりにくいかもしれません。LOD Group はクロスフェードの必要な場合にキーワード LOD_FADE_CROSSFADE を有効にしますが、unity_LODFade に値が設定されるのは、このキーワードが有効な間に限られます。LOD_FADE_CROSSFADE が無効な間に unity_LODFade の値を拾ってしまうと、おかしな描画が生じてしまうことになります。そのため、マルチコンパイルが必須になります。
また、LOD Group 側で Fade Transition Width の設定を行っておくのも忘れないようにしましょう。
0 コメント