Changeset 2974


Ignore:
Timestamp:
09/25/08 18:37:03 (16 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling/src
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.cpp

    r2973 r2974  
    8080static CGparameter sColorsTexCombinedSsaoParam; 
    8181static CGparameter sSsaoTexCombinedSsaoParam; 
     82static CGparameter sPositionsTexCombinedSsaoParam; 
    8283 
    8384 
     
    403404                sColorsTexCombinedSsaoParam = cgGetNamedParameter(sCgCombinedSsaoProgram, "colors");   
    404405                sSsaoTexCombinedSsaoParam = cgGetNamedParameter(sCgCombinedSsaoProgram, "ssaoTex"); 
     406                sPositionsTexCombinedSsaoParam = cgGetNamedParameter(sCgCombinedSsaoProgram, "positions"); 
    405407        } 
    406408        else 
     
    551553                FirstPass(fbo, light); 
    552554 
    553  
    554         float imageKey, whiteLum, middleGrey; 
    555  
    556         ComputeToneParameters(fbo, light, imageKey, whiteLum, middleGrey); 
    557  
    558         ToneMap(fbo, light, imageKey, whiteLum, middleGrey); 
     555        glEnable(GL_TEXTURE_2D); 
     556        // generate mip map levels for position texture 
     557        glBindTexture(GL_TEXTURE_2D, fbo->GetColorBuffer(colorBufferIdx)->GetTexture()); 
     558        glGenerateMipmapEXT(GL_TEXTURE_2D); 
     559 
    559560 
    560561        switch (mShadingMethod) 
     
    573574        } 
    574575 
     576        float imageKey, whiteLum, middleGrey; 
     577 
     578        ComputeToneParameters(fbo, light, imageKey, whiteLum, middleGrey); 
     579        ToneMap(fbo, light, imageKey, whiteLum, middleGrey); 
     580 
    575581        AntiAliasing(fbo, light); 
    576582 
     
    613619        GLuint normalsTex = fbo->GetColorBuffer(2)->GetTexture(); 
    614620 
    615         if (1) 
    616         { 
    617                 // generate mip map levels for position texture 
    618                 glBindTexture(GL_TEXTURE_2D, positionsTex); 
    619                 glGenerateMipmapEXT(GL_TEXTURE_2D); 
    620         } 
    621  
     621        // generate mip map levels for position texture 
     622        glBindTexture(GL_TEXTURE_2D, positionsTex); 
     623        glGenerateMipmapEXT(GL_TEXTURE_2D); 
     624         
    622625 
    623626        // read the second buffer, write to the first buffer 
     
    748751        glColor3f(1.0f, 1.0f, 1.0f); 
    749752 
    750         float offs2 = 0.5f; 
    751  
    752753        glBegin(GL_QUADS); 
    753754 
     
    832833        cgGLSetMatrixParameterfc(sOldModelViewProjMatrixGiParam, (const float *)oldProjViewMatrix.x); 
    833834 
    834         GLuint colorsTex = fbo->GetColorBuffer(3)->GetTexture(); 
     835        GLuint colorsTex = fbo->GetColorBuffer(colorBufferIdx)->GetTexture(); 
    835836        GLuint positionsTex = fbo->GetColorBuffer(1)->GetTexture(); 
    836837        GLuint normalsTex = fbo->GetColorBuffer(2)->GetTexture(); 
    837838 
    838         if (1) 
    839         { 
    840                 // generate mip map levels for position texture 
    841                 glBindTexture(GL_TEXTURE_2D, positionsTex); 
    842                 glGenerateMipmapEXT(GL_TEXTURE_2D); 
    843  
    844                 // generate mip map levels for position texture 
    845                 glBindTexture(GL_TEXTURE_2D, colorsTex); 
    846                 glGenerateMipmapEXT(GL_TEXTURE_2D); 
    847         } 
    848  
     839        // generate mip map levels for position texture 
     840        glBindTexture(GL_TEXTURE_2D, positionsTex); 
     841        glGenerateMipmapEXT(GL_TEXTURE_2D); 
    849842 
    850843        // read the second buffer, write to the first buffer 
     
    991984 
    992985        GLuint colorsTex = fbo->GetColorBuffer(colorBufferIdx)->GetTexture(); 
     986        GLuint positionsTex = fbo->GetColorBuffer(1)->GetTexture(); 
    993987        GLuint ssaoTex = mFbo->GetColorBuffer(mFboIndex)->GetTexture(); 
    994988 
     
    10091003        cgGLEnableTextureParameter(sSsaoTexCombinedSsaoParam); 
    10101004 
     1005        cgGLSetTextureParameter(sPositionsTexCombinedSsaoParam, positionsTex); 
     1006        cgGLEnableTextureParameter(sPositionsTexCombinedSsaoParam); 
    10111007         
    10121008        glColor3f(1.0f, 1.0f, 1.0f); 
     
    10251021        cgGLDisableTextureParameter(sColorsTexCombinedSsaoParam); 
    10261022        cgGLDisableTextureParameter(sSsaoTexCombinedSsaoParam); 
    1027  
     1023        cgGLDisableTextureParameter(sPositionsTexCombinedSsaoParam); 
     1024         
    10281025        cgGLDisableProfile(RenderState::sCgFragmentProfile); 
    10291026 
     
    11631160        ///////////// 
    11641161 
    1165         GLuint colorsTex = colorBuffer->GetTexture(); 
     1162        /*GLuint colorsTex = colorBuffer->GetTexture(); 
    11661163 
    11671164        fbo->Bind(); 
     
    11861183 
    11871184        // the neighbouring texels 
    1188         float x_offs = 1.0f / mWidth; 
    1189         float y_offs = 1.0f / mHeight; 
     1185        float x_offs = 0;//1.0f / mWidth; 
     1186        float y_offs = 0;//1.0f / mHeight; 
    11901187 
    11911188        SetVertex(0, 0, x_offs, y_offs); 
     
    12111208                //DownSample(fbo); 
    12121209        } 
    1213  
     1210*/ 
    12141211        PrintGLerror("antialiasing"); 
    12151212} 
     
    12581255        glColor3f(1.0f, 1.0f, 1.0f); 
    12591256 
    1260         float offs2 = 0.5f; 
    1261  
    12621257        glBegin(GL_QUADS); 
    12631258 
    12641259        // the neighbouring texels 
    1265         float x_offs = 1.0f / mWidth; 
    1266         float y_offs = 1.0f / mHeight; 
     1260        const float x_offs = 1.0f / mWidth; 
     1261        const float y_offs = 1.0f / mHeight; 
    12671262 
    12681263        SetVertex(0, 0, x_offs, y_offs); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp

    r2968 r2974  
    618618        // the diffuse color buffer 
    619619        fbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_NEAREST, ColorBufferObject::FILTER_NEAREST); 
    620         //fbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_NEAREST, false); 
    621620 
    622621        // the positions buffer 
    623622        fbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_NEAREST, ColorBufferObject::FILTER_NEAREST); 
    624         //fbo->AddColorBuffer(ColorBufferObject::BUFFER_FLOAT_32, ColorBufferObject::WRAP_CLAMP_TO_EDGE, ColorBufferObject::FILTER_NEAREST, false); 
    625623 
    626624        // the normals buffer 
     
    10541052                 
    10551053                // draw to 3 color buffers 
    1056                 glDrawBuffers(3, mrt); 
     1054                // a color, normal, and positions buffer 
     1055                glDrawBuffers(4, mrt); 
    10571056 
    10581057                glEnableClientState(GL_NORMAL_ARRAY); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaderenv.h

    r2970 r2974  
    3838 
    3939 
     40////////// 
     41//-- Tone mapping 
     42 
     43#define MINLOGLUM 10.0f 
     44#define MAXLOGLUM 10.0f 
    4045 
    4146#endif // __SHADERENV_H 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/antialiasing.cg

    r2973 r2974  
    11#include "../shaderenv.h" 
    22 
    3 struct v2p 
     3struct fragment 
    44{ 
    55        float2 c:  TEXCOORD0; // center 
     
    2121 
    2222 
    23 float4 main(v2p IN,  
     23float4 main(fragment IN,  
    2424                        uniform sampler2D colors, 
    2525                        uniform sampler2D normals 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg

    r2968 r2974  
    4848        float4 outColor; 
    4949 
    50         if (emmisive > 1.5) outColor = color; 
    51         //else if (emmisive > 0.95)     outColor = color * lightDiffuse; 
    52         else 
    53                 outColor = (ambient + diffuse) * color; 
     50        //if (color.w > 1e19f) outColor = color; 
     51        if (emmisive > 1.5f) outColor = color; 
     52        else outColor = (ambient + diffuse) * color; 
    5453 
    5554        return outColor; 
     
    7574 
    7675        // an ambient color term 
    77         float amb = norm.w; 
     76        float amb = color.w; 
    7877 
    7978        float3 normal = normalize(norm.xyz); 
     
    8281         
    8382        OUT.color = col; 
    84         //OUT.color = float4(100.0, 1, 1, 0); 
    8583        OUT.color.w = color.w; 
     84 
     85        // write out logaritmic luminance for tone mapping 
     86        const float3 w = float3(0.299f, 0.587f, 0.114f); 
     87 
     88        float lum = dot(OUT.color.rgb, w); 
     89        float logLum = log(1e-5f + lum); 
     90 
     91        float invLogLumRange =  1 / (MAXLOGLUM + MINLOGLUM); 
     92        float logLumOffset = MINLOGLUM * invLogLumRange; 
     93        float logLumScaled = logLum * invLogLumRange + logLumOffset; 
     94 
     95        OUT.color.w = logLumScaled; 
    8696 
    8797        return OUT; 
     
    152162         
    153163        // hack: an emmisive color term 
    154         float emmisive = norm.w; 
     164        float emmisive = color.w; 
    155165 
    156166        // diffuse intensity 
     
    163173 
    164174        // calc diffuse illumination + shadow term 
    165         if ((emmisive < 0.95f) // hack: prevent shadowing the sky        
     175        if ((emmisive < 1.5f) // hack: prevent shadowing the sky         
    166176                && (angle > 1e-3f) // shadow only if diffuse color has some minimum intensity 
    167177                ) 
     
    178188        } 
    179189 
    180         // global ambient 
    181         //const float4 ambient = 0.25f; 
     190        // light ambient term 
    182191        const float4 ambient = glstate.light[0].ambient; 
    183192         
     
    185194        OUT.color = (emmisive > 1.5f) ? color: (ambient + diffuse) * color; 
    186195 
    187         // also write out depth component 
    188         OUT.color.w = color.w; 
    189  
     196        // write out logaritmic luminance for tone mapping 
     197        const float3 w = float3(0.299f, 0.587f, 0.114f); 
     198 
     199        float lum = dot(OUT.color.rgb, w); 
     200        float logLum = log(1e-5f + lum); 
     201 
     202        OUT.color.w = 100;//logLum; 
     203         
    190204        return OUT; 
    191205} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/globillum.cg

    r2964 r2974  
    227227         
    228228        OUT.illum_col = (col + illum) * ao; 
    229         //OUT.illum_col = ao; 
    230  
    231229        OUT.illum_col.w = col.w; 
    232230 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/mrt.cg

    r2965 r2974  
    7575 
    7676        // save color in first render target 
    77         // hack: use comination of emmisive + diffuse (emmisive used as constant ambient term) 
     77        // hack: use combination of emmisive + diffuse (emmisive used as constant ambient term) 
    7878        pix.col = (glstate.material.emission + glstate.material.diffuse) * texColor;  
    7979         
    8080        // save world position in second render target 
    8181        pix.pos = IN.worldPos * maxDepth; 
    82         // save normal in third rt 
     82        // save world space normal in third rt 
    8383        pix.norm.xyz = IN.normal; 
    8484 
    85         // hack: squeeze some information about ambient into the texture 
    86         pix.norm.w = glstate.material.emission.x; 
    8785        // store projection coordinates with positions (used for ssao) 
    88         pix.pos.w = IN.projPos.w; 
     86        pix.norm.w = IN.projPos.w; 
     87        // write the depth 
     88        pix.pos.w = IN.mypos.z / IN.mypos.w; 
    8989 
    9090        // account for alpha blending 
     
    9292                discard; 
    9393 
    94         // write the depth 
    95         pix.col.w = IN.mypos.z / IN.mypos.w; 
     94        // hack: squeeze some information about ambient into the texture 
     95        pix.col.w = glstate.material.emission.x; 
    9696 
    9797        return pix; 
     
    110110        pix.norm.xyz = IN.normal; 
    111111         
     112        // store projection coordinates with positions (used for ssao) 
     113        pix.norm.w = IN.mypos.w; 
     114        // the projected depth 
     115        pix.pos.w = IN.mypos.z / IN.mypos.w; 
     116         
    112117        // hack: squeeze some information about the ambient term into the target 
    113         pix.norm.w = glstate.material.emission.x; 
    114         pix.pos.w = IN.mypos.w; 
    115          
    116         // the projected depth 
    117         pix.col.w = IN.mypos.z / IN.mypos.w; 
     118        pix.col.w = glstate.material.emission.x; 
    118119 
    119120        return pix; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/sky_preetham.cg

    r2968 r2974  
    9494        OUT.color = float4(hcol, 1.0); 
    9595 
    96         //OUT.color.rgb *= 2e-3f;  
    9796        //OUT.color.rgb *= 2e-5f;  
    9897 
     
    112111 
    113112        pix.col = IN.color2; 
    114         pix.pos = IN.worldPos * 1e20;// * maxDepth; 
     113        pix.pos = 1e20f; 
    115114 
    116115        pix.norm.xyz = IN.normal; 
    117116         
    118         // hack: squeeze some information about an ambient term into the target 
    119         pix.norm.w = 2; 
    120         pix.pos.w = IN.mypos.w; 
     117        pix.norm.w = IN.mypos.w; 
     118        pix.pos.w = 1e20f; 
    121119         
    122         // the projected depth 
    123         pix.col.w = IN.mypos.z / IN.mypos.w; 
     120        pix.col.w = 2.0f; 
    124121 
    125122        return pix; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/ssao.cg

    r2964 r2974  
    4040                   uniform float2 samples[NUM_SAMPLES], 
    4141                   uniform float3 currentNormal, 
    42                    uniform float4 centerPosition 
     42                   uniform float4 centerPosition, 
     43                   uniform float scaleFactor 
    4344                   //,uniform float3 currentViewDir 
    4445                   ) 
    4546{ 
    46         // the w coordinate from the persp. projection 
    47         float w = centerPosition.w; 
    48  
    4947        // Check in a circular area around the current position. 
    5048        // Shoot vectors to the positions there, and check the angle to these positions. 
     
    6765#endif 
    6866                // weight with projected coordinate to reach similar kernel size for near and far 
    69                 float2 texcoord = IN.texCoord.xy + offsetTransformed * AREA_SIZE * w; 
     67                float2 texcoord = IN.texCoord.xy + offsetTransformed * AREA_SIZE * scaleFactor; 
    7068 
    7169                if ((texcoord.x <= 1.0f) && (texcoord.x >= 0.0f) && (texcoord.y <= 1.0f) && (texcoord.y >= 0.0f)) 
     
    120118        float4 norm = tex2D(normals, IN.texCoord.xy); 
    121119         
    122         // the ambient term 
    123         const float amb = norm.w; 
    124  
    125120        // expand normal 
    126121        float3 normal = normalize(norm.xyz); 
    127122         
    128         /// the current view direction 
    129         //float3 viewDir = normalize(IN.view); 
     123        // a constant ambient term 
     124        const float amb = norm.w; 
     125        // the w coordinate from the persp. projection 
     126        float w = norm.w; 
    130127 
    131128        // the current world position 
     
    133130         
    134131        // the current color 
    135         const float4 currentCol = tex2D(colors, IN.texCoord.xy); 
    136         const float currentDepth = currentCol.w; 
    137  
    138         const float2 ao = ssao(IN, positions, noiseTexture, samples, normal, centerPosition);//, viewDir); 
     132        const float currentDepth = centerPosition.w; 
     133 
     134        const float2 ao = ssao(IN, positions, noiseTexture, samples, normal, centerPosition, w);//, viewDir); 
    139135                 
    140136 
     
    182178        } 
    183179 
    184  
    185         //OUT.illum_col.y = ao.y; 
    186180        OUT.illum_col.z = newWeight; 
    187181        OUT.illum_col.w = currentDepth; 
     
    193187pixel combine(fragment IN,  
    194188                          uniform sampler2D colors, 
    195                           uniform sampler2D ssaoTex) 
     189                          uniform sampler2D ssaoTex, 
     190                          uniform sampler2D positions) 
    196191{ 
    197192        pixel OUT; 
    198193 
    199194        float4 col = tex2Dlod(colors, float4(IN.texCoord.xy, 0, 0)); 
     195        float depth = tex2Dlod(positions, float4(IN.texCoord.xy, 0, 0)).w; 
    200196        float4 ao = tex2D(ssaoTex, IN.texCoord.xy); 
    201197 
    202198        OUT.illum_col = col * ao.x; 
    203         //OUT.illum_col = (float4)ao.x; 
    204  
    205199        OUT.illum_col.w = ao.w; 
    206200 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/tonemap.cg

    r2973 r2974  
    22 
    33 
    4 struct fragment 
     4struct frag 
    55{ 
    66         // normalized screen position 
    7         float4 pos: WPOS; 
    8         float4 texCoord: TEXCOORD0;  
     7        float2 texCoord: TEXCOORD0;  
    98 
    109        float2 lt: TEXCOORD1; // left top 
     
    2120 
    2221 
    23 float4 DownSample(fragment IN, 
     22float4 DownSample(frag IN, 
    2423                                  uniform sampler2D colors, 
    2524                                  float2 downSampleOffs[16]) : COLOR 
     
    2928    for(int i = 0; i < 16; ++ i) 
    3029    { 
    31         average += tex2D(colors, IN.texCoord.xy + downSampleOffs[i]); 
     30        average += tex2D(colors, IN.texCoord + downSampleOffs[i]); 
    3231    } 
    3332         
     
    3837     
    3938 
    40 float4 GreyScaleDownSample(fragment IN, 
    41                                                    uniform sampler2D colors): COLOR 
     39float4 GreyScaleDownSample(frag IN, 
     40                                                   uniform sampler2D colors 
     41                                                   ): COLOR 
    4242{ 
    4343 
    4444        // Compute the average of the 4 necessary samples 
    45         float average = 0.0f; 
    46         float maximum = -1e20; 
     45        float average = .0f; 
     46        float maximum = .0f; 
    4747 
    4848        // the rgb weights 
     
    5252        float4 cols[4]; 
    5353 
    54         cols[0] = tex2D(colors, IN.texCoord.xy + IN.lt.xy); 
    55         cols[1] = tex2D(colors, IN.texCoord.xy + IN.lb.xy); 
    56         cols[2] = tex2D(colors, IN.texCoord.xy + IN.rt.xy); 
    57         cols[3] = tex2D(colors, IN.texCoord.xy + IN.rb.xy); 
    58  
     54        cols[0] = tex2D(colors, IN.lt); 
     55        cols[1] = tex2D(colors, IN.lb); 
     56        cols[2] = tex2D(colors, IN.rt); 
     57        cols[3] = tex2D(colors, IN.rb); 
    5958 
    6059        for (int i = 0; i < 4; ++ i) 
     
    6362 
    6463                maximum = max(maximum, intensity); 
    65                 average += (0.25f * log(1e-5f + intensity)); 
     64                average += log(1e-5f + intensity); 
    6665        } 
    6766 
    68         average = exp(average); 
     67        average = exp(average * 0.25f); 
    6968 
    70         return tex2D(colors, IN.texCoord.xy); 
     69        float4 hcols = cols[0] + cols[1] + cols[2] + cols[3]; 
     70 
     71        return hcols * 0.25f; 
     72        //return float4(average, maximum, 0.0f, cols[0].w); 
    7173 
    7274        // Output the luminance to the render target 
    73         return float4(average, maximum, 0.0f, 1.0f); 
     75        //return float4(average, maximum, 0.0f, 1.0f); 
    7476} 
    7577     
    7678 
    77 pixel ToneMap(fragment IN, 
     79pixel ToneMap(frag IN, 
    7880                          uniform sampler2D colors, 
    7981                          uniform float imageKey,  
     
    8284{ 
    8385        pixel OUT; 
    84         float4 color = tex2D(colors, IN.texCoord.xy); 
     86        float4 color = tex2D(colors, IN.texCoord); 
    8587 
    8688        const float pixLum = 0.2125f * color.x + 0.7154f * color.y + 0.0721f * color.z; 
    8789         
     90        // obtain new image key from highest mipmap level 
     91        float logLumScaled = tex2Dlod(colors, float4(.5f, .5f, 0, 99)).w; 
     92 
     93        float logLumRange = MAXLOGLUM + MINLOGLUM; 
     94        //float logLumOffset = MINLOGLUM * logLumRange; 
     95        float logLum = logLumScaled * logLumRange - MINLOGLUM; 
     96 
     97        float newImageKey = exp(logLum); 
     98 
    8899        // adjust to middle gray 
    89         const float lum = middleGrey * pixLum / imageKey; 
     100        const float lum = middleGrey * pixLum / newImageKey; 
    90101          
    91102        // map to range and calc burnout 
Note: See TracChangeset for help on using the changeset viewer.