Unity5のライティング機能を試してみた




こんにちは。ゴールデンウィークは育児に奮闘した、エンジニアのNHです。

さて、Unity5から、ライトマップエンジンが「Beast」から「Enlighten」へと変更されました。

これにより、Unityのライトマップが大幅に強化されました。

今回は、このUnity5におけるライティングについて簡単にみていきたいと思います。


ライティング手法


まず、Unity5におけるライティング手法について見ていきます。
Unityにおけるライティング手法は、大きく以下の3つに分けられます。

1. Standard realtime lighting


標準的なリアルタイムライティングです。
以下の要素がリアルタイムでシーンに反映されます。

  • Ambient light
  • Environment reflection
  • Realtime lights and shadows


2. Precomputed realtime GI


「Standard realtime lighting」に加え、以下の要素が事前計算されます。

  • Light bounces
  • Color bleeding
  • Emissive materials


3. Baked lightmaps


「Environment reflection」以外の全てのライティング要素がライトマップテクスチャーにベイクされます。(Reflectionのみリアルタイム計算されます)



Lightingウィンドウについて


次に、上記ライティング設定を行う際に肝となる、Lightingウィンドウについて見ていきます。Lightingウィンドウは、「Window > Lighting」を選択すると表示されます。

Lightingウィンドウには、下記3つのタブが存在します。

  • Objectタブ
  • Sceneタブ
  • Lightmapsタブ


それでは順を追ってみていきましょう。

(1) Objectタブ


「Scene Filter」を適用後、「Hierarchy」より「Light」,「Mesh Renderer」, 「Terrain」のうちいずれかを選択すると、各プロパティーが表示されます。

設定できる主なプロパティーは以下です。

1. Lights


①Baking

以下の中から一つ選択します。

  • Realtime・・・ライト情報をベイクしない設定です。計算負荷は高くなります。
  • Baked・・・「Baked GI」選択時に、ライト情報をベイクする設定です。モバイルプラットフォームで用いる事が多いです。
  • Mixed・・・RealtimeとBakedの合わせ技的設定です。ライト情報はベイクされますが、スタティックでないオブジェクトに対する直接光のリアルタイム計算も行われる設定です。


②Bounce Intensity

間接光の明るさを調整する際に使用します。値を上げると間接光が均一に強くなります。


2. Renderers


①Lightmap Static

Unityは、「Lightmap Static」なオブジェクトを対象にライトマップを焼きます。
「Lightmap Static」をチェックする事で、オブジェクトがスタティックであることをUnityに明示し、GIライティングの対象とします。

スタティックでない動的なオブジェクトについては、GIが適用されないため、「Light Probes」を併用するといい感じです。


②Scale in Lightmap


ライトマップテクスチャーのピクセル数に影響する値です。

デフォルト値は「1.0」です。

低いスケール値(1.0未満)を設定すると、暗い壁によって孤立した建物をうまく表現でき、高いスケール値(1.0以上)を設定すると、明るい空間におかれた精細なディティールが必要なオブジェクトをうまく表現できるようです。


③Preserve UVs


「Preserve UVs」が「オフ」の場合、Unityは、Max distance, Max angleの2つをベースに、ライトマップをできるかぎり圧縮するよう、UVの再計算を行います。

この時、計算結果にもし間違いがある場合は、「Preserve UVs」を「オン」にすることで回避できます。

不連続なUVマップについて、まちがった判断がされる場合があるようです。


④Important GI


チェックする事で、オブジェクトから反射されるか、発される光が、他のオブジェクトに目立つように影響を与える可能性があると Unityに伝えます。

⑤Advanced Parameters


アドバンストオプションです。
  • Default
  • Default-HighResolution
  • Default-LowResolution
  • Default-VeryLowResolution


から選択可能です。

計算時間とクオリティーに大きく影響します。


3. Terrains


以下の3つが設定可能です。

  • Lightmap Static
  • Scale in Lightmap
  • Advanced Parameters

(Renderersと同様のため、詳細は割愛します)

(2) Sceneタブ


大きく以下の項目に分かれます。

①Environment Lighting


「Ambient Source」で「Skybox」設定時、Skyboxを使ったライティングが可能になります。

「Sun」で既存のライトを設定後、回転すると、空に浮かぶ太陽が追従します。

「Reflection Intencity」でReflection Sourceのシーンへの影響度合いを、「Relection Bounces」で反射回数を設定できます。

「Relection Bounces」の設定値は、クオリティーに影響します。


②Precomputed Realtime GI


通常の照明計算に加え、以下の要素が事前計算されます。


  • Light bounces(※)
  • Color bleeding
  • Emissive materials(※)


事前計算が走るタイミングは、以下です。


  • 「Static」フラグがついたオブジェクトのPositon, Rotation, Scaleが変更された場合
  • 「Static」フラグのチェック状態に変更があった場合


「Static」フラグがつけられたオブジェクトに対してのみ、事前計算が行われ、
その際、「Light bouncing(※)」と「material emission(※)」は、Staticオブジェクトにのみ影響します。



③Baked GI


「Environment reflection」以外の全てのライティング要素がライトマップテクスチャーにベイクされます。(Reflectionのみリアルタイム計算されます)

「Baked Resolution」は、ライトマップのベイクにかかる時間に直接影響します。

「Ambient Occlusion」で遮蔽計算が、「Final Gather」でファイナルギャザリング(サンプリングポイントにヒットした際、半球上にレイを拡散し、周囲の色情報を基にした平均値で色を決定)がそれぞれ有効になります。


④General GI


「Indirect intensity」で、間接光のスケーリングを設定します。

「Atlas size」でベイクされるライトマップのサイズを設定します。

「Default Parameters」は、「Object」タブの「Advanced Parameters」と同様、


  • Default
  • Default-HighResolution
  • Default-LowResolution
  • Default-VeryLowResolution


から選択可能です。

インドア・アウトドア等、シーンに適した最適化が可能になるようですが、
正直なところまだ理解不足です。

8種のPrecomputed Realtime GI設定、4種のBaked GI設定、2種のBaked AO設定について、更に細かいカスタマイズも可能です。


パラメーター詳細
http://docs.unity3d.com/Manual/LightmapParameters.html



⑤Fog


霧の設定が行えます。



⑥Other Settings


Halo,  Flare,  Cookieの設定が行えます。



(3) Lightmapsタブ


ライトマップのベイクはこのタブで行いますが、Defaultでチェックが入っている「Contiunuous Baking」により、エディタ上でバックグラウンドで自動実行されます。

任意のタイミングでベイクしたい場合に、「Contiunuous Baking」のチェックを外し、「Build」をクリックすると手動実行できます。


テストシーン


上記をふまえ、簡単にシーン構築を行った結果が以下です。
途中経過も併せてご覧いただければと思います。








こちらが最終形になります。





いかがだったでしょうか。

Unity5では、複数のライティング手法から、適した手法を選択の上、適正値を設定する事で、ライティング表現とパフォーマンスのバランスをうまくとる事が出来ます。

他にもIBL(Image Based Lighting)など、押さえておきたいアプローチはたくさんあります。

時間をとり、引き続き学習を進めていきたいと思います!


参考サイト

http://www.edy.es/dev/docs/unity-5-lighting-cookbook/
http://docs.unity3d.com/ja/current/Manual/GlobalIllumination.html



トンガルマンWebサイト
https://tongullman.co.jp/index.php
facebook
https://www.facebook.com/Tongullman

0 件のコメント:

コメントを投稿