こんにちは、Unityエンジニアのオオバです。

今回は実は使ったことなかった機能シリーズ、「シェーダーLOD」を試してみます。

Unityでシェーダーを書いているとよく目にするLOD 200のような値。
これはシェーダー自身でLODを使用する際に使うLOD値です。

例えばLOD 200のサブシェーダーが実装されているなら、Shader.maximumLOD = 200とすれば、そのサブシェーダーで描画されるといった感じです。

今回の例ではカメラの距離によってシェーダーを切り替えています。

UnityのシェーダーLODを試す_0

このように、カメラが対象に近づくとサブシェーダーが切り替わって色が変わっていきます。

実装内容はいたってシンプルです。

  1. LOD値を記述したサブシェーダーを複数用意
  2. C#側からLOD値をセットする

この2手間です。

以下シェーダーとC#のサンプルコードです。

ShaderLODTest.shader · GitHub

ShaderLODTest.cs · GitHub

まとめ

お手軽にシェーダーを切り替えることができるので、何かしらのルールでLOD値を切り替えて面白い表現ができそうです。

また懸念としては、今回シェーダー自体が簡素すぎるせいか、シェーダー切り替え負荷はほぼ見受けられません(そもそも切り替え負荷が存在するかわかりません)。もう少し複雑なコードを書いて検証してみようかと。

オススメ記事
検証環境