伽马校正与线性空间


基础概念

Shader 入门精要,18.4.2章节

image-20211222114313771 image-20211222114323687 image-20211222114338610 image-20211222114348911 image-20211222114404177

sRGB颜色空间标准:图像使用 0.45编码,显示器使用 2.2解码,这个流程叫 sRGB颜色空间标准

1/2.2 约等于 0.45

Pow(颜色,1/2.2) –> png 编码伽马,将现实世界的线性的颜色编码成Gamma空间

Pow(png,2.2) –> 显示器 显示伽马,将Gamma空间的颜色值还原成现实世界的线性颜色值

image-20211222135042416 image-20211222135058033

Gamma 与线性的光照差异和混合差异

image-20211222135223940 image-20211222135234307 image-20211222135250507

Unity线性空间背后的设置

  1. Gamma 空间

    1. Unity 处于放任模式,不会对输入和输出进行任何处理
  2. Linear 空间

    1. 会把勾选了 sRGB的贴图,在采样时,自动将其转换到线性空间

    2. 开启 HDR

      1. 将颜色写入到颜色缓冲区,或者自定义RT时,均使用线性写入,不进行 Gamma 编码
      2. 在读取颜色缓冲区或者RT时,不需要 Gamma 解码操作
    3. 使用 LDR

      1. 将颜色写入到颜色缓冲区,或者自定义RT时,进行 Gamma 编码,此时贴图跟 sRGB空间的贴图没有任何区别
      2. 在读取颜色缓冲区或者RT时,需要进行 Gamma 解码操作
      3. 混合操作时, Gamma 解码 ->混合 -> Gamma 编码 ->缓冲区,A通道不参与伽马校正

在Unity使用了线性空间后,Unity会在把像素写入颜色缓冲区前进行一次伽马编码校正,来抵消显示器的显示伽马解码作用

image-20211222135347803 image-20211222135358173

官网文档 Linear or gamma workflow

https://docs.unity3d.com/2019.4/Documentation/Manual/LinearRendering-LinearOrGammaWorkflow.html


文章作者: 血魂S
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 血魂S !
  目录