• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#import "Common/ShaderLib/MultiSample.glsllib"
2
3uniform COLORTEXTURE m_Texture;
4uniform DEPTHTEXTURE m_DepthTexture;
5uniform sampler2D m_SSAOMap;
6uniform vec2 g_Resolution;
7uniform bool m_UseOnlyAo;
8uniform bool m_UseAo;
9uniform float m_XScale;
10uniform float m_YScale;
11uniform vec2 m_FrustumNearFar;
12
13in vec2 texCoord;
14
15vec4 getResult(vec4 color){
16
17    #ifdef USE_ONLY_AO
18        return color;
19    #endif
20    #ifdef USE_AO
21        return getColor(m_Texture,texCoord)* color;
22    #endif
23
24    return getColor(m_Texture,texCoord);
25
26}
27
28float readDepth(in vec2 uv){
29    float depthv =fetchTextureSample(m_DepthTexture,uv,0).r;
30    return (2.0 * m_FrustumNearFar.x) / (m_FrustumNearFar.y + m_FrustumNearFar.x - depthv* (m_FrustumNearFar.y-m_FrustumNearFar.x));
31}
32
33 const float epsilon = 0.005;
34
35
36/*
37    const int kernelSize=7;
38
39    vec4 bilateralFilter() {
40        vec4 color = vec4(0.0);
41
42        vec2 sample;
43        float sum = 0.0;
44        float coefZ;
45        float Zp = readDepth(texCoord);
46
47        for(int i = -(kernelSize-1); i <= (kernelSize-1); i+=2) {
48            for(int j = -(kernelSize-1); j <= (kernelSize-1); j+=2) {
49                  sample = texCoord + vec2(i,j) / g_Resolution;
50                float zTmp =readDepth(sample);
51                coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
52                sum += coefZ;
53
54                color += coefZ * texture2D(m_SSAOMap,sample);
55
56            }
57        }
58
59        return color / sum;
60    }
61*/
62
63    vec4 convolutionFilter(){
64           vec4 sum = vec4(0.0);
65
66            float x = texCoord.x;
67            float y = texCoord.y;
68
69            float xScale = m_XScale;
70            float yScale = m_YScale;
71
72            float zsum = 1.0;
73        float Zp =readDepth(texCoord);
74
75
76        vec2 sample = vec2(x - 2.0 * xScale, y - 2.0 * yScale);
77        float zTmp =readDepth(sample);
78        float coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
79        zsum += coefZ;
80        sum += coefZ* texture2D( m_SSAOMap, sample);
81
82        sample = vec2(x - 0.0 * xScale, y - 2.0 * yScale);
83        zTmp =readDepth(sample);
84        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
85        zsum += coefZ;
86        sum += coefZ* texture2D( m_SSAOMap, sample);
87
88        sample = vec2(x + 2.0 * xScale, y - 2.0 * yScale);
89        zTmp =readDepth(sample);
90        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
91        zsum += coefZ;
92        sum += coefZ* texture2D( m_SSAOMap, sample);
93
94        sample = vec2(x - 1.0 * xScale, y - 1.0 * yScale);
95        zTmp =readDepth(sample);
96        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
97        zsum += coefZ;
98        sum += coefZ* texture2D( m_SSAOMap, sample);
99
100        sample = vec2(x + 1.0 * xScale, y - 1.0 * yScale);
101        zTmp =readDepth(sample);
102        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
103        zsum += coefZ;
104        sum += coefZ* texture2D( m_SSAOMap, sample);
105
106        sample = vec2(x - 2.0 * xScale, y - 0.0 * yScale);
107        zTmp =readDepth(sample);
108        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
109        zsum += coefZ;
110        sum += coefZ* texture2D( m_SSAOMap, sample);
111
112        sample = vec2(x + 2.0 * xScale, y - 0.0 * yScale);
113        zTmp =readDepth(sample);
114        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
115        zsum += coefZ;
116        sum += coefZ* texture2D( m_SSAOMap, sample);
117
118        sample = vec2(x - 1.0 * xScale, y + 1.0 * yScale);
119        zTmp =readDepth(sample);
120        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
121        zsum += coefZ;
122        sum += coefZ* texture2D( m_SSAOMap, sample);
123
124        sample = vec2(x + 1.0 * xScale, y + 1.0 * yScale);
125        zTmp =readDepth(sample);
126        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
127        zsum += coefZ;
128        sum += coefZ* texture2D( m_SSAOMap, sample);
129
130        sample = vec2(x - 2.0 * xScale, y + 2.0 * yScale);
131        zTmp =readDepth(sample);
132        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
133        zsum += coefZ;
134        sum += coefZ* texture2D( m_SSAOMap, sample);
135
136        sample = vec2(x - 0.0 * xScale, y + 2.0 * yScale);
137        zTmp =readDepth(sample);
138        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
139        zsum += coefZ;
140        sum += coefZ* texture2D( m_SSAOMap, sample);
141
142        sample = vec2(x + 2.0 * xScale, y + 2.0 * yScale);
143        zTmp =readDepth(sample);
144        coefZ = 1.0 / (epsilon + abs(Zp - zTmp));
145        zsum += coefZ;
146        sum += coefZ* texture2D( m_SSAOMap, sample);
147
148
149        return  sum / zsum;
150    }
151
152
153    void main(){
154        //  float depth =texture2D(m_DepthTexture,uv).r;
155
156       gl_FragColor=getResult(convolutionFilter());
157      // gl_FragColor=getResult(bilateralFilter());
158      //  gl_FragColor=getColor(m_SSAOMap,texCoord);
159
160    }