1.环境光照
2.天空盒作为镜面光
1.环境光照
Unity环境光照用于模拟间接光, 主要包含三大部分:a.漫反射间接光照b.镜面反射间接光照c.环境光遮蔽
1).漫反射间接光照a.它是什么光线在场景中经过多次反弹后, 均匀地, 无方向地照亮物体的光照; 它决定了物体在不受直接光源照射的"背光面"和"阴影处"的基本亮度和颜色b.如何提供- 光照贴图: 对于静态物体, unity可以预计算好光线反弹, 并将结果存储在一张称为Lightmap的贴图中, 在shader采样这张贴图可得到高质量的漫反射间接光 - 光照探针: 对于动态物体, unity使用光照探针来捕捉场景某个位置的光照信息
2).镜面反射间接光照这部分模拟了物体像镜子一样反射周围环境的效果a.它是什么物体表面光滑到一定程度后, 会清晰地反射出它周围的场景b.如何提供- 反射探针: unity会在场景中放置一些反射探针, 它们会拍摄出一张360度的环境贴图; shader会根据物体表面法线和视线方向, 去采样这张环境贴图, 来模拟反射- 天空盒: 如果没有反射探针, 那么就会使用场景设置的天空盒作为反射源
3).环境光遮蔽它用于模拟场景中物体之间或物体自身几何结构遮挡而产生的阴影, 使得角落, 缝隙等接触区变暗, 从而极大地增强画面的体积感和真实感a.它是什么一种变暗间接光照的技术, 让光线难以到达的地方看起来很暗b.如何提供- 烘培AO: 在光照烘培时, 可以生产一张专门的AO贴图, 它通常和Lightmap是同一张贴图的不同通道(AO信息本身不是一个独立的光照颜色, 而是一个乘数)- 屏幕空间环境光遮蔽: 一种后处理效果, 不在shader的逐物体计算范畴内, 最终效果是叠加在一起的
2.天空盒作为镜面光
镜面反射是方向性的, 而漫反射是无序的; 想象一个光滑的球体:1).镜面反射当你看向球体上某个高光点时, 你的眼睛只能接收到来自环境中的一个特定方向的光线; 这个光线经过球体表面, 像镜子一样直接反射到你眼里; 天空盒正好提供了这个"特定方向"的信息!它是一张包裹整个场景的、包含各个方向颜色和亮度的全景图结论: 镜面反射需要知道"从某个特定方向看过来是什么", 天空盒完美地提供了这个信息。2).漫反射a.当你看向球体上一个普通的漫反射点时, 这个点会接收来自上半球所有方向的环境光, 然后把这些光打散, 均匀地反射到各个方向; 如果直接用天空盒来计算漫反射, 理论上需要将整个天空盒半球的光线积分(累加)起来, 这是一个非常耗时的计算b.解决方案: 为了高效计算, Unity使用球谐光照来近似表示来自整个环境的漫反射光; 球谐函数将复杂的天空盒光照信息压缩成几个简单的系数, 可以非常快速地计算出这个点从所有方向接"收到的平均光照是多少"c.结论: 漫反射不需要精确的方向信息, 只需要一个平均的、来自各个方向的光照颜色和强度球谐光照就是这个"平均结果"