Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics 抗锯齿和伽马补偿_Graphics_Antialiasing_Gamma - Fatal编程技术网

Graphics 抗锯齿和伽马补偿

Graphics 抗锯齿和伽马补偿,graphics,antialiasing,gamma,Graphics,Antialiasing,Gamma,计算机屏幕上像素的亮度通常与像素的数字RGB三元组值不是线性相关的。早期CRT的非线性响应需要补偿非线性编码,我们今天继续使用这种编码 通常我们在电脑屏幕上生成图像,并在屏幕上消费,所以一切都很好。但是,当我们使用抗锯齿时,非线性(称为gamma)意味着我们不能仅仅将alpha值0.5添加到一个覆盖率为50%的像素上,然后期望它看起来是正确的。0.5的alpha值仅为0.5^2.2=亮度为1.0的alpha值(典型伽马值为2.2)的22% 是否有任何广泛确立的抗锯齿伽马补偿最佳实践?你有一种日常

计算机屏幕上像素的亮度通常与像素的数字RGB三元组值不是线性相关的。早期CRT的非线性响应需要补偿非线性编码,我们今天继续使用这种编码

通常我们在电脑屏幕上生成图像,并在屏幕上消费,所以一切都很好。但是,当我们使用抗锯齿时,非线性(称为gamma)意味着我们不能仅仅将alpha值0.5添加到一个覆盖率为50%的像素上,然后期望它看起来是正确的。0.5的alpha值仅为0.5^2.2=亮度为1.0的alpha值(典型伽马值为2.2)的22%

是否有任何广泛确立的抗锯齿伽马补偿最佳实践?你有一种日常使用的宠物方法吗?有人看过关于结果和人类对不同技术图形输出质量的感知的研究吗


我曾经考虑过做标准的X^(1/2.2)补偿,但这在计算上是相当紧张的。不过,也许我可以使用256个条目的查找表来加快速度。

这样的工作经常使用查找表。它们又小又快

但是,无论是查找还是某种公式,如果最终结果是一个图像文件,并且格式允许,最好在文件中保存一个颜色配置文件或至少保存gamma值以供以后查看,而不是自己尝试调整RGB值

原因:对于典型的字节值R、G、B通道,每个通道中每个像素有256个唯一值。这几乎足以让人眼感觉良好(我希望“字节”被定义为9位!)除了简单的值反转之外,任何类型的数学都会将其中一些值映射为多对一。对于R、G或B的每个像素,输出不会有256个值可供选择,但要少得多。这可能会导致轮廓、锯齿、颜色噪音和其他不良现象


撇开精度问题不谈,如果需要任何像样的质量,所有的堆肥、混合、混合、颜色校正、假镜头光斑添加、色度键控等都应该在线性RGB空间中进行,其中R、G和B的值与物理光强度成比例。图像数学模拟物理灯光数学。但是,在终极速度至关重要的地方,也有欺骗的方法。

吉姆·布林斯的《脏像素》一书概述了一个快速而好的合成计算,它使用16位数学加上查找表精确地返回和前进到线性颜色空间。这家伙从事NASAs可视化,他知道自己的东西。

我试图回答实际问题,尽管现在主要是为了参考:

首先,ITU()中的建议可以应用于编程(但您必须了解自己的知识)

在Jim Blinn的第9章“记谱,记谱,记谱”中,有一个非常详细的数学和感知错误分析,尽管他只涉及合成(许多其他图形任务也受到影响)


他建立的符号也可以用来推导一种处理伽马的方法,或者检查一种给定的方法是否正确。非常方便,我的pet方法(主要是我独立发现的,但后来发现了他的书)。

生成图像时,通常在线性颜色空间(如线性RGB或CIE颜色空间)中工作,然后在最后转换为非线性RGB空间。这种转换可以通过硬件、查表甚至复杂的数学来加速。(请参阅其他答案的参考资料。)

在执行alpha混合时(例如,将此图标渲染到该背景上),这种精度通常会被忽略,以利于速度。以alpha为参数,通过lerping直接在非线性RGB空间中计算结果。这不是“正确的”,但在大多数情况下已经足够好了。尤其是桌面上的图标

如果要尝试进行更正确的混合,请将其视为原始渲染。在线性空间中工作(可能需要初始转换),然后在最后转换为非线性显示空间


现在很多图形使用sRGB作为非线性显示颜色空间。如果我没记错的话,sRGB与2.2的gamma非常相似,但对低端的值进行了调整。

9位字节?你那么喜欢八进制吗?:-)