- Timestamp:
- 02/23/09 18:33:26 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg
r3325 r3326 15 15 float4 color: COLOR0; 16 16 float3 normal: COLOR1; 17 float3 diffVal: COLOR2;17 //float3 diffVal: COLOR2; 18 18 }; 19 19 … … 37 37 float4 outColor; 38 38 39 // hack: prevent shadingthe sky39 // hack: prevent to shade the sky 40 40 if (color.w > DEPTH_THRESHOLD) 41 41 { … … 171 171 lightSpacePos /= lightSpacePos.w; 172 172 173 float shadowTerm = CalcShadowTerm(IN, shadowMap, sampleWidth, lightSpacePos.xy, lightSpacePos.z, samples, weights, noiseTex); 173 float shadowTerm = CalcShadowTerm(IN, shadowMap, sampleWidth, 174 lightSpacePos.xy, lightSpacePos.z, samples, weights, noiseTex); 174 175 diffuse *= shadowTerm; 175 176 } … … 209 210 */ 210 211 inline float2 PixelValid(sampler2D oldTex, 211 sampler2D oldTex2,212 212 float4 color, 213 213 float3 difVec, … … 220 220 float3 oldbr, 221 221 float3 oldtl, 222 float3 oldtr 222 float3 oldtr, 223 sampler2D myTex 223 224 ) 224 225 { … … 249 250 250 251 // fit from unit cube into 0 .. 1 251 const float2 oldTexCoords = backProjPos.xy * 0.5f + 0.5f;252 //const float2 oldTexCoords = texCoord;252 const float2 oldTexCoords = backProjPos.xy * .5f + .5f; 253 253 254 // retrieve the sample from the last frame 254 const float4 oldPixel = tex2Dlod( oldTex, float4(oldTexCoords, .0f, .0f));255 const float 4 oldPixel2 = tex2Dlod(oldTex2, float4(oldTexCoords, .0f, .0f));255 const float4 oldPixel = tex2Dlod(myTex, float4(oldTexCoords, .0f, .0f)); 256 const float oldDiff = tex2Dlod(oldTex, float4(oldTexCoords, .0f, .0f)).x; 256 257 257 258 // calculate eye space position of sample in old frame … … 266 267 const float squaredLen = SqrLen(difVec); 267 268 269 268 270 // test if this pixel was valid in the old frame 269 271 float isPixelValid; 270 272 271 273 // check if the pixel belonged to a dynamic object in the last frame 272 const bool newDynamic = (squaredLen > DYNAMIC_OBJECTS_THRESHOLD); 273 const bool oldDynamic = (oldPixel2.x > DYNAMIC_OBJECTS_THRESHOLD); 274 const bool newDynamic = (squaredLen > 100000);//DYNAMIC_OBJECTS_THRESHOLD); 275 const bool oldDynamic = (oldDiff > 1000000);//DYNAMIC_OBJECTS_THRESHOLD); 276 274 277 275 278 // actually 0 means pixel is valid 276 const float pixelIsValid = 0.0f;279 const float pixelIsValid = .0f; 277 280 // means that we only use slight temporal coherence over some frames 278 281 // so that there is no noticeable drag … … 281 284 const float pixelIsNotValid = 100.0f; 282 285 286 283 287 // check if the pixel was outside of the frame buffer 284 if ((oldTexCoords.x <= 0) || (oldTexCoords.x >= 1.0f) ||285 (oldTexCoords.y <= 0) || (oldTexCoords.y >= 1.0f)288 if ((oldTexCoords.x <= .0f) || (oldTexCoords.x >= 1.0f) || 289 (oldTexCoords.y <= .0f) || (oldTexCoords.y >= 1.0f) 286 290 ) 287 291 { 288 292 isPixelValid = pixelIsNotValid; 289 293 } 290 else if (// check if changed from dynamic to not dynamic object 291 ((oldDynamic && !newDynamic) || (!oldDynamic && newDynamic) || 292 ( 293 (oldEyeSpaceDepth < DEPTH_THRESHOLD) && (projectedEyeSpaceDepth < DEPTH_THRESHOLD) && 294 // check if we have a dynamic object 295 (oldDynamic || newDynamic) && 296 // and there is a depth discontinuity 297 (depthDif > MIN_DEPTH_DIFF)))) 294 else if ( // check if changed from dynamic to not dynamic object 295 ((oldDynamic && !newDynamic) || (!oldDynamic && newDynamic) || 296 ( 297 (oldEyeSpaceDepth < DEPTH_THRESHOLD) && (projectedEyeSpaceDepth < DEPTH_THRESHOLD) && 298 (oldDynamic || newDynamic) && // check if we have a dynamic object 299 (depthDif > MIN_DEPTH_DIFF)))) // and there is a depth discontinuity 298 300 { 299 isPixelValid = pixelCouldBeValid; 301 isPixelValid = pixelCouldBeValid; 300 302 } 301 303 else … … 303 305 isPixelValid = pixelIsValid; 304 306 } 305 307 308 //isPixelValid = 2e20f; 306 309 return float2(isPixelValid, abs(oldEyeSpaceDepth - projectedEyeSpaceDepth)); 307 310 } … … 312 315 */ 313 316 pixel PrepareSsao(fragment IN, 314 315 316 317 318 uniform sampler2D oldTex2,319 uniform float4x4 modelViewProj,320 uniform float4x4 oldModelViewProj,321 uniform float3 oldbl,322 uniform float3 oldbr,323 uniform float3 oldtl,324 uniform float3 oldtr,325 uniform float3 oldEyePos326 317 uniform sampler2D colorsTex, 318 uniform sampler2D normalsTex, 319 uniform sampler2D diffVals, 320 uniform sampler2D oldTex, 321 uniform float4x4 modelViewProj, 322 uniform float4x4 oldModelViewProj, 323 uniform float3 oldbl, 324 uniform float3 oldbr, 325 uniform float3 oldtl, 326 uniform float3 oldtr, 327 uniform float3 oldEyePos, 328 uniform sampler2D myTex 329 ) 327 330 { 328 331 pixel pix; 329 332 330 float4 color = tex2Dlod(colorsTex, float4(IN.texCoord, 0, 0));333 float4 color = tex2Dlod(colorsTex, float4(IN.texCoord, .0f, .0f)); 331 334 // store scaled view vector so wie don't have to normalize for e.g., ssao 332 335 color.w /= length(IN.view); … … 337 340 338 341 // do reprojection and filter out the pixels that are not save 339 float2 pValid = PixelValid(oldTex,340 oldTex2,341 color,342 difVec.xyz,343 IN.texCoord,344 IN.view,345 oldEyePos,346 modelViewProj,347 oldModelViewProj,348 oldbl, oldbr, oldtl, oldtr349 342 const float2 pValid = PixelValid(oldTex, 343 color, 344 difVec.xyz, 345 IN.texCoord, 346 IN.view, 347 oldEyePos, 348 modelViewProj, 349 oldModelViewProj, 350 oldbl, oldbr, oldtl, oldtr, 351 myTex 352 ); 350 353 351 354 pix.color = color;
Note: See TracChangeset
for help on using the changeset viewer.