首页 > 其他 > 详细

关于Gama空间的bug

时间:2021-05-26 09:51:48      阅读:15      评论:0      收藏:0      [点我收藏+]

关于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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!