Ignore:
Timestamp:
11/12/08 17:56:47 (16 years ago)
Author:
mattausch
Message:

working on ssao for dynamic objects, found error with tight bounds

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

    r3122 r3123  
    5757 
    5858 
    59 float BilateralFilter(float2 texCoord, 
    60                                           float4 ao, 
    61                                           uniform sampler2D ssaoTex, 
    62                                           uniform sampler2D normalsTex, 
    63                                           uniform float2 filterOffs[NUM_SSAO_FILTERSAMPLES], 
    64                                           uniform float filterWeights[NUM_SSAO_FILTERSAMPLES], 
    65                                           float scale) 
     59float DiscontinuityFilter(float2 texCoord, 
     60                                                  float4 ao, 
     61                                                  uniform sampler2D ssaoTex, 
     62                                                  uniform sampler2D normalsTex, 
     63                                                  uniform float2 filterOffs[NUM_SSAO_FILTERSAMPLES], 
     64                                                  uniform float filterWeights[NUM_SSAO_FILTERSAMPLES], 
     65                                                  float scale) 
    6666{ 
    6767        float average = .0f; 
     
    7676        float4 offs; 
    7777        float depthFactor; 
     78        float normalFactor; 
    7879 
    7980        for (int i = 0; i < NUM_SSAO_FILTERSAMPLES; ++ i) 
     
    8384                 
    8485                sampleNorm = normalize(tex2Dlod(normalsTex, offs).xyz); 
    85                 depthFactor = clamp(1.0f - abs(1.0f - eyeSpaceDepth / aoSample.w), 1e-3f, 1.0f); 
    86                 //sampleNorm = tex2Dlod(normalsTex, offs).xyz; 
    8786 
    88                 w = filterWeights[i] * max(dot(sampleNorm, norm), 1e-3f) * depthFactor; 
     87                //depthFactor = clamp(1.0f - abs(1.0f - eyeSpaceDepth / aoSample.w), 1e-3f, 1.0f); 
     88                 
     89                depthFactor = max(step(5e-2f, 1.0f - abs(1.0f - eyeSpaceDepth / aoSample.w)), 1e-3f); 
     90                normalFactor = max(step(0.5f, dot(sampleNorm, norm)), 1e-3f); 
     91 
     92                w = filterWeights[i] * normalFactor * depthFactor; 
     93                //w = filterWeights[i] * depthFactor; 
    8994 
    9095                average += aoSample.x * w; 
     
    111116        float4 ao = tex2Dlod(ssaoTex, float4(IN.texCoord, 0, 0)); 
    112117 
    113         if ((ao.y < 60.0f) && (col.w < 1e10f)) 
     118        //if ((ao.y < 60.0f) && (col.w < 1e10f)) 
     119        if (col.w < 1e10f) 
    114120        { 
    115                 const static float scaleFactor = 20.0f; 
     121                //const static float scaleFactor = 10.0f; 
     122                const static float scaleFactor = 50.0f; 
    116123 
    117124                //ao.x = Filter(IN.texCoord, ssaoTex, filterOffs, filterWeights); 
    118125                //ao.x = Filter(IN.texCoord, ssaoTex, filterOffs, filterWeights, 1.0f / (1.0f + ao.y)); 
    119                 ao.x = BilateralFilter(IN.texCoord, ao, ssaoTex, normalsTex, filterOffs, filterWeights, scaleFactor / (scaleFactor + ao.y)); 
     126                ao.x = DiscontinuityFilter(IN.texCoord, ao, ssaoTex, normalsTex, filterOffs, filterWeights, scaleFactor / (scaleFactor + ao.y)); 
    120127                //ao.x = BilateralFilter(IN.texCoord, ao, ssaoTex, normalsTex, filterOffs, filterWeights, 1.0f); 
    121128        } 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg

    r3122 r3123  
    66 
    77#define USE_EYESPACE_DEPTH 1 
    8 //#extension GL_EXT_gpu_shader4 : enable 
    9  
    108 
    119 
     
    110108        const float projectedEyeSpaceDepth = invlen * length(translatedPos); 
    111109 
    112         float depthDif = (abs(eyeSpaceDepth - sampleEyeSpaceDepth) > 3.0f) ?  
     110        float depthDif = (abs(eyeSpaceDepth - sampleEyeSpaceDepth) > 1.0f) ?  
    113111                0 : abs(1.0f - oldEyeSpaceDepth / projectedEyeSpaceDepth); 
    114112 
     
    183181 
    184182        float notValid = 0.5f; 
    185         //float overallDepth = 0; 
     183        float overallDepth = 0; 
     184 
    186185        const float squaredLen = diffVec.x * diffVec.x + diffVec.y * diffVec.y + diffVec.z * diffVec.z; 
    187186 
     
    209208#endif 
    210209 
    211         //const float clampedOldWeight = clamp(oldPixel.y, .0f, temporalCoherence); 
    212         const float oldWeight = oldPixel.y; 
     210        const float oldWeight = clamp(oldPixel.y, .0f, temporalCoherence); 
     211        //const float oldWeight = oldPixel.y; 
    213212 
    214213        float newWeight; 
     
    225224                // increase the weight for convergence 
    226225                newWeight = oldWeight + 1.0f; 
    227                 //if (notValid > 1.0f) newWeight = 2.0f; 
     226                //if (notValid > 1.0f) newWeight = 10.0f; 
     227                //if (notValid > 1.0f) newWeight = max(15.0f - notValid * 2.0f, 1.0f); 
    228228        } 
    229229        else 
     
    234234        //if (oldPixel.y >= 2000) 
    235235        //      newWeight = min(temporalCoherence + 1, max(oldPixel.y - 70, 50)); 
    236         if (newWeight >= 2000) newWeight = 1000; 
     236        //if (newWeight >= 2000) newWeight = 1000; 
    237237 
    238238        return float3(oldPixel.x, newWeight, eyeSpaceDepth); 
     
    397397        } 
    398398 
    399         const float clampedWeight = clamp(newWeight, 1, temporalCoherence); 
    400  
    401         OUT.illum_col.x = (ao.x + oldSsao * (clampedWeight - 1.0f)) / clampedWeight; 
     399        OUT.illum_col.x = (ao.x + oldSsao * (newWeight - 1.0f)) / newWeight; 
    402400        OUT.illum_col.y = newWeight; 
    403401        OUT.illum_col.z = invw; 
Note: See TracChangeset for help on using the changeset viewer.