- Timestamp:
- 11/03/08 18:41:06 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg
r3093 r3094 73 73 uniform float3 tr, 74 74 float2 texcoord0, 75 float3 eyePos,76 75 float3 oldEyePos, 77 76 uniform float3 oldbl, … … 87 86 float2 texCoord = texcoord0 + offsetTransformed * scaleFactor; 88 87 //texCoord.x += 0.5f / 1024.0f; texCoord.y += 0.5f / 768.0f; 89 const float3 samplePos = ReconstructSamplePos(colors, texCoord, bl, br, tl, tr) + eyePos;88 const float3 samplePos = ReconstructSamplePos(colors, texCoord, bl, br, tl, tr); 90 89 91 90 // reproject into old frame and calculate projected depth … … 114 113 as well as a boolean that 115 114 */ 116 float4 temporalSmoothing(float4 currentProjPos, 117 float4 worldPos, 115 float4 temporalSmoothing(float4 eyeSpacePos, 118 116 uniform sampler2D oldTex, 119 117 const uniform float4x4 oldModelViewProj, … … 129 127 uniform float3 tr, 130 128 float2 texcoord0, 131 float3 eyePos,132 129 float eyeSpaceDepth, 133 130 float3 oldEyePos, … … 151 148 152 149 // reproject into old frame and calculate projected depth 153 float4 backProjPos = mul(oldModelViewProj, worldPos);150 float4 backProjPos = mul(oldModelViewProj, eyeSpacePos); 154 151 backProjPos /= backProjPos.w; 155 152 // fit from unit cube into 0 .. 1 … … 162 159 163 160 const float oldEyeSpaceDepth = oldCol.w; 164 //oldTexCoords.x += 0.5f / 1024.0f; oldTexCoords.y += 0.5f / 768.0f;165 161 166 162 float3 viewVec = Interpol(oldTexCoords, oldbl, oldbr, oldtl, oldtr); 167 //float3 oldSamplePos = -viewVec * eyeSpaceDepth + oldEyePos; 168 float3 oldSamplePos = oldEyePos - viewVec * oldEyeSpaceDepth; 169 170 const float depthDif = length(oldSamplePos - worldPos.xyz); 171 const float dummy5 = abs(oldEyeSpaceDepth - eyeSpaceDepth); 172 //const float dummy5 = length(oldTexCoords - texcoord0) * 1e5f; 173 //const float dummy5 = depthDif; 163 float3 oldEyeSpacePos = oldEyePos - viewVec * oldEyeSpaceDepth; 164 165 const float depthDif = length(oldEyeSpacePos - eyeSpacePos.xyz); 174 166 175 167 float notValid = 0.5f; 176 168 177 for (int i = 0; i < NUM_SAMPLES; ++ i)169 /*for (int i = 0; i < NUM_SAMPLES; ++ i) 178 170 { 179 171 float sampleDif = ComputeDifference(samples[i], … … 185 177 bl, br, tl, tr, 186 178 texcoord0, 187 eyePos,188 179 oldEyePos, 189 180 oldbl, oldbr, oldtl, oldtr, 190 worldPos.xyz);181 eyePos.xyz); 191 182 192 183 if (sampleDif >= 1e-1f) ++ notValid; 193 } 184 }*/ 194 185 195 186 //if (notValid < 1.0f) temporalCoherence = 4.0f; … … 213 204 newWeight = oldWeight + 1.0f; 214 205 illum_col.x = (ao.x + oldCol.x * oldWeight) / newWeight; 215 if (notValid > 1.0f) newWeight = 2 ;206 if (notValid > 1.0f) newWeight = 2.0f; 216 207 } 217 208 else … … 223 214 illum_col.y = newWeight; 224 215 illum_col.w = eyeSpaceDepth; 225 //illum_col.y = dummy5;216 226 217 227 218 return illum_col; … … 270 261 271 262 //if ((texcoord.x <= 1.0f) && (texcoord.x >= 0.0f) && (texcoord.y <= 1.0f) && (texcoord.y >= 0.0f)) ++ numSamples; 272 273 263 const float3 samplePos = ReconstructSamplePos(colors, texcoord, bl, br, tl, tr); 274 264 … … 316 306 uniform float4x4 oldModelViewProj, 317 307 uniform float temporalCoherence, 318 uniform float3 eyePos,319 308 uniform float3 bl, 320 309 uniform float3 br, … … 335 324 const float3 viewDir = IN.view; 336 325 const float eyeSpaceDepth = tex2Dlod(colors, float4(IN.texCoord, 0, 0)).w; 337 const float3 eyeSpacePos = -viewDir * eyeSpaceDepth; 338 const float4 worldPos = float4(eyePos + eyeSpacePos, 1.0f); 326 const float4 eyeSpacePos = float4(-viewDir * eyeSpaceDepth, 1); 339 327 340 328 … … 342 330 //-- calculcate the current projected posiion (also used for next frame) 343 331 344 float4 projPos = mul(modelViewProj, worldPos); 332 float4 projPos = mul(modelViewProj, eyeSpacePos); 333 float w = SAMPLE_RADIUS / projPos.w; 345 334 346 float w = 1.0f / projPos.w; 347 projPos *= w; 348 w *= SAMPLE_RADIUS; 349 350 const float2 ao = ssao(IN, colors, noiseTex, samples, normal, eyeSpacePos, w, bl, br, tl, tr, normalize(viewDir)); 335 const float2 ao = ssao(IN, colors, noiseTex, samples, normal, eyeSpacePos.xyz, w, bl, br, tl, tr, normalize(viewDir)); 351 336 352 337 … … 354 339 //-- compute temporally smoothing 355 340 356 OUT.illum_col = temporalSmoothing( projPos, worldPos, oldTex, oldModelViewProj, temporalCoherence, ao,357 samples, colors, noiseTex, w, bl, br, tl, tr, IN.texCoord, eye Pos, eyeSpaceDepth,341 OUT.illum_col = temporalSmoothing(eyeSpacePos, oldTex, oldModelViewProj, temporalCoherence, ao, 342 samples, colors, noiseTex, w, bl, br, tl, tr, IN.texCoord, eyeSpaceDepth, 358 343 oldEyePos, oldbl, oldbr, oldtl, oldtr); 359 344
Note: See TracChangeset
for help on using the changeset viewer.