找回密码
 立即注册
搜索
查看: 4004|回复: 9

[青黑无脑不要游戏只求一战] 有些人非要跟我争辩什么SSAO有多难开发

[复制链接]
     
发表于 2011-11-16 23:40 | 显示全部楼层 |阅读模式
其实随随便便一个山寨游戏都能做出来,烂大街的东西
而且目前正在被HBAO和HDAO取代
下面这是我用了2天时间随便搞的
左边开启SSAO,右边未开启SSAO

   
SSAO像素着色器代码:
  1. #version 110
  2. #extension GL_ARB_texture_rectangle : enable
  3. uniform vec4 SSAOSet;
  4. uniform sampler2DRect SSAOTex;
  5. float readDepth( in vec2 coord ) {
  6.     return SSAOSet.z/( 1.0- texture2DRect( SSAOTex, coord ).x * ( SSAOSet.w - SSAOSet.z ) /SSAOSet.w);   
  7. }
  8. float cDepths( in float depth1, in float depth2, in float depthm ,in float bais)
  9. {
  10.     float aoo= min(1.0,max(0.0,-(depth1+depth2-depthm*2.0)-0.5));
  11.     aoo*=min(1.0,max(0.0,3.0*bais-abs(depth1-depth2)));
  12.     return aoo;
  13. }
  14. void main(void)
  15. {   
  16.     vec2 texCoord=gl_FragCoord.xy;
  17.     float depth = readDepth( texCoord );
  18.     float depthMAX=SSAOSet.z/( 1.0- ( SSAOSet.w - SSAOSet.z ) /SSAOSet.w);   
  19.     float pw = 1.0 ;
  20.     float ph = 1.0 ;
  21.    
  22.     float aoscale=1.0;
  23.     float dp1;
  24.     float dp2;
  25.     float aod = 0.0;
  26.     float dpbais = 2.0;
  27.    
  28.    
  29.     dp1=readDepth( vec2(texCoord.x+pw,texCoord.y+ph));
  30.     dp2=readDepth( vec2(texCoord.x-pw,texCoord.y-ph));
  31.     aod+=cDepths(dp1,dp2,depth,dpbais);
  32.    
  33.     dp1=readDepth( vec2(texCoord.x-pw,texCoord.y+ph));
  34.     dp2=readDepth( vec2(texCoord.x+pw,texCoord.y-ph));
  35.     aod+=cDepths(dp1,dp2,depth,dpbais);
  36.    
  37.     dp1=readDepth( vec2(texCoord.x+pw,texCoord.y));
  38.     dp2=readDepth( vec2(texCoord.x-pw,texCoord.y));
  39.     aod+=cDepths(dp1,dp2,depth,dpbais);
  40.    
  41.     dp1=readDepth( vec2(texCoord.x,texCoord.y+ph));
  42.     dp2=readDepth( vec2(texCoord.x,texCoord.y-ph));
  43.     aod+=cDepths(dp1,dp2,depth,dpbais);
  44.    
  45.     pw*=2.0;
  46.     ph*=2.0;
  47.     dpbais+=1.0;
  48.     aoscale*=1.15;
  49.    
  50.     dp1=readDepth( vec2(texCoord.x+pw,texCoord.y+ph));
  51.     dp2=readDepth( vec2(texCoord.x-pw,texCoord.y-ph));
  52.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  53.    
  54.     dp1=readDepth( vec2(texCoord.x-pw,texCoord.y+ph));
  55.     dp2=readDepth( vec2(texCoord.x+pw,texCoord.y-ph));
  56.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  57.     dp1=readDepth( vec2(texCoord.x+pw,texCoord.y));
  58.     dp2=readDepth( vec2(texCoord.x-pw,texCoord.y));
  59.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  60.    
  61.     dp1=readDepth( vec2(texCoord.x,texCoord.y+ph));
  62.     dp2=readDepth( vec2(texCoord.x,texCoord.y-ph));
  63.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  64.    
  65.     pw*=2.0;
  66.     ph*=2.0;
  67.     dpbais+=1.0;
  68.     aoscale*=1.15;
  69.    
  70.     dp1=readDepth( vec2(texCoord.x+pw,texCoord.y+ph));
  71.     dp2=readDepth( vec2(texCoord.x-pw,texCoord.y-ph));
  72.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  73.    
  74.     dp1=readDepth( vec2(texCoord.x-pw,texCoord.y+ph));
  75.     dp2=readDepth( vec2(texCoord.x+pw,texCoord.y-ph));
  76.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  77.    
  78.     dp1=readDepth( vec2(texCoord.x+pw,texCoord.y));
  79.     dp2=readDepth( vec2(texCoord.x-pw,texCoord.y));
  80.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  81.    
  82.     dp1=readDepth( vec2(texCoord.x,texCoord.y+ph));
  83.     dp2=readDepth( vec2(texCoord.x,texCoord.y-ph));
  84.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  85.    
  86.     pw*=2.0;
  87.     ph*=2.0;
  88.     dpbais+=1.0;
  89.     aoscale*=1.15;
  90.    
  91.     dp1=readDepth( vec2(texCoord.x+pw,texCoord.y+ph));
  92.     dp2=readDepth( vec2(texCoord.x-pw,texCoord.y-ph));
  93.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  94.    
  95.     dp1=readDepth( vec2(texCoord.x-pw,texCoord.y+ph));
  96.     dp2=readDepth( vec2(texCoord.x+pw,texCoord.y-ph));
  97.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  98.     dp1=readDepth( vec2(texCoord.x+pw,texCoord.y));
  99.     dp2=readDepth( vec2(texCoord.x-pw,texCoord.y));
  100.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  101.    
  102.     dp1=readDepth( vec2(texCoord.x,texCoord.y+ph));
  103.     dp2=readDepth( vec2(texCoord.x,texCoord.y-ph));
  104.     aod+=cDepths(dp1,dp2,depth,dpbais)/aoscale;
  105.    
  106.     if(depthMAX*0.225<depth)
  107.     aod=0.0;
  108.     gl_FragColor = vec4(0.0,0.0,0.0,aod/16.0) ;
  109. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

     
发表于 2011-11-16 23:42 | 显示全部楼层
刷出图了....
回复

使用道具 举报

发表于 2011-11-17 01:37 | 显示全部楼层
oz巨巨万岁!!!
回复

使用道具 举报

发表于 2011-11-17 14:37 | 显示全部楼层
红叉*2
回复

使用道具 举报

     
发表于 2011-11-17 14:44 | 显示全部楼层
没看错吧搞这东西需要两天?lz一定是家里网速很慢下载vs用了一天半吧
回复

使用道具 举报

发表于 2011-11-17 14:47 | 显示全部楼层
引用第4楼itomakoto于2011-11-17 14:44发表的  :
没看错吧搞这东西需要两天?lz一定是家里网速很慢下载vs用了一天半吧
你做出来一个试试看
无论你是直接用深度渲染缓冲还是另外渲染一个Zpos浮点纹理都行
回复

使用道具 举报

头像被屏蔽
     
发表于 2011-11-17 14:53 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

头像被屏蔽
发表于 2011-11-17 14:57 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

头像被屏蔽
发表于 2011-11-17 16:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2011-11-17 21:39 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-13 14:50 , Processed in 0.091259 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表