Light Probeを使ってDynamicなオブジェクトにも間接光を影響させる方法です。
Unity2018.3.1
Light Probe?
Unityでライトマップをベイクすると、間接光の影響が反映されるため、
色のついた物体のそばに白い物体が近づくと色づいて見えます。
しかし間接光の影響はDynamicなオブジェクトには反映されないので、
白い物体のStaticフラグを外すと次のように間接光が影響しなくなります。
Light Probeを使うと、Dynamicなオブジェクトにも間接光を影響させることができます。
設定方法
まず検証用にこんな感じのシーンを作ります。
次に空のGameObjectを作成し、Light Probe Group
というコンポーネントをアタッチします。
するとシーンビューに黄色い点が現れます。この一つ一つがLight Probe
です。
Light Probe Group
のインスペクタからEdit Light Probes
をクリックすると編集モードに入ります。
この状態でAdd Probe
を押すとLight Probe
を追加できます。
またシーンビューからLight Probe
を選択してインスペクタのSelected Probe Position
に座標を入力すると移動できます。
このように移動と追加を行い、下記のように配置します。
Capsuleは見づらいのでいったん消しています
次にDynamicなCapsuleオブジェクトのMesh Renderer
のLight Probes
をBlend Probes
に設定します。
設定は以上です。
この状態でCapsuleを移動すると、間接光の影響を受けていることがわかります。
仕組み
Light Probe
の考え方としては、まず各Light Probe
がその場所の色の情報を持っています。
Dynamicなオブジェクトは周辺のLightProbe
の色を取ってきて、自分の位置に応じてそれらの色を補間します。
そしてその色を自身に反映することで間接光を影響させます。
この様子を確認するには、シーンビューでDynamicなオブジェクトを選択して動かしてみます。
すると影響するLightProbe
が位置に応じて切り替わっていく様子が見てとれます。
ちなみにLight Probe
1個あたりの情報量としては、RGB各チャンネルに9個のfloat、つまりfloat27個分とのことです。
この記事で詳しく触れなかった事項
最後にこの記事で詳しく触れなかった事項について書いておきます。
まず、Light Probe
を並べる作業はあまり手作業でできる感じじゃないので、スクリプトで行う方法が紹介されています。
実際にシーンを作る際にはこのあたりのツールを作ったほうがよさそうです。
また、Mesh Renderer
の設定をBlend Probes
にしていると常に近くのLight Probe
を取得するため、
大きいオブジェクトではLight Probe Proxy Volumes
という機能を使ったほうが品質が上がるようです。
ただ下記の制約があるようなので、今回は触れないことにしました。
この辺りは使う機会があれば記事を書こうと思います。
コンポーネントには最低でも、32 ビットの浮動小数点形式とリニアフィルタリングを備えた 3D テクスチャのサポートを含む、Shader Model 4 グラフィックスハードウェアと API サポートが必要
Light Probe Proxy Volumes (LPPV) コンポーネント - Unity マニュアル