Directional lightmaps は、通常のライトマップより照明環境に関する詳細な情報を格納します。シェーダーは、出射光を計算するために入射光について余分なデータを使用することができます。マテリアルをよりよくスクリーンに表示させる方法です。これは、テクスチャメモリの使用量とシェーディング時間を増加させます。
3つのモードのいずれかを選択できます: Non-directional 、Directional および Directional with Specular 。3つとも、realtime や baked ライトマップとして使用できます。
Performance: Directional モードは Non-directional ライトマップなどの多くのテクスチャメモリを2倍使用し、そしてシェーディングコストがわずかに高くかかります。スペキュラーとの方向性は、Directional の二倍多くのテクスチャメモリを使用します(それはセットごとに2つのテクスチャを使用していますが、それらは2つに分割するので、倍の数のセットが必要なのです)。そのシェーディングコストは、BRDF を二回実行し、直接的および間接的な光のために、2つのシャドウのない光と同等になります。 Non-directional: 1つのテクスチャ、1つのテクスチャ・サンプル、いくつかの付加的なシェーダー命令。 Directional: 2つのテクスチャ、2つのテクスチャ・サンプル、もういくつかの付加的なシェーダー命令。 Directional with Specular: 2つのテクスチャ、4つのテクスチャサンプル、高い追加シェーダーコスト(およそ2つの影のない光)。
リアルタイムライトマップは、同じアプローチを活用して、同じシェーディングの品質とコストのトレードオフになります。上記のリストとの唯一の違いは、Specular lightmap による Realtime Directional が3つのテクスチャ(incoming intensity, direction, normal)を使用していることです。3つのテクスチャサンプルを持っていきます。一度だけ BRDF が実行され、1つの影のない光のシェーディングコストがかかります。それはリアルタイム直接光との組み合わせで動作しますが、もちろん、独自のシェーディングコストがかかります。
実際に(スペキュラーリアルタイムで、間接的な部分をベイクした、Directional な)間接光のために使用される BRDF は、わずかにコストのかからないバージョンです。UNITY_BRDF_PBS_LIGHTMAP_INDIRECT
は UnityPBSLighting.cginc
で定義されています。
Specular モードによる Directional は lightmapper を GI テクニックの限界状態にしてしまい、ある場合にはアーティファクトにつながります。これらは、ほとんどの場合、誤ったドミナント光の方向や、ダークを引き起こしたり、または黒のシェーディングを引き起こすパッチです。これらの問題のいくつかは、Realtime/Indirect Resolution を増やして解決することができます。他のすべてが失敗した場合は、よりシンプルなライトマップモードの方がロバストなのでおすすめです。