• Chapter8-Making Your Day Brighter之Exposure Control


          该例子与第七章的第一个示例非常相似,除了RenderTarget格式从D3DMFT_A8R8G8B8变成了D3DFMT_A16B16G16R16F,然后在绘制背景及物体的两个Pass中添加了曝光控制,其他都一样。

          代码需要注意的地方,注意观察会发现绘制背景时的代码:   

    1 sampler Texture0;
    2 float Exposure_level;
    3 
    4 float4 ps_main(float3 Tex  : TEXCOORD0) : COLOR0
    5 {   
    6    float4 color = texCUBE(Texture0,Tex);
    7    color = color * ((1.0+(color.a*64.0))* Exposure_level);
    8    return color;
    9 }

          及绘制茶壶时候的代码:

    sampler Texture0;
    float Exposure_level;
    
    float4 ps_main(float2 Tex  : TEXCOORD0) : COLOR0
    {   
       float4 color = float4(tex2D(Texture0,Tex).xyz,0);
       color = color * ((1.0+(color.a*64.0))* Exposure_level);
       return color;
    }

         区别在于绘制茶壶时将茶壶颜色的W分量设置为了0,如果设置为1,曝光控制过程中就会出现茶壶整个区域出现都是白色,除非Exposure_level这个值非常小,茶壶才会显示正常的颜色,但是背景确实黑压压一片什么都看不到。

         背景之所以不把α通道设置为0,是因为它的α是从纹理中读取的,并且本身就是比较小的值(白色为α较大,黑色为α较小),这个我们可以从纹理的α通道中看出来,除了RBG通道中有太阳的区域α值较大,其他区域几乎都是黑色(α值较小);然后我们再看茶壶纹理,α通道显示为白色,即α值全部为1,如下图:

        

         这样我们就必须手动调节茶壶纹理的α通道颜色,而不能简单的将其读取到color中,简单的读取会导致它曝光调节的亮度几乎是背景颜色的2倍,这就是为什么在绘制茶壶的pass中,语句的最后一个变量要设置为0 ”float4 color = float4(tex2D(Texture0,Tex).xyz,0);“

         绘制茶壶的Pass对比图如下(color.a设置为0与不设置为0):

        

        

  • 相关阅读:
    python的Collections 模块
    python模块
    python类
    python异常
    python文件处理
    python函数
    python字符串
    python数据结构
    python循环
    下载Google Play外国区APP技巧
  • 原文地址:https://www.cnblogs.com/infintyward/p/3244569.html
Copyright © 2020-2023  润新知