Ignore:
Timestamp:
10/03/08 14:35:07 (16 years ago)
Author:
mattausch
Message:

trying to use smaller fbo

Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/globillum.cg

    r2991 r2999  
    6565                                   uniform float4 centerPosition, 
    6666                                   float w, 
    67                                    // uniform float3 viewDir, 
    6867                                   uniform float3 eyePos, 
    6968                                   uniform float3 bl, 
     
    7170                                   uniform float3 tl, 
    7271                                   uniform float3 tr 
     72                                   //, uniform float3 viewDir 
    7373                                   ) 
    7474{ 
     
    102102                float2 texcoord = IN.texCoord.xy + offsetTransformed * AREA_SIZE * w; 
    103103 
    104                 if ((texcoord.x <= 1.0f) && (texcoord.x >= 0.0f) && (texcoord.y <= 1.0f) && (texcoord.y >= 0.0f)) 
    105                         ++ numSamples; 
     104                //if ((texcoord.x <= 1.0f) && (texcoord.x >= 0.0f) && (texcoord.y <= 1.0f) && (texcoord.y >= 0.0f)) ++ numSamples; 
    106105 
    107106                // reconstruct world space position from sample 
    108107                float4 sample = tex2Dlod(colors, float4(texcoord, 0, SSAO_MIPMAP_LEVEL)); 
    109108                const float eyeSpaceDepth = sample.w; 
    110                 float3 rotView = normalize(Interpol(texcoord, bl, br, tl, tr)); 
     109                //float3 rotView = normalize(Interpol(texcoord, bl, br, tl, tr)); 
     110                float3 rotView = Interpol(texcoord, bl, br, tl, tr); 
    111111                 
    112112                const float3 sample_position = eyePos - rotView * eyeSpaceDepth; 
     
    213213        const float oldAvgDepth = oldSsao.z; 
    214214 
    215         if ((temporalCoherence > 0.0f) && 
     215        if (//(temporalCoherence > 0.0f) && 
    216216                (tex.x >= 0.0f) && (tex.x < 1.0f) &&  
    217217                (tex.y >= 0.0f) && (tex.y < 1.0f) &&  
    218218                (abs(depthDif) < 1e-3f) 
    219219                // check if something changed in the surrounding area 
    220                 && (oldNumSamples > 0.2 * gi.ao.y) 
    221                 //&& (oldAvgDepth / newAvgDepth > 0.99) 
     220                //&& (oldNumSamples > 0.2 * gi.ao.y) 
    222221                ) 
    223222        { 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/mrt.cg

    r2989 r2999  
    3838{ 
    3939  float4 col: COLOR0; 
    40   float4 pos: COLOR1; 
     40  //float4 pos: COLOR1; 
     41  float2 pos: COLOR1; 
    4142  float4 norm: COLOR2; 
    4243}; 
     
    6566 
    6667 
     68// bilinear interpolation 
     69inline float3 Interpol(float2 w, float3 bl, float3 br, float3 tl, float3 tr) 
     70{ 
     71        float3 x1 = lerp(bl, tl, w.y); 
     72        float3 x2 = lerp(br, tr, w.y);  
     73        float3 v = lerp(x1, x2, w.x);  
     74 
     75        return v; 
     76} 
     77 
     78 
    6779pixel fragtex(fragin IN,  
    6880                          uniform sampler2D dirtTex, 
    6981                          uniform float maxDepth, 
    7082                          uniform sampler2D tex, 
    71                           uniform float3 currentPos) 
     83                          uniform float3 eyePos, 
     84                          uniform float3 bl, 
     85                          uniform float3 br, 
     86                          uniform float3 tl, 
     87                          uniform float3 tr) 
    7288{ 
     89        float4 texColor = tex2D(tex, IN.texCoord.xy); 
     90 
     91        // account for alpha blending 
     92        if (texColor.w < 0.5f) discard; 
     93 
    7394        pixel pix; 
    74  
    75         float4 texColor = tex2D(tex, IN.texCoord.xy); 
    7695 
    7796        // save color in first render target 
    7897        // hack: use combination of emmisive + diffuse (emmisive used as constant ambient term) 
    7998        pix.col = (glstate.material.emission + glstate.material.diffuse) * texColor;  
    80          
     99 
    81100        // save world position in second render target 
    82         pix.pos = IN.worldPos * maxDepth; 
     101        //pix.pos = IN.worldPos * maxDepth; 
    83102        // save world space normal in third rt 
    84103        pix.norm.xyz = IN.normal; 
     
    86105        // store projection coordinates with positions (used for ssao) 
    87106        pix.norm.w = IN.projPos.w; 
    88         // write the depth 
    89         pix.pos.w = IN.mypos.z / IN.mypos.w; 
    90107 
    91         // account for alpha blending 
    92         if (pix.col.w < 0.5f) 
    93                 discard; 
     108        const float4 projPos = IN.mypos / IN.mypos.w; 
     109        // store the projected depth 
     110        pix.pos.y = projPos.z; 
     111 
     112        float2 screenCoord = projPos.xy * 0.5f + 0.5f; 
     113        const float magView = length(Interpol(screenCoord, bl, br, tl, tr)); 
    94114 
    95115        // hack: squeeze some information about ambient into the texture 
    96116        //pix.col.w = glstate.material.emission.x; 
    97         pix.col.w = length(currentPos - IN.worldPos) * maxDepth; 
     117 
     118        // eye linear depth 
     119        pix.col.w = (length(eyePos - IN.worldPos.xyz) * maxDepth) / magView; 
     120        pix.pos.x = pix.col.x; 
    98121 
    99122        return pix; 
     
    101124 
    102125 
    103 pixel frag(fragin IN, uniform float maxDepth, uniform float3 currentPos) 
     126pixel frag(fragin IN,  
     127                   uniform float maxDepth,  
     128                   uniform float3 eyePos, 
     129                   uniform float3 bl, 
     130                   uniform float3 br, 
     131                   uniform float3 tl, 
     132                   uniform float3 tr) 
    104133{ 
    105134        pixel pix; 
     
    107136        // hack: use comination of emmisive + diffuse (emmisive used as constant ambient term) 
    108137        pix.col = glstate.material.diffuse + glstate.material.emission; 
    109         pix.pos = IN.worldPos * maxDepth; 
     138        //pix.pos = IN.worldPos * maxDepth; 
    110139 
    111140        pix.norm.xyz = IN.normal; 
     
    113142        // store projection coordinates with positions (used for ssao) 
    114143        pix.norm.w = IN.mypos.w; 
    115         // the projected depth 
    116         pix.pos.w = IN.mypos.z / IN.mypos.w; 
    117          
     144 
     145        const float4 projPos = IN.mypos / IN.mypos.w; 
     146        // store the projected depth 
     147        pix.pos.y = projPos.z; 
     148 
     149        float2 screenCoord = projPos.xy * 0.5f + 0.5f; 
     150        const float magView = length(Interpol(screenCoord, bl, br, tl, tr)); 
     151 
    118152        // hack: squeeze some information about the ambient term into the target 
    119153        //pix.col.w = glstate.material.emission.x; 
    120         pix.col.w = length(currentPos - IN.worldPos) * maxDepth; 
     154        pix.col.w = (length(eyePos - IN.worldPos.xyz) * maxDepth) / magView; 
     155        pix.pos.x = pix.col.x; 
    121156 
    122157        return pix; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg

    r2997 r2999  
    4848                                                                                float3 bl, float3 br, float3 tl, float3 tr) 
    4949{ 
    50 #if 0 
     50#if 1 
    5151        float eyeSpaceDepth = tex2Dlod(colors, float4(texcoord, 0, SSAO_MIPMAP_LEVEL)).w; 
    52         float3 rotView = normalize(Interpol(texcoord, bl, br, tl, tr)); 
    53          
    54         float3 sample_position = eyePos - rotView * eyeSpaceDepth; 
     52        //float3 rotView = normalize(Interpol(texcoord, bl, br, tl, tr)); 
     53        float3 rotView = Interpol(texcoord, bl, br, tl, tr); 
     54         
     55        float3 samplePos = eyePos - rotView * eyeSpaceDepth; 
    5556#else 
    56         float3 sample_position = tex2Dlod(colors, float4(texcoord, 0, SSAO_MIPMAP_LEVEL)).xyz; 
    57 #endif 
    58         return sample_position; 
     57        float3 samplePos = tex2Dlod(colors, float4(texcoord, 0, SSAO_MIPMAP_LEVEL)).xyz; 
     58#endif 
     59        return samplePos; 
    5960} 
    6061 
     
    101102                float2 texcoord = IN.texCoord.xy + offsetTransformed * AREA_SIZE * scaleFactor; 
    102103 
    103                 if ((texcoord.x <= 1.0f) && (texcoord.x >= 0.0f) && (texcoord.y <= 1.0f) && (texcoord.y >= 0.0f)) 
    104                         ++ numSamples; 
    105  
    106                 float3 sample_position = ReconstructSamplePosition(eyePos, colors, texcoord, bl, br, tl, tr); 
    107  
    108                 float3 vector_to_sample = sample_position - centerPosition.xyz; 
    109                 const float length_to_sample = length(vector_to_sample); 
    110  
    111                 float3 direction_to_sample = vector_to_sample / length_to_sample; 
     104                //if ((texcoord.x <= 1.0f) && (texcoord.x >= 0.0f) && (texcoord.y <= 1.0f) && (texcoord.y >= 0.0f))++ numSamples; 
     105 
     106                // get sample world space position 
     107                float eyeSpaceDepth = tex2Dlod(colors, float4(texcoord, 0, SSAO_MIPMAP_LEVEL)).w; 
     108                //float3 rotView = normalize(Interpol(texcoord, bl, br, tl, tr)); 
     109                float3 rotView = Interpol(texcoord, bl, br, tl, tr); 
     110         
     111                float3 samplePos = ReconstructSamplePosition(eyePos, colors, texcoord, bl, br, tl, tr); 
     112 
     113 
     114                /////// 
     115                //-- compute contribution of current sample taking into account direction and angle 
     116 
     117                float3 dirSample = samplePos - centerPosition.xyz; 
     118                const float lengthSample = length(dirSample); 
     119 
     120                float3 nDirSample = dirSample / lengthSample; 
    112121 
    113122                // angle between current normal and direction to sample controls AO intensity. 
    114                 const float cos_angle = max(dot(direction_to_sample, currentNormal), 0.0f); 
     123                const float cos_angle = max(dot(nDirSample, currentNormal), 0.0f); 
    115124 
    116125                // the distance_scale offset is used to avoid singularity that occurs at global illumination when  
    117126                // the distance to a sample approaches zero 
    118                 const float distance_intensity =  
    119                         (SAMPLE_INTENSITY * DISTANCE_SCALE) / (DISTANCE_SCALE + length_to_sample * length_to_sample); 
     127                const float intensity =  
     128                        (SAMPLE_INTENSITY * DISTANCE_SCALE) / (DISTANCE_SCALE + lengthSample * lengthSample); 
    120129 
    121130#if 0 
    122131                // if surface normal perpenticular to view dir, approx. half of the samples will not count 
    123132                // => compensate for this (on the other hand, projected sampling area could be larger!) 
    124                 const float view_correction = 1.0f + VIEW_CORRECTION_SCALE * (1.0f - dot(currentViewDir, currentNormal)); 
    125                 total_ao += cos_angle * distance_intensity * view_correction; 
    126 #endif 
    127                 total_ao += cos_angle * distance_intensity; 
     133                const float viewCorrection = 1.0f + VIEW_CORRECTION_SCALE * (1.0f - dot(currentViewDir, currentNormal)); 
     134                total_ao += cos_angle * intensity * viewCorrection; 
     135#endif 
     136                total_ao += cos_angle * intensity; 
    128137        } 
    129138 
    130139        return float2(max(0.0f, 1.0f - total_ao), numSamples); 
    131         //return saturate(dot(currentViewDir, currentNormal)); 
    132140} 
    133141 
     
    165173        const float4 centerPosition = tex2D(positions, IN.texCoord.xy); 
    166174 
    167 #if 1    
     175#if 0    
    168176        const float2 ao = ssao(IN, positions, noiseTexture, samples, normal, centerPosition, w, eyePos, bl, br, tl, tr); 
    169177 
     
    197205        float4 oldPos = mul(oldModelViewProj, realPos); 
    198206 
     207        const float4 projPos = oldPos / oldPos.w; 
     208 
    199209        // the current depth projected into the old frame 
    200         const float projDepth = oldPos.z / oldPos.w; 
     210        const float projDepth = projPos.z; 
    201211 
    202212        // fit from unit cube into 0 .. 1 
    203         float2 tex = (oldPos.xy / oldPos.w) * 0.5f + 0.5f; 
     213        float2 tex = (projPos.xy) * 0.5f + 0.5f; 
    204214 
    205215        // optain the sample from the last frame 
     
    212222        const float depthDif = 1.0f - projDepth / oldDepth; 
    213223 
    214  
    215224        float newWeight; 
    216225 
    217226        // the number of valid samples in this frame 
    218         const float newNumSamples = ao.y; 
     227        //const float newNumSamples = ao.y; 
    219228 
    220229 
     
    224233                (abs(depthDif) < 1e-4f)  
    225234                // if visibility changed in the surrounding area we have to recompute 
    226                 && (oldNumSamples > 0.8f * newNumSamples) 
     235                //&& (oldNumSamples > 0.8f * newNumSamples) 
    227236                ) 
    228237        { 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/tonemap.cg

    r2992 r2999  
    130130        float logLumScaled = logLum * INV_LOGLUM_RANGE - logLumOffset; 
    131131 
    132         if (oldLogLum > 0) 
     132        if (oldLogLum > 1e-5f) // too hight log lum 
    133133                OUT.col.w = lerp(oldLogLum, logLumScaled, 0.1f); 
    134134        else 
Note: See TracChangeset for help on using the changeset viewer.