無料アセットで簡単にIBLが出来るオープンソースシェーダLux

More than 1 year has passed since last update.

この記事は、Unity アセット真夏のアドベントカレンダーの24日目です。

IBLとは

IBLはImage Based Lightingの略で、画像を基にしたライティングという意味です。
ここでいう画像は基本的にキューブマップのことで、キューブマップに応じたライティングを行うことでシーンに設置したライトの色だけでは無く、夕焼けのSkyboxを表示したシーンではオブジェクトが赤みを帯びると言ったメリハリのあるレンダリングを行うことが出来ます。
UnityでIBLができる有名なアセットと言えばMarmoset Skyshopですが、今回は無料かつオープンソースで開発が進められているLuxを紹介します。

Luxとは

LuxはオープンソースのPhysically Based Shadingフレームワークです。PBS(物理ベースドシェーディング)は文字通り物理情報を元にシェーディングを行う手法で、木やプラスチック、金属の質感の違いをよりリアルに表現することが出来ます。Unityアセットで有名なものとしてはAlloyがあります。
Luxは無料にも関わらず単にIBLが出来るだけではなく、PBSもサポートしている非常に高性能なシェーダーアセットとなっています。
以下がその表示例です。

Demo Scene1

Luxを使ったIBL

金属のザラついた反射を再現したPBSやSkyboxの色を反映したIBLが正しく動作していることが分かると思います。
Vine動画のようにTerrainやキャラクターにもSkyboxに応じた雰囲気のある描画が行われているのが分かるかと思います。
2つめのドアの画像はLuxで作られたWeb Playerデモからのスクリーンショットで、以下のリンクから試せます。
LuxとUnityのポストエフェクトの組み合わせでUnreal Engine 4やUnity 5のデモに匹敵する描画クオリティが再現されていることが分かると思います。
Lux Demo
Web Player

インストール

Luxはアセットストアにもありますが、最新版はGitHubリポジトリで公開されています。
Download ZIPをクリックしてLux-master.zipをダウンロードし、解凍したファイルをUnityプロジェクトのAssetsフォルダにコピーしましょう。

使い方

Luxのセットアップ

Luxシェーダを使用する際はシーンにSetup Luxコンポーネントを追加したGame Objectが必要です。Add Component欄ではLux Setupと表示されているので注意しましょう。
Setup Lux

Diffuce Cube、Specular CubeでIBLに用いるキューブマップを選択します。
下のDiffuce/Specular is HDRではキューブマップがHDRテクスチャを使用しているかどうかチェックします。(このフラグが間違っていると正しい色でのライティングが行われません)
Lux_IBL_Diffuse/Specular_Exposureでは露出補正の強弱を設定します。
Lux_Water Floodlevel以下は先月追加された水系のマテリアルを再現する新機能Wetness向けの設定です。今回は紹介しませんが、フォルダ内にデモアセットが含まれているので色々と試してみてください。

マテリアルの設定

Setup Luxを設定したら、シーンに表示するGame ObjectのマテリアルにLuxのシェーダーを設定します。シェーダー選択欄にLuxカテゴリが作られるので、迷うことは無いでしょう。
例えば1枚目のスクリーンショットの球体はこのようなパラメータが設定されています。
スクリーンショット 0026-08-24 22.07.37.png
基本的にUnity標準のBumped SpecularシェーダにLux独自の設定が加わっただけなのが分かると思います。
マテリアル単位で別のIBL用キューブマップを設定したり、IBLを無効にすることも出来ます。Ambient Occlusionテクスチャの設定にも対応しています。

Terrain用設定

LuxをTerrainで使う場合はTerrainにコンポーネントの追加が必要となります。Lux Terrain Controlを追加してください。
アセットストアからダウンロードするとTerrainデモシーンが含まれているのでそちらも参考にしてください。
Lux Terrain Control
Setup Luxに加えてこのコンポーネントを加えるだけで、上記Vine動画のようにIBLが適用されたTerrainの表示を行えるようになります。

その他

Luxにはサブサーフェーススキャッタリングに対応した皮膚や髪、眼球用など様々なシェーダが用意されています。
あまりにも多いので今回の記事では省略しますが、ぜひ試してみてください。

最後に

Luxは無料で使えてUnity FreeでもUnity Proでも動作する非常に使いやすいアセットです。ソースコードが読めて改変後の商用配布も可能なのでシェーダの勉強にも良いと思います。どんどん使って描画クオリティを上げましょう。

明日はfrontakkさんによる「購入したパーティクルアセットをカスタマイズしてみよう」です。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.