GI
全局照明:直接光照 + 间接光照
Unity 中的GI技术
预计算实时GI
把需要的数据提前烘培好,运行时再进行读取。
烘培GI
把光源对静态物体的光照效果提前烘培到一张lightmap,然后把lightmap采样到物体表面以产生全局光照效果。
###LightMap
静态物体使用 bake lightmap
Light Probes
光照探针是为了让动态物品也可以受bake GI的影响。
与光照贴图类似,光探针存储有关场景中光照的“烘焙(baked)”信息。不同之处在于,光照贴图存储的是场景中光照射到表面的信息,光探针会存储有关光线穿过场景中空白区域(empty space)的信息。
Meta Pass
间接光的产生。
全局照明的shader实现
三个Pass:
"LightMode" = “ForwardBase” // 主渲染
UnityGIInput gi
: GI的数据准备, gi.light(直接光照), gi.indirect(间接光照)
UnityGI_Base(gi, 1, Normal)
:GI的间接光照计算, 数据存储在gi
LightingLambert(gi)
: GI的直接光照计算(Unity内部的GI采用的是Lambert光照模型)
"LightMode" = “ShadowCaster” // 阴影
"LightMode" = “Meta” // 间接光照的产生
UnityMetaInput metaIN
:间接光照数据, metaIN.Albedo(自发光反射率), metaIN.Emission(自发光颜色)