テラシュールブログ

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

Unityでボリュームライト表現やレンズの汚れ表現

今日はボリュームライトや、レンズの汚れ等を表現する方法を紹介します。

 

f:id:tsubaki_t1:20141001004514p:plain

f:id:tsubaki_t1:20141001004218g:plain

 

今日も今日とてSample Assetsを使用します。この表現(少なくともボリュームライト)を行うにはコレが必要ですので、Asset Storeからダウンロードして下さい。


新 Standard Assets候補、Sample Assets (beta) - テラシュールブログ


ちなみにUnity 4.6は4.6専用Sample Assetsがあるみたいです。

 

ボリュームライトを表現する

ボリュームライトとは、例えばコンサート等で光の軌跡が見えるアレです。たとえばスモークや煙・水蒸気等で光が反射し、光の軌跡が見える現象を指します。

 

Unityでは普通、ライトを適当に照らしても、ライトのあたっているオブジェクトが光るだけで、こういった表現は出来ません。そのため、例えばキャラクターにスポットライトを当てても、足元が光るだけでキャラクターの周りにスポットライトの軌跡は表現されません。

 

f:id:tsubaki_t1:20141001003850p:plain

(モデルは黒羽式OculusChanをお借りしました)

 

そこで、Sample AssetsのLight Shaftコンポーネントを使用します。Light Shaftコンポーネントをアタッチすると、ライトの軌跡を表現するようになります。

コンポーネントは、Spot Lightオブジェクト選択中にAdd Componentボタンを押し、Light Shaftを検索してクリックすればOKです。

 

f:id:tsubaki_t1:20141001003858p:plain

f:id:tsubaki_t1:20141001005523p:plain

 

この機能でボリュームライトを表現出来るのは、Spot LightとDirectional Lightの2種類で、ポイントライトでは使えません(普通にHaloを表現しましょう)

 

Directional Lightに設定した場合、平行光源としてボリュームライトを表現します。黄色い範囲だけがボリュームライトとして機能するので、常にボリュームライトを表現したい場合は、キャラクターを追跡させるような実装を行うと良さそうです。

 

f:id:tsubaki_t1:20141001011057p:plain

f:id:tsubaki_t1:20141001011649p:plain

なお、Light ShaftはもしかしたらProライセンスを要求するかもしれません。コードにRenderTextureを使う形跡がありました。

また、モバイル等の場合はローテクですが3Dモデルで表現した方が良いかもしれません。円錐作って法線反転させる的な。

 

レンズの汚れを表現

強く光が当たった際に、目の中の汚れやレンズの汚れが強調される事があります。こういったレンズ的な表現を行うには、Screen Dropを使います。

f:id:tsubaki_t1:20141001012012p:plain

ScreenDrops

 

使い方は簡単です。

  1. ScreenDrops/ScreenDropsComplexをレンズの汚れを表現したいカメラの子として配置
  2. ScreenDropsComplexのローカル座標をx:0, y:0, z:0にする

これで、ライトの光があたっている部分は汚れが強調され、良い感じにレンズの汚れが表現されるようになります。

 

f:id:tsubaki_t1:20141001012513p:plain

f:id:tsubaki_t1:20141001012444p:plain

汚れのパターンですが、ScreenDropsLayerのBaseやAlpha Mapを差し替えれば自作する事も可能みたいです。