Ignore:
Timestamp:
10/07/08 03:02:30 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/tonemap.cg

    r3008 r3010  
    2020 
    2121 
    22 float4 DownSample(frag IN, 
     22/*float4 DownSample(frag IN, 
    2323                                  uniform sampler2D colors, 
    24                                   uniform float2 downSampleOffs[4]): COLOR 
     24                                  uniform float2 downSampleOffs[9]): COLOR 
    2525{     
    2626    float4 average = .0f; 
    2727 
    28     for(int i = 0; i < 4; ++ i) 
     28        const float4 avgColor = tex2Dlod(colors, float4(IN.texCoord, 0, 0)); 
     29 
     30        float j = 0; 
     31        float4 color; 
     32 
     33    for (int i = 0; i < 9; ++ i) 
    2934    { 
    30         average += tex2Dlod(colors, float4(IN.texCoord + downSampleOffs[i],0,0)); 
     35                color = tex2Dlod(colors, float4(IN.texCoord + downSampleOffs[i], 0, 0)); 
     36                if (abs(color.w - avgColor.w) < 1e-3f) 
     37                { 
     38                        average += color; 
     39                        ++ j; 
     40                } 
    3141    } 
    3242         
    33     average *= 1.0f / 4.0f; 
     43    //average *= 1.0f / 9.0f; 
     44    average *= 1.0f / j; 
     45 
     46    return average; 
     47}*/ 
     48   
     49float4 DownSample(frag IN, 
     50                                  uniform sampler2D colors, 
     51                                  uniform float2 downSampleOffs[NUM_DOWNSAMPLES]): COLOR 
     52{     
     53    float4 average = .0f; 
     54 
     55    for (int i = 0; i < NUM_DOWNSAMPLES; ++ i) 
     56    { 
     57                average += tex2Dlod(colors, float4(IN.texCoord + downSampleOffs[i], 0, 0)); 
     58    } 
     59        
     60        average *= 1.0f / (float)NUM_DOWNSAMPLES; 
    3461 
    3562    return average; 
    3663} 
    37      
     64 
     65 
     66/** Does the first downsampling step and on the same time calculates the  
     67        intensity. 
     68*/ 
    3869 
    3970float4 GreyScaleDownSample(frag IN, 
    40                                                    uniform sampler2D colors 
     71                                                   uniform sampler2D colors, 
     72                                                   uniform float2 downSampleOffs[4] 
    4173                                                   ): COLOR 
    4274{ 
     
    5082        //float3 w = float3(0.2125f, 0.7154f, 0.0721f); 
    5183 
    52         float4 cols[4]; 
    53  
    54         cols[0] = tex2D(colors, IN.lt); 
    55         cols[1] = tex2D(colors, IN.lb); 
    56         cols[2] = tex2D(colors, IN.rt); 
    57         cols[3] = tex2D(colors, IN.rb); 
     84        float4 color; 
    5885 
    5986        for (int i = 0; i < 4; ++ i) 
    6087        { 
     88                color = tex2D(colors, downSampleOffs[i]); 
     89 
    6190                const float intensity = dot(cols[i].rgb, w); 
    6291 
     
    6594        } 
    6695 
    67         average = exp(average * 0.25f); 
     96        average *= 0.25f; 
    6897 
    69         float4 c = cols[0] + cols[1] + cols[2] + cols[3]; 
    70  
    71         return c * 0.25f; 
    7298        // Output the luminance to the render target 
    73         //return float4(average, maximum, 0.0f, 1.0f); 
     99        return float4(average, maximum, 0.0f, 1.0f); 
    74100} 
    75101     
     102 
     103/** Used for downsampling the tone map parameters (average loglum, maximum) 
     104        to the next lower level. This has to be applied until there is only 
     105        a 1x1 texture which holds the required numbers. 
     106*/ 
     107float4 DownSampleForToneMapping(frag IN, 
     108                                                                uniform sampler2D colors, 
     109                                                                uniform float2 downSampleOffs[4]): COLOR 
     110{     
     111        float average = .0f; 
     112        float maximum = .0f; 
     113         
     114        float4 color; 
     115 
     116        for (int i = 0; i < 4; ++ i) 
     117        { 
     118                color = tex2D(colors, downSampleOffs[i]); 
     119 
     120                maximum = max(maximum, color.y); 
     121                average += color.x; 
     122        } 
     123 
     124        average *= 1.0f / (float)NUM_DOWNSAMPLES; 
     125 
     126        return float4(average, maximum, 0.0f, 1.0f); 
     127} 
     128 
     129 
    76130 
    77131pixel ToneMap(frag IN, 
Note: See TracChangeset for help on using the changeset viewer.