Bloom pass.

This commit is contained in:
Lubos Lenco 2016-04-01 01:48:18 +02:00
parent 35ddb29f8a
commit 804d3c9400
7 changed files with 136 additions and 14 deletions

View file

@ -0,0 +1,16 @@
{
"material_resources": [
{
"contexts": [
{
"bind_constants": [],
"bind_textures": [
],
"id": "bloom_pass"
}
],
"id": "bloom_material",
"shader": "bloom_pass/bloom_pass"
}
]
}

View file

@ -0,0 +1,22 @@
#version 450
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D tex;
in vec2 texCoord;
void main() {
vec4 col = texture(tex, texCoord);
float brightness = dot(col.rgb, vec3(0.2126, 0.7152, 0.0722));
if (brightness > 0.99) {
gl_FragColor = vec4(col.rgb, 1.0);
return;
}
gl_FragColor = vec4(0.0);
// gl_FragColor = col;
}

View file

@ -0,0 +1,33 @@
{
"contexts": [
{
"id": "bloom_pass",
"params": [
{
"id": "depth_write",
"value": "true"
},
{
"id": "compare_mode",
"value": "always"
},
{
"id": "cull_mode",
"value": "none"
},
{
"id": "blend_source",
"value": "blend_one"
},
{
"id": "blend_destination",
"value": "blend_zero"
}
],
"links": [],
"texture_params": [],
"vertex_shader": "bloom_pass.vert.glsl",
"fragment_shader": "bloom_pass.frag.glsl"
}
]
}

View file

@ -0,0 +1,18 @@
#version 450
#ifdef GL_ES
precision highp float;
#endif
in vec2 pos;
out vec2 texCoord;
const vec2 madd = vec2(0.5, 0.5);
void main() {
// Scale vertex attribute to [0-1] range
texCoord = pos.xy * madd + madd;
gl_Position = vec4(pos.xy, 0.0, 1.0);
}

View file

@ -9,9 +9,26 @@ uniform vec2 dir;
in vec2 texCoord;
const float weight[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
void main() {
vec2 step = dir / vec2(400, 300);
// vec2 step = dir / vec2(800, 600);
vec3 result = texture(tex, texCoord).rgb * weight[0];
result += texture(tex, texCoord + step * 1).rgb * weight[1];
result += texture(tex, texCoord - step * 1).rgb * weight[1];
result += texture(tex, texCoord + step * 2).rgb * weight[2];
result += texture(tex, texCoord - step * 2).rgb * weight[2];
result += texture(tex, texCoord + step * 3).rgb * weight[3];
result += texture(tex, texCoord - step * 3).rgb * weight[3];
result += texture(tex, texCoord + step * 4).rgb * weight[4];
result += texture(tex, texCoord - step * 4).rgb * weight[4];
gl_FragColor = vec4(vec3(result), 1.0);
/*
float res = texture( tex, texCoord + (step * 4.0) ).r;
res += texture( tex, texCoord + (step * 3.0) ).r;
res += texture( tex, texCoord + (step * 2.0) ).r;
@ -23,6 +40,6 @@ void main() {
res += texture( tex, texCoord -(step * 4.0) ).r;
res /= 9.0;
gl_FragColor = vec4(vec3(res), 1.0);
gl_FragColor = vec4(vec3(res), 1.0);*/
// gl_FragColor = texture(tex, texCoord);
}

View file

@ -4,16 +4,28 @@
precision mediump float;
#endif
uniform sampler2D lightmap;
uniform sampler2D aomap;
uniform sampler2D tex;
uniform sampler2D tex2;
in vec2 texCoord;
const float exposure = 1.0;
const float gamma = 2.2;
void main() {
vec3 lcol = texture(lightmap, texCoord).rgb;
vec3 aocol = texture(aomap, texCoord).rgb;
vec3 col = texture(tex, texCoord).rgb;
vec3 col2 = texture(tex2, texCoord).rgb;
gl_FragColor = vec4(lcol * aocol, 1.0);
// gl_FragColor = vec4(aocol, 1.0);
// gl_FragColor = vec4(lcol, 1.0);
// // Additive blending
col += col2;
// // Tone mapping
// vec3 result = vec3(1.0) - exp(-col * exposure);
// // Gamma correction
// result = pow(result, vec3(1.0 / gamma));
// gl_FragColor = vec4(result, 1.0f);
gl_FragColor = vec4(col, 1.0);
}

View file

@ -43,13 +43,17 @@ os.chdir('../dof_pass')
make_resources.make('dof_pass.shader.json')
make_variants.make('dof_pass.shader.json')
os.chdir('../ssr_pass')
make_resources.make('ssr_pass.shader.json')
make_variants.make('ssr_pass.shader.json')
os.chdir('../bloom_pass')
make_resources.make('bloom_pass.shader.json')
make_variants.make('bloom_pass.shader.json')
# os.chdir('../combine_pass')
# make_resources.make('combine_pass.shader.json')
# make_variants.make('combine_pass.shader.json')
# os.chdir('../ssr_pass')
# make_resources.make('ssr_pass.shader.json')
# make_variants.make('ssr_pass.shader.json')
os.chdir('../combine_pass')
make_resources.make('combine_pass.shader.json')
make_variants.make('combine_pass.shader.json')
# os.chdir('../pt_trace_pass')
# make_resources.make('pt_trace_pass.shader.json')