码迷,mamicode.com
首页 > 其他好文 > 详细

关于Gama空间的bug

时间:2021-06-02 10:47:32      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:cto   line   body   出图   color   lin   factor   https   image   

关于Gama空间的bug

bug

光照强度系数 bug fix前 bug fix后
0.01 技术图片 技术图片
0.02 技术图片 技术图片
0.03 技术图片 技术图片
0.04 技术图片 技术图片
0.05 技术图片 技术图片
0.1 技术图片 技术图片

看到上面的图,bug fix前发现修改参数不是线性的,所以要想到去查下是在gama空间还是线性空间做的加强。

bug修复前后的代码

Fix前

color = srgb_to_linear(al.color * lightFactor)) if lightGamma else al.color * lightFactor) //lightFactor就是0.01这些参数

Fix后

color = (srgb_to_linear(al.color) if lightGamma else al.color) * lightFactor)//lightFactor就是0.01这些参数

线性空间 Gama空间的说明

有这三种空间的原因是 CRT显示器显示图像的时候做了伽马值为2.2的纠正(2.2 次幂) 之后的LCD显示器为了兼容性也做了同样的纠正(2.2 次幂),2.2是0.45的倒数 互相抵消得到了与原始图像一直的图像(color ^ 0.45 ^ 2.2 = color ^ 1)所以绝大多数的图片都是做了0.45次幂的校正过的 等显示的时候会2.2次幂回去。

回到这个bug,
Fix前:
(color * 0.01) ^ 2.2 = 0.01 ^ 2.2 * color ^ 2.2
Fix后是:
(color) ^ 2.2 * 0.01 = 0.01 * color ^ 2.2

所以0.01 ^ 2.2远远小于0.01 所以看到Fix前是很暗的,而且是非线性变亮的

对游戏开发的影响

pbr的计算都是在线性空间计算,所以如果美术出图是在0.45gama空间,要先通过2.2次幂转化到线性空间 在做计算,然后计算完再转回sRGB(0.45gama空间),然后显示器显示的时候 会做2.2次幂的计算去显示线性空间的颜色。
所以特别注意基本上计算都在线性空间,在制定工作流的时候要看下美术的图是在什么空间的sRGB还是线性空间

关于Gama空间的bug

标签:cto   line   body   出图   color   lin   factor   https   image   

原文地址:https://www.cnblogs.com/wlxklyh/p/14811407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!