d3d学习之四 hdr

下面这个图片应该是比较好的反应了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 from illuminated scene 
	// objects.
	vSample.rgb /= (BRIGHT_PASS_OFFSET+vSample);


5 对filter后的scaled copy进行bloom 和star处理

6.将bloom star处理后的纹理作用于(tone mapping的处理)正常处理的场景,

补充:

    tone mapping : 

lumscaled(x,y) = a * lum(x,y) / lumavg(x,y)

color(x,y) = lumscaled(x,y) / ( 1+lumscaled(x,y));



Equation for luminance scaled to target average luminance

复制 搜索

你可能感兴趣的:(D3D)