Directional lightmaps は、ライティング環境に関して、通常のライトマップよりも詳細な情報を格納します。シェーダーでは、出射光の計算結果を向上させるために、入射光に追加データを使用することができます。これにより画面に描画される時のマテリアルの見え方が決まります。これは、テクスチャメモリの使用量とシェーディング時間を増加させます。
3つのモードのいずれかを選択できます: Non-directional 、Directional および Directional with Specular 。3つとも、realtime や baked ライトマップとして使用できます。
Performance: the Directional mode uses twice as much texture memory as Non-directional lightmaps and has a slightly higher shading cost. Directional with Specular uses twice as much texture memory as Directional (it also uses two textures per set, but they’re split in two, so twice as many sets are needed). Its shading cost is comparable to two un-shadowed lights, as it runs the BRDF twice - for direct and indirect light. Non-directional: one texture, one texture sample, a few extra shader instructions. Directional: two textures, two texture samples, a few more extra shader instructions. Directional with Specular: two textures, four texture samples, high extra shader cost (about two un-shadowed lights).
リアルタイムライトマップは、同じアプローチを活用して、同じシェーディングの品質とコストのトレードオフになります。上記のリストとの唯一の違いは、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 を増やして解決することができます。他のすべてが失敗した場合は、よりシンプルなライトマップモードの方がロバストなのでおすすめです。