下面这个图片应该是比较好的反应了hdr的处理过程的
流程大约如下:
1.首先获得high range的一个floating-point hdr texture
这个过程就是应用普通的光照模型,对于输出的为一个支持浮点数的纹理,不会对RGBA值截断,逼近现实世界的颜色
2.对1得到的texture缩小到1/4 (这个大约是为了节约处理时间,是否可以变得更小呢)的scaled copy,然后根据这个图像计算得到一个average lum texture
3.兼顾The human visual system,计算得到
float fNewAdaptation = fAdaptedLum + (fCurrentLum - fAdaptedLum) * ( 1 - pow( 0.98f, 30 * g_fElapsedTime ) );
4.对scaled copy和average lum合成过滤得到需要高亮的区域 bright pass filter,利用tone mapping
vSample.rgb *= g_fMiddleGray/(fAdaptedLum + 0.001f);
// Subtract out dark pixels
vSample.rgb -= BRIGHT_PASS_THRESHOLD;
// Clamp to 0
vSample = max(vSample, 0.0f);
// Map the resulting value into the 0 to 1 range. Higher values for
// BRIGHT_PASS_OFFSET will isolate lights