oz01 发表于 2011-11-16 23:40

有些人非要跟我争辩什么SSAO有多难开发

其实随随便便一个山寨游戏都能做出来,烂大街的东西
而且目前正在被HBAO和HDAO取代
下面这是我用了2天时间随便搞的
左边开启SSAO,右边未开启SSAO

   
SSAO像素着色器代码:
#version 110
#extension GL_ARB_texture_rectangle : enable
uniform vec4 SSAOSet;
uniform sampler2DRect SSAOTex;

float readDepth( in vec2 coord ) {
    return SSAOSet.z/( 1.0- texture2DRect( SSAOTex, coord ).x * ( SSAOSet.w - SSAOSet.z ) /SSAOSet.w);   
}


float cDepths( in float depth1, in float depth2, in float depthm ,in float bais)
{
    float aoo= min(1.0,max(0.0,-(depth1+depth2-depthm*2.0)-0.5));
    aoo*=min(1.0,max(0.0,3.0*bais-abs(depth1-depth2)));
    return aoo;
}
void main(void)
{   
    vec2 texCoord=gl_FragCoord.xy;
    float depth = readDepth( texCoord );
    float depthMAX=SSAOSet.z/( 1.0- ( SSAOSet.w - SSAOSet.z ) /SSAOSet.w);   
    float pw = 1.0 ;
    float ph = 1.0 ;


   
    float aoscale=1.0;
    float dp1;
    float dp2;
    float aod = 0.0;
    float dpbais = 2.0;
   
   
    dp1=readDepth( vec2(texCoord.x+pw,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x-pw,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais);
   
    dp1=readDepth( vec2(texCoord.x-pw,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x+pw,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais);
   
    dp1=readDepth( vec2(texCoord.x+pw,texCoord.y));
    dp2=readDepth( vec2(texCoord.x-pw,texCoord.y));
    aod+=cDepths(dp1,dp2,depth,dpbais);
   
    dp1=readDepth( vec2(texCoord.x,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais);


   
    pw*=2.0;
    ph*=2.0;
    dpbais+=1.0;
    aoscale*=1.15;
   
    dp1=readDepth( vec2(texCoord.x+pw,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x-pw,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    dp1=readDepth( vec2(texCoord.x-pw,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x+pw,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;

    dp1=readDepth( vec2(texCoord.x+pw,texCoord.y));
    dp2=readDepth( vec2(texCoord.x-pw,texCoord.y));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    dp1=readDepth( vec2(texCoord.x,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    pw*=2.0;
    ph*=2.0;
    dpbais+=1.0;
    aoscale*=1.15;
   
    dp1=readDepth( vec2(texCoord.x+pw,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x-pw,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    dp1=readDepth( vec2(texCoord.x-pw,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x+pw,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    dp1=readDepth( vec2(texCoord.x+pw,texCoord.y));
    dp2=readDepth( vec2(texCoord.x-pw,texCoord.y));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    dp1=readDepth( vec2(texCoord.x,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    pw*=2.0;
    ph*=2.0;
    dpbais+=1.0;
    aoscale*=1.15;
   
    dp1=readDepth( vec2(texCoord.x+pw,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x-pw,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    dp1=readDepth( vec2(texCoord.x-pw,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x+pw,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;

    dp1=readDepth( vec2(texCoord.x+pw,texCoord.y));
    dp2=readDepth( vec2(texCoord.x-pw,texCoord.y));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    dp1=readDepth( vec2(texCoord.x,texCoord.y+ph));
    dp2=readDepth( vec2(texCoord.x,texCoord.y-ph));
    aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
   
    if(depthMAX*0.225<depth)
    aod=0.0;
    gl_FragColor = vec4(0.0,0.0,0.0,aod/16.0) ;
}

chri 发表于 2011-11-16 23:42

刷出图了....

Yurita 发表于 2011-11-17 01:37

oz巨巨万岁!!!

roadcross 发表于 2011-11-17 14:37

红叉*2

itomakoto 发表于 2011-11-17 14:44

没看错吧搞这东西需要两天?lz一定是家里网速很慢下载vs用了一天半吧

roadcross 发表于 2011-11-17 14:47

引用第4楼itomakoto于2011-11-17 14:44发表的:
没看错吧搞这东西需要两天?lz一定是家里网速很慢下载vs用了一天半吧 images/back.gif

你做出来一个试试看
无论你是直接用深度渲染缓冲还是另外渲染一个Zpos浮点纹理都行

itomakoto 发表于 2011-11-17 14:53

roadcross 发表于 2011-11-17 14:57

PIN 发表于 2011-11-17 16:28

parsifal 发表于 2011-11-17 21:39

页: [1]
查看完整版本: 有些人非要跟我争辩什么SSAO有多难开发