gamma correction

Gamma 背景 在电视和图形监视器中,显像管发生的电子束和生成的图像与输入电压并不是线性关系,而是以指数曲线发生变化。造成的效果是图像整体变暗,其中低灰度区 的动态范围变小,高灰度动态范围变大。即降低了低灰度区图像对比度,提高了高灰度区的图像对比度。 通常,计算出物体的颜色之后需要显示在屏幕显示器上,显示器的输出亮度和输入电压有关:输出亮度=输入电压的Gamma次幂。 对于CRT(阴极摄像管显示器)来说,GAMMA=2.2。 Gamma 校正 伽马校正(Gamma Correction)是一种用来对视频和图像进行编码和解码亮度值的非线性操作。 思路是在最终图像上应用监视器gamma的倒数,它是监视器Gamma的 反转曲线,虽然监视器Gamma2.2会把图像整体变暗,但因为我们提前进行了指数级操作,最终显示结果为我们程序计算出的结果。 比如:FragColor = vec4(0.5, 0.0, 0.0, 1.0); 对输出颜色进行Gamma校正曲线,相当于颜色降低了2.2次幂的亮度。 FragColor^(2.2) = vec4(0.5, 0.0, 0.0, 1.0)^(1/2.2) = vec4(0.5, 0.0, 0.0, 1.0)^0.45...

Compute Shader

计算着色器(Compute Shader)在OpenGL 4.3版本提出,可以帮组应用程序使用GPU来实现通用计算的工作。不仅如此,可以访问图形着色器的资源,同时能够对应用程序流和执行方式加以控制。不同于其他着色器,比如顶点着色器处理顶点,几何着色器处理图元,片元着色处理片元,计算着色器处理与计算相关的单元。而且计算着色器只有一级管线,没有固定输入输出,所有默认的输入通过一组内置变量,额外输入是通过固定的输入输出来控制对纹理和缓冲的访问。 工作组 图形处理器通过并行获得能力,计算着色器的并行性更加直接,任务以工作组(Work Group)为单位进行。工作组可以组合成更大的全局工作组(Global Group),工作组的每个单元为工作项(Work Item),其会被计算着色器调用一次。 图中右下角的黑色方框为工作组,每个工作组有4*3个工作项。所以总共有20*12个Work Item需要执行。 计算着色器中设定本地工作组大小 1 2 3 4 5 6 7 8#version 430 compute-shader layout (local_size_x = 32, local_size_y = 32) in; void...