ボリュームライトとは、コンサートや車のヘッドライトで見える光の軌跡です。
Unityでボリュームライト表現やレンズの汚れ表現 - テラシュールブログ
以前、これをやるために頑張って2日ほどかけて機能を自作しました。このとき表現したかった事は、「敵の視界をギリギリまでキッチリと表現する」事でした。
これは、最近の某ステルスゲームのような「見つかってるのか見つかっていないのか分かりにくい」事を回避し、よりアクションに集中出来るようにする事が目的でした。
作った数日後に、遥かに優れたアセットが15ドルで出てきて驚愕したものです。
上が作ったもの。賞金のあるゲームジャムWEGで、一人で二日間かけて作りました。これ作ったのが実は自分の人生の転機だった気がします。
実際にプレイするにはこちら。懐かしすぎて涙がでる。
下は自分の思ってた理想のゲームです。こんなゲームを考えてた所にゲームが出てきたので、一気に制作欲が無くなったのも良い思い出です。
また、Unityの標準設定で採用しているForward Renderingはライトの数が増えると負荷が大幅に増える問題が有り、影を余り出せないことがあり、こういったライト表現が重要な場合は2Dボリュームライトでやった方が良い…という点もあります。
2Dボリュームライト
今回はコレを表現する方法を紹介します。といっても、アセット頼みです。
この表現は、2D Volumetric Lightで表現しています。アセットは更新頻度も高く動作も安定してるため、お気に入りのアセットの一つです。値段は15ドル
また、最近似たようなアセットとして 2D Dynamic Lights and Shadows が出てきました。これは無料ですが結構良い機能をもっているので、そのうち紹介記事を書きます。
2D Volumetric Light の使い方
これの使い方は超簡単です。
Create Other>2D VLS(2D Light) を選択し、「Dadial Light」や「Spot Light」を選ぶだけです。どれを選んでもLight 2Dが作成されます。
Light 2Dの項目では、光の角度や色、範囲、精度、staticかどうか、光との接触時に何らかのイベントを発生させるかどうかを設定します。
イベントを発生させている場合、光が接触中は「 Light2D.UnregisterEventListener」に登録したメソッドが呼ばれるようになります。
ライトとは逆にShadow Emitterを使えば、影を表現することで暗がりを強調する事もできます。
ちなみに自分のやった方法は、「Raycast全方位に飛ばしまくってメッシュをリアルタイムに変形させる」方法。そのままだと結構重いので、色々と工夫してた記憶がありますが覚えてません