downsample.shader
author Florian Boesch <pyalot@gmail.com>
Mon, 18 Apr 2011 12:02:34 +0000
changeset 2 05b6646eb1db
permissions -rw-r--r--
implemented better irradiance and more parameters
     1 /*
     2     :copyright: 2011 by Florian Boesch <pyalot@gmail.com>.
     3     :license: GNU AGPL3, see LICENSE for more details.
     4 */
     5 vertex:
     6     attribute vec3 position;
     7 
     8     void main(void) {
     9         gl_Position = vec4(position, 1.0);
    10     }
    11 
    12 fragment:
    13     uniform vec2 viewport;
    14     uniform mat4 inv_proj;
    15     uniform mat3 inv_view_rot;
    16     uniform samplerCube source;
    17 
    18     vec3 get_world_normal(vec2 pos, vec2 dims){
    19         vec2 frag_coord = pos/dims;
    20         frag_coord = (frag_coord-0.5)*2.0;
    21         vec4 device_normal = vec4(frag_coord, 0.0, 1.0);
    22         vec3 eye_normal = normalize((inv_proj * device_normal).xyz);
    23         vec3 world_normal = normalize(inv_view_rot*eye_normal);
    24         return world_normal;
    25     }
    26 
    27     vec4 sample(float xoff, float yoff){
    28         vec2 off = gl_FragCoord.xy*2.0+vec2(xoff, yoff);
    29         vec3 normal = get_world_normal(off, viewport*2.0);
    30         return textureCube(source, normal);
    31     }
    32 
    33     void main(void){
    34         vec4 color = (
    35             sample(-0.5, -0.5) +
    36             sample(-0.5, +0.5) +
    37             sample(+0.5, -0.5) +
    38             sample(+0.5, +0.5)
    39         ) * 0.25;
    40         gl_FragColor = vec4(color.rgb, 1.0);
    41     }