こんにちは、Unityエンジニアのオオバです。
今回は実は使ったことなかった機能シリーズ、「シェーダーLOD」を試してみます。
Unityでシェーダーを書いているとよく目にするLOD 200
のような値。
これはシェーダー自身でLODを使用する際に使うLOD値です。
例えばLOD 200のサブシェーダーが実装されているなら、Shader.maximumLOD = 200
とすれば、そのサブシェーダーで描画されるといった感じです。
今回の例ではカメラの距離によってシェーダーを切り替えています。
このように、カメラが対象に近づくとサブシェーダーが切り替わって色が変わっていきます。
実装内容はいたってシンプルです。
- LOD値を記述したサブシェーダーを複数用意
- C#側からLOD値をセットする
この2手間です。
以下シェーダーとC#のサンプルコードです。
まとめ
お手軽にシェーダーを切り替えることができるので、何かしらのルールでLOD値を切り替えて面白い表現ができそうです。
また懸念としては、今回シェーダー自体が簡素すぎるせいか、シェーダー切り替え負荷はほぼ見受けられません(そもそも切り替え負荷が存在するかわかりません)。もう少し複雑なコードを書いて検証してみようかと。
この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- Unity2018.1.0f1