Changeset 2968


Ignore:
Timestamp:
09/24/08 11:08:13 (16 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling/src
Files:
11 edited

Legend:

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

    r2967 r2968  
    9797static CGparameter sLightDirParam; 
    9898static CGparameter sLightDirShadowParam; 
    99  
    10099static CGparameter sImageKeyParam; 
     100static CGparameter sWhiteLumParam; 
    101101 
    102102//#define USE_3D_SSAO 
     
    285285                sColorsTexDeferredParam = cgGetNamedParameter(sCgDeferredProgram, "colors");   
    286286                sNormalsTexDeferredParam = cgGetNamedParameter(sCgDeferredProgram, "normals"); 
     287                 
    287288                sLightDirParam = cgGetNamedParameter(sCgDeferredProgram, "lightDir"); 
    288289        } 
     
    407408 
    408409                sImageKeyParam = cgGetNamedParameter(sCgAntiAliasingProgram, "imageKey"); 
     410                sWhiteLumParam = cgGetNamedParameter(sCgAntiAliasingProgram, "whiteLum"); 
    409411 
    410412                sColorsTexAntiAliasingParam = cgGetNamedParameter(sCgAntiAliasingProgram, "colors");   
     
    438440                sNoiseTexShadowParam = cgGetNamedParameter(sCgDeferredShadowProgram, "noiseTexture"); 
    439441                sSamplesShadowParam = cgGetNamedParameter(sCgDeferredShadowProgram, "samples"); 
     442 
    440443                sLightDirShadowParam = cgGetNamedParameter(sCgDeferredShadowProgram, "lightDir"); 
    441444 
     
    667670void DeferredRenderer::AntiAliasing(FrameBufferObject *fbo) 
    668671{ 
    669         const float imageKey = ToneMapper().CalcImageKey(fbo->GetColorBuffer(colorBufferIdx)); 
    670  
    671         GLuint colorsTex = fbo->GetColorBuffer(colorBufferIdx)->GetTexture(); 
     672        ColorBufferObject *colorBuffer = fbo->GetColorBuffer(colorBufferIdx); 
     673 
     674        // we assume that we have a floating point rgba texture 
     675        float *pixels = (float *)colorBuffer->ReadTexture(); 
     676 
     677        const int w = colorBuffer->GetHeight(); 
     678        const int h = colorBuffer->GetWidth(); 
     679 
     680        const float imageKey = ToneMapper().CalcImageKey(pixels, w, h); 
     681        const float whiteLum = 0.5f * ToneMapper().CalcMaxLuminance(pixels, w, h); 
     682 
     683        delete [] pixels; 
     684 
     685        GLuint colorsTex = colorBuffer->GetTexture(); 
    672686        GLuint normalsTex = fbo->GetColorBuffer(2)->GetTexture(); 
    673687         
     
    684698 
    685699        cgGLSetParameter1f(sImageKeyParam, imageKey); 
     700        cgGLSetParameter1f(sWhiteLumParam, whiteLum); 
     701 
    686702 
    687703        glColor3f(1.0f, 1.0f, 1.0f); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Light.h

    r2954 r2968  
    1616public: 
    1717         
    18         DirectionalLight(const Vector3 &dir, const RgbaColor &col): mColor(col) { mDirection = Normalize(dir); } 
     18        DirectionalLight(const Vector3 &dir, const RgbaColor &amb, const RgbaColor &dif):  
     19        mAmbient(amb), mDiffuse(dif) { mDirection = Normalize(dir); } 
     20 
     21        void SetDirection(const Vector3 &dir) { mDirection = dir; } 
     22         
     23        void SetDiffuseColor(const RgbaColor &dif) { mDiffuse = dif; } 
     24         
     25        void SetAmbientColor(const RgbaColor &amb) { mAmbient = amb; } 
    1926 
    2027        Vector3 GetDirection() const { return mDirection; } 
    21         void SetDirection(const Vector3 &dir) { mDirection = dir; } 
    22  
    23         RgbaColor GetColor() const { return mColor; } 
     28        RgbaColor GetDiffuseColor() const { return mDiffuse; } 
     29        RgbaColor GetAmbientColor() const { return mAmbient; } 
    2430 
    2531 
     
    2733 
    2834        Vector3 mDirection; 
    29         RgbaColor mColor; 
     35 
     36        RgbaColor mDiffuse; 
     37        RgbaColor mAmbient; 
    3038}; 
    3139 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Material.h

    r2960 r2968  
    8989        bool mAlphaTestEnabled; 
    9090        bool mCullFaceEnabled; 
    91         /// the assciated texture 
     91        /// the associated texture 
    9292        Texture *mTexture; 
    9393}; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SkyPreetham.cpp

    r2967 r2968  
    284284        // downscale ambient color 
    285285        //ambient *= 5e-5f; 
    286         ambient *= 2e-5f; 
     286        //ambient *= 2e-3f; 
    287287 
    288288        // simulate the sun intensity by modulating the ambient term. 
    289289        //ambient *= (1.0f - 0.9f * DotProd(sunDir, Vector3::UNIT_Z())); 
    290         ambient += Vector3(0.2f); 
     290        //ambient += Vector3(0.2f); 
    291291 
    292292        Vector3 num; 
     
    321321 
    322322        // Calculate final sun diffuse color. 
    323         diffuse = color * 1.7e-4f; 
    324         //diffuse = color; 
    325  
    326         cout << "diffuse: " << Magnitude(diffuse) << " ambient: " << Magnitude(ambient) << endl; 
    327 } 
     323        //diffuse = color * 2e-3f; 
     324        diffuse = color; 
     325 
     326        //cout << "diffuse: " << Magnitude(diffuse) << " ambient: " << Magnitude(ambient) << endl; 
     327} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ToneMapper.cpp

    r2967 r2968  
    1515 
    1616 
    17 float ToneMapper::CalcImageKey(ColorBufferObject *colorBuffer) const 
     17float ToneMapper::CalcImageKey(float *pixels, int w, int h) const 
    1818{ 
    1919        float totalLum = .0f; 
    2020 
    21         // we assume that we have a floating point rgba texture 
    22         float *pixels = (float *)colorBuffer->ReadTexture(); 
     21        int size = w * h * 4; 
    2322 
    24         const int w = colorBuffer->GetHeight(); 
    25         const int h = colorBuffer->GetWidth(); 
     23        // get avg log luminance 
     24        for (int i = 0; i < size; i += 4) 
     25        { 
     26                float r = pixels[i + 0]; 
     27                float g = pixels[i + 1]; 
     28                float b = pixels[i + 2]; 
    2629 
    27         // Get full scene luminance 
    28         for (int i = 0; i < h; ++ i) 
     30                float pixLum = 0.2125f * r + 0.7154f * g + 0.0721f * b; 
     31 
     32                totalLum += log(pixLum + 1e-6f); 
     33        } 
     34 
     35        const float key = exp(totalLum / (float)(w * h)); 
     36 
     37        static float previousKey = key; 
     38        const float factor = 1.0f; 
     39 
     40        const float imageKey = key;// * factor + previousKey * (1.0f - factor); 
     41        previousKey = imageKey; 
     42         
     43        cout << "key: " << key << endl; 
     44 
     45        return imageKey; 
     46} 
     47 
     48 
     49float ToneMapper::CalcMaxLuminance(float *pixels, int w, int h) const 
     50{ 
     51        float maxLum = 1e-6f; 
     52 
     53        int size = w * h * 4; 
     54 
     55        for (int i = 0; i < size; i += 4) 
     56        { 
     57                float r = pixels[i + 0]; 
     58                float g = pixels[i + 1]; 
     59                float b = pixels[i + 2]; 
     60 
     61                float pixLum = 0.2125f * r + 0.7154f * g + 0.0721f * b; 
     62 
     63                if (pixLum > maxLum) 
     64                        maxLum = pixLum; 
     65        } 
     66 
     67/*      for (int i = 0; i < h; ++ i) 
    2968        { 
    3069                for (int j = 0; j < w; ++ j) 
     
    3675                        float b = pixels[4 * idx + 2]; 
    3776 
    38                         float pixLum = 0.2125f * r + 0.7154f * g + 0.0721f * b; 
    39  
    40                         totalLum += log(pixLum + 1e-6f); 
     77                        if (pixLum > maxLum) 
     78                                maxLum = pixLum; 
    4179                } 
    4280        } 
    43  
    44         //cout << "totalLum: " << totalLum <<  endl; 
    45  
    46         const float key = exp(totalLum / (float)(w * h)); 
    47  
    48         static float previousKey = key; 
    49  
    50         //float delta = imageKey - mPreviousImageKey; 
    51         // Constaint change for temporal coherence 
    52         //const float maxChange = 5-e2f; 
    53         //Clamp(delta, -maxChange, maxChange); 
    54  
    55         const float factor = 1.0f; 
    56  
    57         const float imageKey = key;// * factor + previousKey * (1.0f - factor); 
    58         previousKey = imageKey; 
    59          
    60         cout << "key: " << key << endl; 
    61  
    62         delete [] pixels; 
    63  
    64         return imageKey; 
     81*/ 
     82        return maxLum; 
    6583} 
    6684 
     85 
    6786} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ToneMapper.h

    r2966 r2968  
    77{ 
    88 
    9 class ColorBufferObject; 
    109 
    1110/** Class representing a tone mapping algorithm 
     
    1817        /** Caculates average log lumincance. 
    1918        */ 
    20         float CalcImageKey(ColorBufferObject *colorBuffer) const; 
     19        float CalcImageKey(float *pixels, int w, int h) const; 
     20 
     21        float CalcMaxLuminance(float *pixels, int w, int h) const; 
    2122}; 
    2223 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp

    r2967 r2968  
    377377 
    378378        // create a new light 
    379         light = new DirectionalLight(lightDir, RgbaColor(1, 1, 1, 1)); 
     379        light = new DirectionalLight(lightDir, RgbaColor(1, 1, 1, 1), RgbaColor(1, 1, 1, 1)); 
    380380 
    381381 
     
    576576                sMaxDepthParamTex = cgGetNamedParameter(RenderState::sCgMrtFragmentTexProgram, "maxDepth"); 
    577577                RenderState::sTexParam = cgGetNamedParameter(RenderState::sCgMrtFragmentTexProgram, "tex"); 
    578  
     578         
    579579                cgGLSetParameter1f(sMaxDepthParamTex, MAX_DEPTH_CONST / farDist); 
    580580        } 
     
    595595 
    596596                sMaxDepthParam = cgGetNamedParameter(RenderState::sCgMrtFragmentProgram, "maxDepth"); 
     597                 
    597598                cgGLSetParameter1f(sMaxDepthParam, MAX_DEPTH_CONST / farDist); 
    598599        } 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaderenv.h

    r2967 r2968  
    3535//-- tone mapping 
    3636 
     37//#define MIDDLE_GRAY 0.5f 
    3738//#define MIDDLE_GRAY 0.72f 
    38 //#define MIDDLE_GRAY 0.36f 
    39 #define MIDDLE_GRAY 0.18f 
     39#define MIDDLE_GRAY 0.36f 
     40//#define MIDDLE_GRAY 0.18f 
     41//#define MIDDLE_GRAY 0.18f 
    4042 
    4143 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/antialiasing.cg

    r2967 r2968  
    2121 
    2222 
    23 float3 ToneMap(const float imageKey, float3 color) 
     23float3 ToneMap(float imageKey, float whiteLum, float3 color) 
    2424{ 
    2525        float3 outCol; 
     
    2929        const float lum = MIDDLE_GRAY * pixLum / imageKey; 
    3030          
    31     // map to range 
    32         const float scaledLum = lum / (1.0f + lum); 
    33  
    34     /*outCol *= MIDDLE_GRAY / (vLum + 1e-3f); 
    35     outCol *= (1.0f + vColor / LUM_WHITE); 
    36         outCol /= (1.0f + vColor);*/ 
     31        // map to range and calc burnout 
     32        const float burnedLum = lum * (1.0f + lum / whiteLum * whiteLum) / (1.0f + lum); 
    3733         
    38         outCol = color * scaledLum; 
     34        outCol = color * burnedLum / pixLum; 
    3935        //vColor.rgb += 0.6f * vBloom; 
    4036         
     
    4238} 
    4339 
     40 
    4441float4 main(v2p IN,  
    4542                        uniform sampler2D colors, 
    4643                        uniform sampler2D normals, 
    47                         uniform float imageKey 
     44                        uniform float imageKey, 
     45                        uniform float whiteLum 
    4846                        ): COLOR 
    4947{ 
     
    115113 
    116114        //return float4(w); 
    117         col.xyz = ToneMap(imageKey, col.xyz); 
     115        col.xyz = ToneMap(imageKey, whiteLum, col.xyz); 
    118116 
    119117        return col; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/deferred.cg

    r2967 r2968  
    3737                         float3 lightDir) 
    3838{ 
    39         /* 
    40         float4 lightDir2 = float4(-0.5f, 0.5f, 0.4f, 0.0f); 
    41         float3 light2 = normalize(lightDir2.xyz); 
    42         float diffuseLight2 = saturate(dot(normal, light2)); 
    43         */ 
    4439        // diffuse intensity 
    4540        const float angle = saturate(dot(normal, lightDir));  
     
    5146        const float4 ambient = glstate.light[0].ambient; 
    5247         
    53         return (emmisive < 0.95) ? (ambient + diffuse) * color : color; 
     48        float4 outColor; 
    5449 
    55         //return (saturate(((ambient + diffuse))) * (1.0f - emmisive) + emmisive) * color; 
     50        if (emmisive > 1.5) outColor = color; 
     51        //else if (emmisive > 0.95)     outColor = color * lightDiffuse; 
     52        else 
     53                outColor = (ambient + diffuse) * color; 
     54 
     55        return outColor; 
    5656        //return saturate((((ambient + diffuse)) * (1.0f - emmisive) + emmisive) * color); 
    5757} 
     
    8282         
    8383        OUT.color = col; 
     84        //OUT.color = float4(100.0, 1, 1, 0); 
    8485        OUT.color.w = color.w; 
    8586 
     
    123124        } 
    124125 
    125         total_d /= (float)NUM_SAMPLES; 
     126        total_d /= (float)NUM_PCF_TABS; 
    126127 
    127128        return total_d; 
     
    182183         
    183184        // base lighting 
    184         OUT.color = (emmisive < 0.95) ? (ambient + diffuse) * color : color; 
     185        OUT.color = (emmisive > 1.5f) ? color: (ambient + diffuse) * color; 
    185186 
    186187        // also write out depth component 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/sky_preetham.cg

    r2967 r2968  
    2424        float3 normal: TEXCOORD2; 
    2525        float4 mypos: TEXCOORD3; 
     26        float4 color2: TEXCOORD4; 
    2627}; 
    27  
    2828 
    2929 
     
    3434  float4 norm: COLOR2; 
    3535}; 
     36 
    3637 
    3738// fragment input 
     
    4647        float3 normal: TEXCOORD2; 
    4748        float4 mypos: TEXCOORD3; 
     49        float4 color2: TEXCOORD4; 
    4850}; 
    4951//-------------------------------------------------------------------------------------- 
     
    9294        OUT.color = float4(hcol, 1.0); 
    9395 
    94         //OUT.color.rgb *= 1e-2f;  
     96        //OUT.color.rgb *= 2e-3f;  
    9597        //OUT.color.rgb *= 2e-5f;  
    9698 
    97         //OUT.worldPos = mul(glstate.matrix.inverse.projection, OUT.position); 
     99        OUT.color2 = OUT.color; 
    98100        OUT.worldPos = mul(ModelView, IN.position); 
    99101 
     
    109111        pixel pix; 
    110112 
    111         pix.col = IN.color; 
     113        pix.col = IN.color2; 
    112114        pix.pos = IN.worldPos * 1e20;// * maxDepth; 
    113115 
    114116        pix.norm.xyz = IN.normal; 
    115117         
    116         // hack: squeeze some information about the ambient term into the target 
    117         pix.norm.w = 1; 
     118        // hack: squeeze some information about an ambient term into the target 
     119        pix.norm.w = 2; 
    118120        pix.pos.w = IN.mypos.w; 
    119121         
Note: See TracChangeset for help on using the changeset viewer.