shadertoy地址
Buffer pass bloom (shadertoy.com)
shadertoy代码
#define colorRange 24.0
vec3 jodieReinhardTonemap(vec3 c){
float l = dot(c, vec3(0.2126, 0.7152, 0.0722));
vec3 tc = c / (c + 1.0);
return mix(c / (l + 1.0), tc, tc);
}
vec3 bloomTile(float lod, vec2 offset, vec2 uv){
return texture(iChannel1, uv * exp2(-lod) + offset).rgb;
}
vec3 getBloom(vec2 uv){
vec3 blur = vec3(0.0);
blur = pow(bloomTile(2., vec2(0.0,0.0), uv),vec3(2.2)) + blur;
blur = pow(bloomTile(3., vec2(0.3,0.0), uv),vec3(2.2)) * 1.3 + blur;
blur = pow(bloomTile(4., vec2(0.0,0.3), uv),vec3(2.2)) * 1.6 + blur;
blur = pow(bloomTile(5., vec2(0.1,0.3), uv),vec3(2.2)) * 1.9 + blur;
blur = pow(bloomTile(6., vec2(0.2,0.3), uv),vec3(2.2)) * 2.2 + blur;
return blur * colorRange;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;
vec3 color = pow(texture(iChannel0, uv).rgb * colorRange, vec3(2.2));
color = pow(color, vec3(2.2));
color += pow(getBloom(uv), vec3(2.2));
color = pow(color, vec3(1.0 / 2.2));
color = jodieReinhardTonemap(color);
fragColor = vec4(color,1.0);
}
creator 代码
CCEffect %{
techniques:
-
passes:
-
vert: sprite-vs:vert
frag: sprite-fs:frag
depthStencilState:
depthTest: false
depthWrite: false
blendState:
targets:
-
blend: true
blendSrc: src_alpha
blendDst: one_minus_src_alpha
blendDstAlpha: one_minus_src_alpha
rasterizerState:
cullMode: none
properties:
-
-
}%
CCProgram sprite-vs %{
precision highp float;
#include
in vec3 a_position;
in vec2 a_texCoord;
in vec4 a_color;
out vec4 v_color;
out vec2 v_uv0;
vec4 vert () {
vec4 pos = vec4(a_position, 1);
pos = cc_matViewProj * pos;
v_uv0 = a_texCoord;
v_color = a_color;
return pos;
}
}%
CCProgram sprite-fs %{
#include
precision highp float;
in vec4 v_color;
in vec2 v_uv0;
#define colorRange 24.0
vec3 jodieReinhardTonemap(vec3 c){
float l = dot(c, vec3(0.2126, 0.7152, 0.0722));
vec3 tc = c / (c + 1.0);
return mix(c / (l + 1.0), tc, tc);
}
vec3 bloomTile(float lod, vec2 offset, vec2 uv){
return texture(cc_spriteTexture, uv * exp2(-lod) + offset).rgb;
}
uniform Properties {
vec4 iResolution;
};
vec3 getBloom(vec2 uv){
vec3 blur = vec3(0.0);
blur = pow(bloomTile(2., vec2(0.0,0.0), uv),vec3(2.2)) + blur;
blur = pow(bloomTile(3., vec2(0.3,0.0), uv),vec3(2.2)) * 1.3 + blur;
blur = pow(bloomTile(4., vec2(0.0,0.3), uv),vec3(2.2)) * 1.6 + blur;
blur = pow(bloomTile(5., vec2(0.1,0.3), uv),vec3(2.2)) * 1.9 + blur;
blur = pow(bloomTile(6., vec2(0.2,0.3), uv),vec3(2.2)) * 2.2 + blur;
return blur * colorRange;
}
vec4 frag () {
// o *= texture(cc_spriteTexture, v_uv0)*v_color;
vec3 color = pow(texture(cc_spriteTexture, v_uv0).rgb * colorRange, vec3(2.2));
color = pow(color, vec3(2.2));
color += pow(getBloom(v_uv0), vec3(2.2));
color = pow(color, vec3(1.0 / 2.2));
color = jodieReinhardTonemap(color);
vec4 o = vec4(color,1.0);
return o;
}
}%
bloom.zip (881 字节)
creator 效果

请各位大神帮忙看下。谢谢。