稻草人的麦田

图形技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[导入]伪 HDR/Blow

Posted on 2007-10-17 15:39  稻草人的麦田  阅读(248)  评论(0)    收藏  举报
我用的fx composer 来做这个效果,感觉挺假的,先制作一个贴图,然后再制作一个该贴图1/4大小的的贴图,贴图内容肯定要一样,从小贴图上获取亮度信息,然后加入到大的贴图上,就是采用相乘的方法,这个例子的最主要难度在于想出一个二次曲线来重新调整图像的亮度,这里用的曲线的方程是:

x [ (2-4k) x + 4k-1 ]     K的取值范围为0.5 – 2.0

 

shader的最上面写上多的一个贴图

texture diffuse2
<
>;

然后在右边的属性栏里为这个材质选择1/4大小的那个贴图。

再加入一个新的采样器:

sampler TextureSampler2 = sampler_state
{
    texture = <diffuse2>;
    AddressU  = CLAMP;       
    AddressV  = CLAMP;
    AddressW  = CLAMP;
    MIPFILTER = LINEAR;
    MINFILTER = LINEAR;
    MAGFILTER = LINEAR;
};

其实都是照抄,变量后加入一个数字。

代码如下:

float4  xposure(float4 _color , float gray , float ex)
{

     float b = ( 4 * ex -  1 );

     float a = 1 - b;

     float f = gray * ( a * gray + b );

     return   f * _color;

}

//-----------------------------------
float4 PS_Textured( vertexOutput IN): COLOR
{
  //亮度信息从downSample后的图像中获得
float k=2.0;
float4 _dsColor = tex2D(TextureSampler2 , IN.texCoordDiffuse);

    float _lum = 0.3 * _dsColor.x + 0.59 * _dsColor.y + 0.11* _dsColor.z;

float4 _fColor = tex2D(TextureSampler , IN.texCoordDiffuse);

//对最终颜色进行修正

    return xposure(_fColor , _lum , k);
}

k取的是2.0,是比较高的。变化前后的图如下:

我没觉得效果有什么好的,虽然我也不知道调整亮度的那个二次方程是怎么计算出来的。

 

 


文章来源:http://songxiaoyu8.blog.163.com/blog/static/20818128200791733919230