Ignore:
Timestamp:
11/16/08 23:57:33 (16 years ago)
Author:
mattausch
Message:

tried different techniques for smoothing the flickering for moving objects
fixed kernel + rotation + jittering not working yet
smoothssao function working better now (also test different filter sizes!)

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

    r3128 r3129  
    167167 
    168168                //depthFactor = clamp(1.0f - abs(1.0f - eyeSpaceDepth / aoSample.w), 1e-3f, 1.0f); 
    169                 depthFactor = max(step(5e-2f, 1.0f - abs(1.0f - eyeSpaceDepth / aoSample.w)), 1e-3f); 
    170                 normalFactor = max(step(0.5f, dot(sampleNorm, norm)), 1e-3f); 
    171  
    172                 w = filterWeights[i] * normalFactor * depthFactor; 
    173                 //w = filterWeights[i] * depthFactor; 
     169                depthFactor = max(step(5e-1f, 1.0f - abs(1.0f - eyeSpaceDepth / aoSample.w)), 1e-3f); 
     170                normalFactor = max(step(0.3f, dot(sampleNorm, norm)), 1e-3f); 
     171 
     172                //w = filterWeights[i] * normalFactor * depthFactor; 
     173                w = normalFactor * depthFactor; 
    174174 
    175175                average += aoSample.y * w; 
     
    177177        } 
    178178 
    179         average *= 1.0f / max(total_w, 1e-6f); 
     179        average *= 1.0f / max(total_w, 1e-3f); 
    180180 
    181181        return average; 
     
    193193        float4 ao = tex2Dlod(ssaoTex, float4(IN.texCoord, 0, 0)); 
    194194 
    195         //const static float scaleFactor = 10.0f; 
     195        //const static float scaleFactor = 20.0f; 
    196196        const static float scaleFactor = 10.0f; 
    197  
    198197        ao.y = DiscontinuityFilter2(IN.texCoord, ao, ssaoTex, normalsTex, filterOffs, filterWeights, scaleFactor * ao.z, 1); 
    199198         
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg

    r3128 r3129  
    209209#endif 
    210210 
    211         const float oldWeight = clamp(oldPixel.y, .0f, temporalCoherence); 
    212         //const float oldWeight = oldPixel.y; 
     211        //const float oldWeight = clamp(oldPixel.y, .0f, temporalCoherence); 
     212        const float oldWeight = oldPixel.y; 
    213213 
    214214        float newWeight; 
     
    220220                // if visibility changed in the surrounding area we have to recompute 
    221221                //&& (oldNumSamples > 0.8f * newNumSamples) 
    222                 && (notValid < 1.0f) 
     222                //&& (notValid < 1.0f) 
    223223                ) 
    224224        { 
    225225                // increase the weight for convergence 
    226226                newWeight = oldWeight + 1.0f; 
    227                 //if (notValid > 1.0f) newWeight = 10.0f; 
     227                if (notValid > 1.0f) newWeight = 10.0f; 
    228228                //if (notValid > 1.0f) newWeight = max(15.0f - notValid * 2.0f, 1.0f); 
    229229        } 
     
    236236        //      newWeight = min(temporalCoherence + 1, max(oldPixel.y - 70, 50)); 
    237237        //if (newWeight >= 2000) newWeight = 1000; 
    238         //newWeight -= step(2000.0f, newWeight) * 1000.0f; 
     238        newWeight -= step(512.0f, newWeight) * 256.0f; 
    239239 
    240240        return float3(oldPixel.x, newWeight, eyeSpaceDepth); 
     
    257257                        float3 viewDir 
    258258                        , float2 noiseOffs 
     259                        , sampler2D noiseTex1D 
    259260                        ) 
    260261{ 
     
    266267        float numSamples = .0f; 
    267268 
     269 
     270        //float2 jitter = tex2Dlod(noiseTex1D, float4(IN.texCoord.x * 4.0f + noiseOffs.x, 0.5f, 0, 0)).xy; 
     271        //float2 jitter = tex2Dlod(noiseTex1D, float4(noiseOffs.x, 0.5f, 0, 0)).xy; 
    268272 
    269273        for (int i = 0; i < NUM_SAMPLES; ++ i)  
     
    282286#endif 
    283287                // weight with projected coordinate to reach similar kernel size for near and far 
     288                //const float2 texcoord = IN.texCoord.xy + offsetTransformed * scaleFactor + jitter; 
    284289                const float2 texcoord = IN.texCoord.xy + offsetTransformed * scaleFactor; 
    285290 
    286291                //if ((texcoord.x <= 1.0f) && (texcoord.x >= 0.0f) && (texcoord.y <= 1.0f) && (texcoord.y >= 0.0f)) ++ numSamples; 
    287  
    288292                const float3 samplePos = ReconstructSamplePos(colors, texcoord, bl, br, tl, tr); 
    289293 
     
    340344                   uniform float3 oldtl, 
    341345                   uniform float3 oldtr, 
    342                    uniform sampler2D attribsTex 
     346                   uniform sampler2D attribsTex, 
     347                   uniform sampler2D noiseTex1D 
    343348                   ) 
    344349{ 
     
    378383                                                                                        scaleFactor,  
    379384                                                                                        oldbl, oldbr, oldtl, oldtr, 
    380                                                                                         diffVec); 
     385                                                                                        diffVec 
     386                                                                                        ); 
    381387 
    382388        const float oldSsao = temporalVals.x; 
    383         const float newWeight = clamp(temporalVals.y, .0f, temporalCoherence); 
    384  
    385         //float2 noiseOffs = float2(temporalVals.y / 139.0f, temporalVals.y / 141.0f); 
    386         float2 noiseOffs = float2(.0f); 
     389        const float newWeight = clamp(temporalVals.y, 1.0f, temporalCoherence); 
     390        float2 noiseOffs = float2((temporalVals.y - 1)/ 139.0f, .0f); 
     391        //float2 noiseOffs = float2(.0f); 
    387392 
    388393        float2 ao; 
     
    392397        { 
    393398                ao = ssao(IN, colors, noiseTex, samples, normal,  
    394                           eyeSpacePos.xyz, scaleFactor, bl, br, tl, tr, normalize(viewDir), noiseOffs); 
     399                          eyeSpacePos.xyz, scaleFactor, bl, br, tl, tr, normalize(viewDir), noiseOffs, noiseTex1D); 
    395400        } 
    396401        else 
Note: See TracChangeset for help on using the changeset viewer.