テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityで2Dのボリュームライト表現

ボリュームライトとは、コンサートや車のヘッドライトで見える光の軌跡です。

http://cdn-ak.f.st-hatena.com/images/fotolife/t/tsubaki_t1/20141001/20141001004514.png


Unityでボリュームライト表現やレンズの汚れ表現 - テラシュールブログ

 

以前、これをやるために頑張って2日ほどかけて機能を自作しました。このとき表現したかった事は、「敵の視界をギリギリまでキッチリと表現する」事でした。

これは、最近の某ステルスゲームのような「見つかってるのか見つかっていないのか分かりにくい」事を回避し、よりアクションに集中出来るようにする事が目的でした。

作った数日後に、遥かに優れたアセットが15ドルで出てきて驚愕したものです。

 

上が作ったもの。賞金のあるゲームジャムWEGで、一人で二日間かけて作りました。これ作ったのが実は自分の人生の転機だった気がします。

実際にプレイするにはこちら。懐かしすぎて涙がでる。

 

f:id:tsubaki_t1:20141119002221p:plain

下は自分の思ってた理想のゲームです。こんなゲームを考えてた所にゲームが出てきたので、一気に制作欲が無くなったのも良い思い出です。

f:id:tsubaki_t1:20141119001412p:plain

また、Unityの標準設定で採用しているForward Renderingはライトの数が増えると負荷が大幅に増える問題が有り、影を余り出せないことがあり、こういったライト表現が重要な場合は2Dボリュームライトでやった方が良い…という点もあります。


ライトを複数置いた時の問題 - テラシュールブログ

 

2Dボリュームライト

今回はコレを表現する方法を紹介します。といっても、アセット頼みです。

f:id:tsubaki_t1:20141119002715g:plain

 

この表現は、2D Volumetric Lightで表現しています。アセットは更新頻度も高く動作も安定してるため、お気に入りのアセットの一つです。値段は15ドル

 

f:id:tsubaki_t1:20141119003359p:plain

 

また、最近似たようなアセットとして 2D Dynamic Lights and Shadows が出てきました。これは無料ですが結構良い機能をもっているので、そのうち紹介記事を書きます。

f:id:tsubaki_t1:20141119010556p:plain

2D Volumetric Light の使い方

これの使い方は超簡単です。

Create Other>2D VLS(2D Light) を選択し、「Dadial Light」や「Spot Light」を選ぶだけです。どれを選んでもLight 2Dが作成されます。

f:id:tsubaki_t1:20141119004643p:plain

Light 2Dの項目では、光の角度や色、範囲、精度、staticかどうか、光との接触時に何らかのイベントを発生させるかどうかを設定します。

f:id:tsubaki_t1:20141119005213p:plain

 

イベントを発生させている場合、光が接触中は「 Light2D.UnregisterEventListener」に登録したメソッドが呼ばれるようになります。

 

ライトとは逆にShadow Emitterを使えば、影を表現することで暗がりを強調する事もできます。

f:id:tsubaki_t1:20141119010307p:plain

f:id:tsubaki_t1:20141119010237p:plain

 ちなみに自分のやった方法は、「Raycast全方位に飛ばしまくってメッシュをリアルタイムに変形させる」方法。そのままだと結構重いので、色々と工夫してた記憶がありますが覚えてません