跳转至

后处理 (Post process effects)

泛光 (Bloom)

不同颜色对亮度的贡献不一样, 通常可以通过以下公式计算亮度:

float luminance = color.r * 0.2126f + color.g * 0.7152f + color.b * 0.0722f;

通过和设定的阈值进行比较, 提取出高光的区域:

float threshold = 0.7f;
if(luminance > threshold)
  frag_color = color;
else
  frag_color = vec3(0.0f);

仅保留高光区域的颜色, 非高光区域为黑色.

对高光区域进行高斯模糊, 再将结果加上高光区域.

色调映射 (Tone mapping)

渲染得到的高动态范围 (High Dynamic Range, HDR) 图像无法直接显示在 (Standard Dynamic Range, SDR) 设备上.
因此需要将将其映射到较低的动态范围上, 避免亮部过曝和暗部细节丢失的问题.

vec3 ACES(vec3 color)
{
  const float a = 2.51f;
  const float b = 0.03f;
  const float c = 2.43f;
  const float d = 0.59f;
  const float e = 0.14f;
  return saturate((color * (a * color + b)) / (color * (c * color + d) + e));
}

调色 (Color grading)

调整画面色调.

参见

评论