1234567891011121314151617181920212223242526272829303132333435 |
- #ifdef GL_ES
- precision highp float;
- #endif
- uniform sampler2D textureSampler;
- uniform sampler2D lightScatteringSampler;
- uniform float decay;
- uniform float exposure;
- uniform float weight;
- uniform float density;
- uniform vec2 meshPositionOnScreen;
- varying vec2 vUV;
- void main(void) {
- vec2 tc = vUV;
- vec2 deltaTexCoord = (tc - meshPositionOnScreen.xy);
- deltaTexCoord *= 1.0 / float(NUM_SAMPLES) * density;
- float illuminationDecay = 1.0;
- vec4 color = texture2D(lightScatteringSampler, tc) * 0.4;
- for(int i=0; i < NUM_SAMPLES; i++) {
- tc -= deltaTexCoord;
- vec4 sample = texture2D(lightScatteringSampler, tc) * 0.4;
- sample *= illuminationDecay * weight;
- color += sample;
- illuminationDecay *= decay;
- }
- vec4 realColor = texture2D(textureSampler, vUV);
- gl_FragColor = ((vec4((vec3(color.r, color.g, color.b) * exposure), 1)) + (realColor * (1.5 - 0.4)));
- }
|