- Timestamp:
- 04/29/09 18:56:18 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg
r3365 r3366 221 221 if the reprojected pixel from last frame is still 222 222 valid in the current frame 223 224 inline float2 PixelValid(sampler2D oldTex,225 float4 color,226 float3 difVec,227 float2 texCoord,228 float3 viewDir,229 float3 oldEyePos,230 float4x4 modelViewProj,231 float4x4 oldModelViewProj,232 float3 oldbl,233 float3 oldbr,234 float3 oldtl,235 float3 oldtr,236 sampler2D myTex237 )223 */ 224 /*inline float2 ComputeInfo(sampler2D oldTex, 225 float4 color, 226 float3 difVec, 227 float2 texCoord, 228 float3 viewDir, 229 float3 oldEyePos, 230 float4x4 modelViewProj, 231 float4x4 oldModelViewProj, 232 float3 oldbl, 233 float3 oldbr, 234 float3 oldtl, 235 float3 oldtr, 236 sampler2D myTex 237 ) 238 238 { 239 239 // reconstruct position from the eye space depth … … 241 241 const float4 worldPos = float4(-viewDir * eyeSpaceDepth, 1.0f); 242 242 243 244 ////////////////245 //-- calculcate the current projected posiion (also used for next frame)246 247 float4 projPos = mul(modelViewProj, worldPos);248 const float invw = 1.0f / projPos.w;249 projPos *= invw;250 251 243 // compute position from old frame for dynamic objects + translational portion 252 244 const float3 translatedPos = -oldEyePos + worldPos.xyz + difVec; 253 // don't use difVec here: want to detect if the actual pixel has changed => ssao changed254 //const float3 translatedPos = -oldEyePos + worldPos.xyz;255 245 256 246 … … 275 265 const float3 oldViewDir = Interpol(oldTexCoords, oldbl, oldbr, oldtl, oldtr); 276 266 const float invLen = 1.0f / length(oldViewDir); 277 const float projectedEyeSpaceDepth = invLen * length(translatedPos); 278 279 const float depthDif = abs(1.0f - oldEyeSpaceDepth / projectedEyeSpaceDepth); 280 const float squaredLen = SqrLen(difVec); 281 282 283 // test if this pixel was valid in the old frame 284 float isPixelValid; 285 286 // check if the pixel belonged to a dynamic object in the last frame 287 const bool newDynamic = (squaredLen > DYNAMIC_OBJECTS_THRESHOLD); 288 const bool oldDynamic = (oldDiff > DYNAMIC_OBJECTS_THRESHOLD); 289 290 291 // actually 0 means pixel is valid 292 const float pixelIsValid = .0f; 293 // means that we only use slight temporal coherence over some frames 294 // so that there is no noticeable drag 295 //const float pixelCouldBeValid = 4.0f; 296 const float pixelCouldBeValid = 100.0f; 297 // this pixel information has to be discarded in order to not create artifacts 298 const float pixelIsNotValid = 100.0f; 299 267 300 268 301 269 // check if the pixel was outside of the frame buffer … … 324 292 //isPixelValid = depthDif; 325 293 326 return float2(isPixelValid, abs(oldEyeSpaceDepth - projectedEyeSpaceDepth)); 294 return float3(isPixelValid, abs(oldEyeSpaceDepth - projectedEyeSpaceDepth)); 295 } 296 */ 297 298 299 /** This shader computes the reprojection and checks 300 if the reprojected pixel from last frame is still 301 valid in the current frame 302 */ 303 inline float3 ComputeTranslatedPos( 304 float4 color, 305 float3 difVec, 306 float3 viewDir, 307 float3 oldEyePos 308 ) 309 { 310 // reconstruct position from the eye space depth 311 const float eyeSpaceDepth = color.w; 312 const float4 worldPos = float4(-viewDir * eyeSpaceDepth, 1.0f); 313 // compute position from old frame for dynamic objects + translational portion 314 const float3 translatedPos = -oldEyePos + worldPos.xyz + difVec; 315 316 return translatedPos; 327 317 } 328 318 … … 355 345 const float3 normal = normalize(tex2Dlod(normalsTex, float4(IN.texCoord, 0, 0)).xyz); 356 346 357 #ifdef PERFORMANCE_TEST358 347 // do reprojection and filter out the pixels that are not save 359 const float2 pValid = PixelValid(oldTex,348 /* const float2 pValid = PixelValid(oldTex, 360 349 color, 361 350 difVec.xyz, … … 368 357 myTex 369 358 ); 370 #else371 const float2 pValid = float2(0, 0);372 #endif373 359 374 360 pix.color = color; 375 361 pix.color.xy = pValid.xy; 376 362 pix.color.z = color.w; 377 363 */ 364 const float3 translatedPos = ComputeTranslatedPos(color, difVec.xyz, IN.view, oldEyePos); 365 366 pix.color.xyz = translatedPos; 367 pix.color.w = color.w; 378 368 pix.normal = normal; 379 369 … … 390 380 return color; 391 381 } 382 383
Note: See TracChangeset
for help on using the changeset viewer.