GI:全局光照,指的是模拟光线是如何在场景中传播的算法。不仅会考虑直接光照的结果,还会计算光线被不同的物体表面反射产生的间接光照。
Unity使用的是预计算实时全局光照 : 实时(直接光照)+ 预计算(直接光照和间接光照)模拟光照。(这里的实时指的就是物体移动光照效果也会变化。)实时光照没办法模拟光线的多次反射的效果,所以加了预计算光照。预计算光照效果就既有直接光照,也有间接光照。
原理:一旦物体和光源的位置固定,物体对光线的反弹路径及漫反射光照也是固定的,因此可以预计算,把物体之间的这些关系计算出来。这样在实时运行时,只要光源位置不变,这些关系信息就一直有效,不需要实时更新。
Unity Enlighten光照系统提供了两种技术:烘焙GI 和 预计算实时GI。同时使用这两种会有性能问题。
烘焙GI: LightMap,即烘焙GI中的光照贴图,表示静态物体基于光的影响计算出的贴图。把光源对场景中静态物体的光照效果提前烘焙到一张光照纹理中,然后把光照纹理直接贴在物体表面。(有直接光照信息,也有间接光照信息)
预计算实时GI:传统的静态光照贴图无法在游戏执行中改变场景光照条件,预计算是实时GI可以实时运算光源互动,实时的反应光源的变化。预计算主要也是为了在实时计算之前准备一些数据的计算,可以在时间空挡进行。Enlighten会在由所有静态物体(Lightmap Static勾上)组成的场景中,进行简化的光线追踪。这个阶段会自动把场景分为多个子系统,并且得到这些子系统之间的关系。对于动态物体,由于物体的高光反射是和相机的位置有关的,因此使用光照探针可以来模拟动态移动的物体的光照环境。
实时计算阶段:利用预计算得到的光照信息(光照纹理,反射探头,Cubemap)和物体的材质进行计算,得到最后的渲染效果。
HDR:高动态范围,用来定义相机截取的最亮和最暗的颜色范围。Unity使用低动态范围,每个通道(RGB)使用8位表示。HDR远高于8位的精度。