Ignore:
Timestamp:
11/18/08 11:28:38 (16 years ago)
Author:
mattausch
Message:

filtering working more nicely now

Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders
Files:
2 edited

Legend:

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

    r3133 r3134  
    1616 
    1717 
    18 float Filter(float2 texCoord,  
    19                          uniform sampler2D ssaoTex, 
    20                          uniform float2 filterOffs[NUM_SSAO_FILTERSAMPLES], 
    21                          uniform float filterWeights[NUM_SSAO_FILTERSAMPLES]) 
    22 { 
    23         float average = .0f; 
    24         float w = .0f; 
    25  
    26         for (int i = 0; i < NUM_SSAO_FILTERSAMPLES; ++ i) 
    27         { 
    28                 average += filterWeights[i] * tex2Dlod(ssaoTex, float4(texCoord + filterOffs[i], 0, 0)).x; 
    29                 w += filterWeights[i]; 
    30         } 
    31  
    32         average *= 1.0f / (float)w; 
    33  
    34         return average; 
     18 
     19 
     20inline float3 Interpol(float2 w, float3 bl, float3 br, float3 tl, float3 tr) 
     21{ 
     22        float3 x1 = lerp(bl, tl, w.y); 
     23        float3 x2 = lerp(br, tr, w.y);  
     24        float3 v = lerp(x1, x2, w.x);  
     25 
     26        return v; 
     27} 
     28 
     29 
     30// reconstruct world space position 
     31inline float3 ReconstructSamplePos(uniform sampler2D tex, 
     32                                                                   float2 texcoord,  
     33                                                                   float3 bl, float3 br, float3 tl, float3 tr) 
     34{ 
     35        const float eyeSpaceDepth = tex2Dlod(tex, float4(texcoord, 0, 0)).w; 
     36         
     37        float3 viewVec = Interpol(texcoord, bl, br, tl, tr); 
     38        float3 samplePos = -viewVec * eyeSpaceDepth; 
     39 
     40        return samplePos; 
    3541} 
    3642 
     
    5662} 
    5763 
     64#define USE_POSITION 
    5865 
    5966float DiscontinuityFilter(float2 texCoord, 
     
    6471                                                  uniform float filterWeights[NUM_SSAO_FILTERSAMPLES], 
    6572                                                  float scale, 
    66                                                   int index) 
     73                                                  float3 bl, 
     74                                                  float3 br, 
     75                                                  float3 tl, 
     76                                                  float3 tr) 
    6777{ 
    6878        float average = .0f; 
    6979        float total_w = .0f; 
    7080 
     81#ifdef USE_POSITION 
     82        const float3 centerPos = ReconstructSamplePos(ssaoTex, texCoord, bl, br, tl, tr); 
     83#else 
    7184        const float eyeSpaceDepth = ao.w; 
     85#endif 
     86 
    7287        const float3 norm = normalize(tex2Dlod(normalsTex, float4(texCoord, 0, 0)).xyz); 
    7388 
    7489        float4 aoSample; 
    7590        float3 sampleNorm; 
     91        float3 samplePos; 
    7692        float w; 
    77         float4 offs; 
     93        float4 sampleTexCoord; 
    7894        float depthFactor; 
    7995        float normalFactor; 
    80         float converganceFactor; 
     96        float convergenceFactor; 
    8197 
    8298        for (int i = 0; i < NUM_SSAO_FILTERSAMPLES; ++ i) 
    8399        { 
    84                 offs = float4(texCoord + filterOffs[i] * scale, 0, 0); 
    85                 aoSample = tex2Dlod(ssaoTex, offs); 
    86                  
    87                 sampleNorm = normalize(tex2Dlod(normalsTex, offs).xyz); 
    88  
    89                 //depthFactor = clamp(1.0f - abs(1.0f - eyeSpaceDepth / aoSample.w), 1e-3f, 1.0f); 
     100                sampleTexCoord = float4(texCoord + filterOffs[i] * scale, 0, 0); 
     101                aoSample = tex2Dlod(ssaoTex, sampleTexCoord); 
     102                sampleNorm = normalize(tex2Dlod(normalsTex, sampleTexCoord).xyz); 
     103 
     104#ifdef USE_POSITION 
     105                samplePos = ReconstructSamplePos(ssaoTex, sampleTexCoord.xy, bl, br, tl, tr); 
     106                depthFactor = max(step(1.0f - 5e-1f, 1.0f - length(samplePos - centerPos)), 1e-3f); 
     107#else // use depth 
    90108                depthFactor = max(step(5e-1f, 1.0f - abs(1.0f - eyeSpaceDepth / aoSample.w)), 1e-3f); 
     109#endif 
    91110                normalFactor = max(step(0.6f, dot(sampleNorm, norm)), 1e-3f); 
    92                 converganceFactor = max(step(8.5f, aoSample.y), 1e-3f); 
    93  
    94                 //w = filterWeights[i] * normalFactor * depthFactor * converganceFactor; 
    95                 w = filterWeights[i];// * normalFactor * converganceFactor; 
    96                 //w = filterWeights[i] * depthFactor; 
    97  
    98                 average += aoSample[index] * w; 
     111                convergenceFactor = min(60.0f, aoSample.y) * 0.01f;//max(step(18.5f, aoSample.y), 1e-3f); 
     112 
     113                w = filterWeights[i] * normalFactor * depthFactor * convergenceFactor; 
     114                //w = filterWeights[i] * normalFactor * converganceFactor; 
     115                //w = filterWeights[i] * normalFactor * depthFactor; 
     116 
     117                average += aoSample.x * w; 
    99118                total_w += w; 
    100119        } 
     
    112131                          uniform sampler2D offsetTex, 
    113132                          uniform float2 filterOffs[NUM_SSAO_FILTERSAMPLES], 
    114                           uniform float filterWeights[NUM_SSAO_FILTERSAMPLES] 
    115                           ) 
     133                          uniform float filterWeights[NUM_SSAO_FILTERSAMPLES], 
     134                          uniform float3 bl, 
     135                          uniform float3 br, 
     136                          uniform  float3 tl, 
     137                          uniform float3 tr) 
    116138{ 
    117139        pixel OUT; 
     
    132154 
    133155                float border = step(0.001f,  b2 
    134  
    135156                //float3 id = tex2Dlod(attribsTex, float4(IN.texCoord, 0, 0)).xyz; 
    136157*/ 
     
    155176                //ao.x = DiscontinuityFilter(IN.texCoord, ao, ssaoTex, normalsTex, filterOffs, filterWeights, adaptFactor * scaleFactor  / (adaptFactor + ao.y), 0); 
    156177 
    157                 if (ao.y < 10.5f) ao.x = DiscontinuityFilter(IN.texCoord, ao, ssaoTex, normalsTex, filterOffs, filterWeights, 1, 0); 
     178                if (ao.y < 60.5f) ao.x = DiscontinuityFilter(IN.texCoord, ao, ssaoTex, normalsTex, filterOffs, filterWeights, scaleFactor, bl, br, tl, tr); 
    158179                //ao.x = DiscontinuityFilter(IN.texCoord, ao, ssaoTex, normalsTex, filterOffs, filterWeights, 1, 0); 
    159180        } 
     
    163184        OUT.illum_col.xyz = col.xyz * ao.x; 
    164185 
    165 //      if (ao.y < 1.5f) OUT.illum_col.xyz = float3(10000, 10000, 0); 
    166 //      else if (ao.y < 3.5f) OUT.illum_col.xyz = float3(10000, 0, 10000); 
    167 //      else 
     186        //      if (ao.y < 1.5f) OUT.illum_col.xyz = float3(10000, 10000, 0); 
     187        //      else if (ao.y < 3.5f) OUT.illum_col.xyz = float3(10000, 0, 10000); 
     188        //      else 
    168189        //      if (ao.y < 10.5f) OUT.illum_col.xyz = float3(0, 10000, 0); 
    169190        //OUT.illum_col = float4(dummy3, dummy3, dummy3, col.w); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg

    r3104 r3134  
    291291 
    292292#endif 
     293 
     294 
     295float4 Output(fragment IN, uniform sampler2D colors): COLOR 
     296{     
     297        // let bilinear filtering do its work 
     298        return tex2Dlod(colors, float4(IN.texCoord, 0, 0)); 
     299} 
Note: See TracChangeset for help on using the changeset viewer.