この段階で、メッシュには適切なテクスチャが施され、シーンは適切にトーンマップを施されたレンダリング設定になっているはずです。しかしシーンにはまだ適切なライティング設定が必要です。 このセクションでは、シーンを リアルタイム GI で設定し、即時のフィードバックを得るためにリアルタイムライトでライティングすると仮定して、説明します。 このアドバイスとライティングの原理は、ベーキング時にも適用されます。
屋外ライティングとシーン設定には、以下の点を考慮してください。
屋外ライティングの主な要素の 1 つは Environment (環境) ライティングです。これは、半球ライティング、またはスカイライトとも呼ばれます。夜空では光は最低限ですが、日中の空はとても明るい光を提供します。環境ライティングの設定は Lighting タブ (Window > Rendering > Lighting Settings) で行います。
自動生成のスカイボックスマテリアルは、シンプルで使用が容易な点が HDRI キューブマップよりも優れています。
以下の手順でスカイボックスマテリアルの自動生成を行います。
プロジェクトに新しいマテリアルを加え、SkyMaterial と名付けます。
Inspector で、マテリアルの Shader を Skybox/Procedural に設定します。
Lighting ウィンドウの Scene タブで、Environment > Skybox Material と移動し SkyMaterial を割り当てます。
すると、シーンが少し明るくなりました。アンビエントライトはありますが、適切な環境光がありません。
一般的な太陽光や月の光は通常、ディレクショナルライトによって表現されます。これは、ディレクショナルライトの光と影の方向が平行になる性質のためで、距離が無限に近いときの光を模倣します。
ディレクショナルライトとアンビエントライトだけでは、現実のようなライティングは実現できません。適切な環境ライティングにはスカイライトの遮蔽が必要です。また、太陽光には間接光の反射が必要です。 この例では、空は現在、単一のカラー値をシーンにレンダリングし、平らにしています。 ここにリアルタイム GI または、ベイクしたライティングを設定し、オクルージョンライトと間接的な反射光を計算する必要があります。 そのためには、以下の手順を行います。
関連するすべてのメッシュをリアルタイム GI またはベイクに反映させるには、シーン内のゲームオブジェクトを選択し、Inspector ウィンドウの Static ドロップダウンで Lightmap Static と Reflection Probes を有効にします。
ノート: 通常、すべての大きな静的メッシュに同じ手順を行います。
シーンに リアルタイム GI を設定するには、Lighting ウインドウで Scene > Realtime Lighting > Realtime Global Illumination の順に選択します。
Lighting ウィンドウの下の方で、必ず Auto Generate をチェックしてください。
この段階では、サンプルシーンが暗くなり、路面電車や背後のドアなど、シーンのいくつかの要素が見えなくなります。
シーンの静的ゲームオブジェクトには、現在、環境ライティング (半球ライティング) の適切な遮蔽とディレクショナルライトからの間接的な反射が施されています。ただし、その他のゲームオブジェクトには適切なライティングの設定が必要です。
動的なゲームオブジェクトやライトマップを使わないゲームオブジェクトがリアルタイム GI やベイクした GI を受けるためには、ライトプローブをシーンに配置する必要があります。例えば、動的にライティングされるゲームオブジェクトの近くやプレイヤーが通りすぎる領域などに置きます。ライトプローブグループの詳細については、ライトプローブ を参照してください。
Lighting ウィンドウで Auto Generate がチェックされているため、変更を行うたびにライトが更新されます。サンプルシーンのライトプローブの例では、路面電車と背景のドアは良くなりましたが、リフレクションは誤った場所に見えます。空のリフレクションがあちこちにあり、トンネルの内側にまで現れています。
リフレクションプローブはこの問題を解決するのに役立ちます。 必要に応じてシーンに適切に広がるようにしてリフレクションプローブを効率的に配置します。上のシーンでは、空間全体のリフレクションプローブは 1 つで十分です。 ボックス投影法を使用した 128 ピクセルのキューブマップ解像度は、ほとんどの場合に適したベースラインであり、メモリおよびリフレクションのベイク時間にも役立ちます。
シーンは、適切になり一貫しているように見えます。これは、現実的なシーンには重要です。 しかし、すべてが以前よりも暗くなり、現実的といえる品質にはほど遠い状態です。
リフレクションプローブに関する詳細は、リフレクションプローブ を参照してください。
実際には、環境光と太陽光は非常に明るい光で、ピクセル値 1 よりもはるかに明るくなります。HDR ライトは 0–1 の範囲外のピクセル値に対応できるため、このような状況に役立ちます。 環境光がシーンに対してどのように作用するかを分かりやすく説明するために、サンプルシーンでシーンのディレクショナルライトをオフにし、 SkyMaterial > Exposure と移動し、これを 16 に設定します。
太陽光が完全に空に拡散し、ディレクショナルライトが見えない曇りの日であるかのように、シーンが現実的に見えてきました。今度は Intensity を 5 に設定して、太陽光をより高い値でシーンに適用してみましょう。太陽はほぼ白色にしか見えませんが、適切な色を選択することが重要です。なぜなら、強い太陽光からの間接色の影響は劇的にシーンの見え方を変化させるからです。
今や、現実世界でそうであるように、太陽光 (ディレクショナルライト) は高エネルギーに見え、シーンははかなり現実らしく見えます。
この時点でシーンのライティングはかなり良い状態に見えますが、詳細を加えるとシーンをより現実的にすることができます。合理的なパフォーマンスのためにリアルタイム GI の解像度に制限を加えて設定しているため、詳細なオクルージョンの作成は通常は不可能です。 このような場合にスクリーンスペースアンビエントオクルージョンは役立ちます。Ambient Occlusion をチェックして、Post-Process Profile の SSAO を有効にします。サンプルシーンには、Rin_Post_Basic.asset というポストプロセスプロファイルが含まれ、以下のアンビエントオクルージョンに設定されています。
SSAO は余分なアンビエントライトのオクルージョンを処理し、スクリーンスペースリフレクションは精度を向上させます。ポストプロセスプロファイルで Screen Space Reflection を有効にすると、濡れた線路の左側が明るいリフレクションをレンダリングしません。これは、SSR が画面上のゲームオブジェクトに対してシーンにより精密なリフレクションが加えられたためです。
これらのポストプロセスオプションは両方とも、ランタイムにパフォーマンスの影響を招くため、上手く利用するようにします。値を調整して、パフォ-マンスへの影響がランタイムの要件に合った妥当なものになるようにします。
この段階で、露出が固定された状態で、屋内と屋外の値の分離でシーンが現実的に見えるようになってきました。暗い屋内領域では、強いハイライトとして (深くくすんだ色値ではなく) リフレクションが表現されています。ただし、手前と背景の要素は深い奥行きを示す要素であるにも関わらず、見えにくくなっています。
少しフォグを加えると、シーンにもう一つのニュアンスが加わり著しい違いが出ます。
以前のフォグなしのシーンと比較すると、手前の手すりがより鮮明になっています。 Lighting ウインドウで、Scene > Other Settings > Fog の順に選択しフォグを有効にします。この例では Fog が #6D6B4EFF、Density が 0.025 に設定され、Exponential が有効になっています。ディファードレンダリングで、フォグが自動で有効になっていない場合には、ポストプロセスプロファイル内で有効にしなければならない場合があります。