【Unity】表現方法から見た実践的なライトとベイクの設定方法

Unityでライトマップをベイクをする際の、目的に応じた設定方法を検証しました。

Unity2018.2.0

ベイク周りの基礎知識

この記事では実践的な設定方法のみ説明します。
ベイク周りの基礎知識については下の記事に書いているのでこちらを参照してください。

light11.hatenadiary.com

検証用のシーンを作る

まず検証用にこんなシーンを作りました。

f:id:halya_11:20181205000843p:plain:w500

実際のゲームでは、キャラクターを動的にして環境のオブジェクトはStaticにすることが多いかと思います。
そのため今回は猿のモデルをキャラクターであると想定してDynamicに、それ以外はStaticにしました。
また、シャドウマップのdistanceは途中で消える範囲に設定してあります。

f:id:halya_11:20181205001340p:plain:w500

全部リアルタイムにしたい

まずはベイクなしで、全部リアルタイム処理してみます。
設定は下記のようにします。

f:id:halya_11:20181205001955p:plain:w500

  • LightのModeはRealtime
  • Lighting SettingsのMixed LightingのBaked Global IlluminationはOFF
  • (Realtime LightingのRealtime Global IlluminationはOFF)

という感じです(前節の画像と同じ設定です)。

すると、次の結果が得られます。

f:id:halya_11:20181205000843p:plain:w500

直接光によるSpecularは綺麗に出ていますが、
間接光が表現されないため、Diffuseは単調な仕上がりになります。
また、影もすべてリアルタイム計算なのでシャドウマップ範囲外の影は消えてしまいます。

f:id:halya_11:20181205002717p:plain:w500

環境は完全ベイク、キャラクターはリアルタイムにしたい

次に環境はすべてベイクにして、キャラクターだけリアルタイムで処理してみます。
設定は下記のようにします。

f:id:halya_11:20181205003058p:plain:w500

  • LightのModeはMixed
  • Lighting SettingsのMixed LightingのBaked Global IlluminationはON
  • Lighting SettingsのMixed LightingのLighting ModeはSubtractive
  • (Realtime LightingのRealtime Global IlluminationはOFF)

にしました。
結果はこんな感じになります。

f:id:halya_11:20181205002423p:plain:w500

前節のものより間接光が正確に表現され、遠くの影も表示されるようになりました。
ただしStaticなオブジェクトのSpecularは消えました。
Specularは視点に依存するため、ベイクはされません(できません)。

f:id:halya_11:20181205002826p:plain:w500

環境はベイクだけどSpecularは入れたい

前節ではStaticなオブジェクトからSpecularが消えてしまいました。
そのため次に、ベイクをしつつもスペキュラが表現される設定にしてみます。

f:id:halya_11:20181205003358p:plain:w500

  • LightのModeはMixed
  • Lighting SettingsのMixed LightingのBaked Global IlluminationはON
  • Lighting SettingsのMixed LightingのLighting ModeはBaked Indirect
  • (Realtime LightingのRealtime Global IlluminationはOFF)

というように設定しました。
これは「間接光のみベイクして直接光はリアルタイム計算する」という設定になります。

結果はこんな感じです。

f:id:halya_11:20181205003551p:plain:w500

間接光はベイクを行っているので前節のようにDiffuseはいい感じに表現されています。
また、直接光はライティング計算を行っているのでSpecularも出ています。
ただし、直接光をリアルタイム計算した影響でシャドウマップ範囲外の影がまた消えてしまいました。

f:id:halya_11:20181205003623p:plain:w500

環境ベイクだけどSpecular入れたいし遠くの影も表現したい

前節ではシャドウマップ範囲外の影が消えてしまったので、
最後に間接光のベイクを行いつつ影をちゃんと表示する設定をしてみます。

f:id:halya_11:20181205003755p:plain:w500

  • LightのModeはMixed
  • Lighting SettingsのMixed LightingのBaked Global IlluminationはON
  • Lighting SettingsのMixed LightingのLighting ModeはShadowmask
  • (Realtime LightingのRealtime Global IlluminationはOFF)

Lighting ModeをShadowmaskにしました。
これは「シャドウマップ範囲内の影はリアルタイム計算し、範囲外の影はベイクしたものを使う」という設定です。

結果はこんな感じになります。

f:id:halya_11:20181205003843p:plain:w500

SpecularもDiffuseもいい感じに表現され、遠くの影もしっかり落ちました。

f:id:halya_11:20181205004047p:plain:w500

関連

light11.hatenadiary.com