圣者
精华
|
战斗力 鹅
|
回帖 0
注册时间 2003-11-24
|
其实随随便便一个山寨游戏都能做出来,烂大街的东西
而且目前正在被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) ;
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|