渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

UnityのシェーダLODを試す


f:id:esakun:20150730215258g:plain

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

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

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

今回の例ではカメラの距離によってシェーダを切り替えています。
f:id:esakun:20180611235710g:plain
このように、カメラが対象に近づくとサブシェーダが切り替わって色が変わっていきます。

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

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

この2手間です。

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

まとめ

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

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

参考