Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

参考书籍:《Unity Shader 入门精要》
【《Real-Time Rendering 3rd》 提炼总结】(八) 第九章 · 全局光照:光线追踪、路径追踪与GI技术进化编年史
官方:ReflectionProbes
官方:Global Illumination
官方:High Dynamic Range Rendering
官方:Linear rendering overview


全局光照(Global illumination, GI)

场景的物体的光线投射到物体会反弹(Bounce)光线到别的物体,产生间接光照。

通过设置Bounces值来控制间接光的强度。
Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)_第1张图片

预计算实时全局光照(Precomputed Realtime GI)

动态为场景实时更新复杂的光照结果。
实现原理:先计算静态物体间和光源位置的关系,对动态移动的物体,使用光照探针模拟光照环境。


反射探针(Reflection Probes)

在特定位置对场景采样。在有反射效果的物体在探针附近时,会把探针的结果给物体。多个探针时,做插值。
Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)_第2张图片

下图白色带微笑的圆圈就是反射探针。
Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)_第3张图片

反射探针还可以实现物体互相反射的效果。(如下反射值为2,第一次反射会是全黑色的。)
Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)_第4张图片


线性空间(Linear)和 伽马空间(Gamma)

  • 线性空间:采集到亮度为0.5,像素就是0.5。符合计算规则(PBS必须在线性空间计算)。
  • 伽马空间:采集到亮度为0.22,像素是0.5(0.45的编码伽马γ)。根据人眼光灵敏度,调整像素值,充分利用图像的存储空间。

伽马校正:伽马空间转换到线性空间。Lout = Linγ

sRGB颜色空间标准下,0.45的编码伽马,配合2.2的显示伽马来相互抵消(2.2 × 0.45 ≈ 1)。线性空间下,输入纹理设置为sRGB模式,对纹理采样时就会转换到线性空间。
Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)_第5张图片

Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)_第6张图片


高动态范围(High Dynamic Range, HDR)

动态范围:最高和最低的亮度值之间的比值。

HDR使用高于8位的精度来记录亮度信息,可表示超过0~1的亮度值,更精确反映真实光照。尽管最后要把信息转回显示设备的LDR,但中间的计算可以得到更真实的效果,即如果亮度超过1,可以使用**色调映射(tonemapping)**来最大限度保留需要的亮度细节。

缺点:需要更大显存空间,渲染会变慢,一些硬件并不支持HDR。使用HDR就无法开启硬件的抗锯齿功能(可以用屏幕后处理弥补)。

你可能感兴趣的:(Unity,Shader,图形学,Unity,Shader,学习笔记)