今日はボリュームライトや、レンズの汚れ等を表現する方法を紹介します。
今日も今日とてSample Assetsを使用します。この表現(少なくともボリュームライト)を行うにはコレが必要ですので、Asset Storeからダウンロードして下さい。
新 Standard Assets候補、Sample Assets (beta) - テラシュールブログ
ちなみにUnity 4.6は4.6専用Sample Assetsがあるみたいです。
ボリュームライトを表現する
ボリュームライトとは、例えばコンサート等で光の軌跡が見えるアレです。たとえばスモークや煙・水蒸気等で光が反射し、光の軌跡が見える現象を指します。
Unityでは普通、ライトを適当に照らしても、ライトのあたっているオブジェクトが光るだけで、こういった表現は出来ません。そのため、例えばキャラクターにスポットライトを当てても、足元が光るだけでキャラクターの周りにスポットライトの軌跡は表現されません。
(モデルは黒羽式OculusChanをお借りしました)
そこで、Sample AssetsのLight Shaftコンポーネントを使用します。Light Shaftコンポーネントをアタッチすると、ライトの軌跡を表現するようになります。
コンポーネントは、Spot Lightオブジェクト選択中にAdd Componentボタンを押し、Light Shaftを検索してクリックすればOKです。
この機能でボリュームライトを表現出来るのは、Spot LightとDirectional Lightの2種類で、ポイントライトでは使えません(普通にHaloを表現しましょう)
Directional Lightに設定した場合、平行光源としてボリュームライトを表現します。黄色い範囲だけがボリュームライトとして機能するので、常にボリュームライトを表現したい場合は、キャラクターを追跡させるような実装を行うと良さそうです。
なお、Light ShaftはもしかしたらProライセンスを要求するかもしれません。コードにRenderTextureを使う形跡がありました。
また、モバイル等の場合はローテクですが3Dモデルで表現した方が良いかもしれません。円錐作って法線反転させる的な。
レンズの汚れを表現
強く光が当たった際に、目の中の汚れやレンズの汚れが強調される事があります。こういったレンズ的な表現を行うには、Screen Dropを使います。
使い方は簡単です。
- ScreenDrops/ScreenDropsComplexをレンズの汚れを表現したいカメラの子として配置
- ScreenDropsComplexのローカル座標をx:0, y:0, z:0にする
これで、ライトの光があたっている部分は汚れが強調され、良い感じにレンズの汚れが表現されるようになります。
汚れのパターンですが、ScreenDropsLayerのBaseやAlpha Mapを差し替えれば自作する事も可能みたいです。