真实世界亮度(线性) 图像亮度 真实亮度在图像差值递减
0.1 0.35 0.35
0.2 0.48 0.13
0.3 0.58 0.1
0.4 0.66 0.08
0.5 0.73 0.07
0.6 0.79 0.06
0.7 0.85 0.06
0.8 0.90 0.05
0.9 0.95 0.05
1 1 0.05
线性空间:
真实世界亮度0.2 -> gamma变亮编码到图像0.48 -> gamma矫正变暗解压到线性(真实) 0.2 参与线性计算
->编码到颜色缓冲0.48 ->显示器gamma矫正到0.2。
1. 亮度0.2,存储到gamma图变成0.48爆亮。
2. 通过勾选图片sRGB,采样时unity自动矫正pow(0.48, 2.2) = 0.2,线性值参与计算。
3. pow(0.2, 1/2.2)=0.48存入颜色缓存。
4. 显示器gamma矫正pow(0.48, 2.2)=0.2显示正常。
线性空间总结:
真实世界正常颜色 -> 图片(变亮) -> sRGB采样矫正变暗(正常颜色) shader计算 -> 放入颜色缓存(变亮) -> 屏幕gamma矫正变暗输出(正常颜色)
gamma空间总结:
真实世界正常颜色 -> 图片(变亮) -> shader计算 -> 放入颜色缓存 -> 屏幕gamma矫正变暗输出(正常颜色)
为什么要在线性空间下计算颜色值?
当计算出了亮度0.5时:
1. 在线性空间下存入颜色缓存为0.73,屏幕矫正显示为0.5,亮度正常。
2. 在gamma空间下存入颜色缓存为0.5,屏幕矫正显示为0.22,亮度变暗。
因此需要在线性空间下进行颜色计算。