|
@@ -162,6 +162,51 @@ void main(){\n\
|
|
|
gl_Position=vVertex;\n\
|
|
|
fViewDir = vUV;\n\
|
|
|
}";
|
|
|
+
|
|
|
+#define LA_SHADER_LIB_FXAA \
|
|
|
+"#define DIFF_LUM_ABS_HOLD 0.0833 \n\
|
|
|
+#define DIFF_LUM_RES_HOLD 0.166\n\
|
|
|
+float luminance(vec3 col) {\n\
|
|
|
+ return dot(col, vec3(0.2126729f, 0.7151522f, 0.0721750f));\n\
|
|
|
+}\n\
|
|
|
+vec4 fxaa(in sampler2D tex, vec2 uv, vec2 texsize) {\n\
|
|
|
+ vec3 e = vec3(-1., 1., 0.);\n\
|
|
|
+ vec2 offuv = uv;\n\
|
|
|
+ vec3 colnw = texture(tex, uv + e.xy / texsize).rgb;\n\
|
|
|
+ vec3 coln = texture(tex, uv + e.zy / texsize).rgb;\n\
|
|
|
+ vec3 colne = texture(tex, uv + e.yy / texsize).rgb;\n\
|
|
|
+ vec3 colw = texture(tex, uv + e.xz / texsize).rgb;\n\
|
|
|
+ vec4 colm4 = texture(tex, uv + e.zz / texsize);\n\
|
|
|
+ vec3 colm = colm4.rgb;\n\
|
|
|
+ vec3 cole = texture(tex, uv + e.yz / texsize).rgb;\n\
|
|
|
+ vec3 colsw = texture(tex, uv + e.xx / texsize).rgb;\n\
|
|
|
+ vec3 cols = texture(tex, uv + e.zx / texsize).rgb;\n\
|
|
|
+ vec3 colse = texture(tex, uv + e.yx / texsize).rgb;\n\
|
|
|
+ float lnw = luminance(colnw), ln = luminance(coln), lne = luminance(colne),\n\
|
|
|
+ lw = luminance(colw), lm = luminance(colm), le = luminance(cole),\n\
|
|
|
+ lsw = luminance(colsw), ls = luminance(cols), lse = luminance(colse);\n\
|
|
|
+ float maxl = max(ln, max(ls, max(lw, max(le, lm))));\n\
|
|
|
+ float minl = min(ln, min(ls, min(lw, min(le, lm))));\n\
|
|
|
+ float diff = maxl - minl;\n\
|
|
|
+ if (diff < max(DIFF_LUM_ABS_HOLD, DIFF_LUM_RES_HOLD * maxl)) return colm4;\n\
|
|
|
+ float filterfactor = 0.;\n\
|
|
|
+ filterfactor += 2. * (ln + lw + ls + le) + lnw + lne + lsw + lse;\n\
|
|
|
+ filterfactor /= 12.;\n\
|
|
|
+ filterfactor = abs(filterfactor - lm);\n\
|
|
|
+ filterfactor = clamp(filterfactor / diff, 0., 1.);\n\
|
|
|
+ float blend = smoothstep(0., 1., filterfactor);\n\
|
|
|
+ blend *= blend;\n\
|
|
|
+ float hedge = 2.*(ln + ls - 2.*lm) + (lne + lse - 2.*le) + (lnw + lsw - 2.*lw);\n\
|
|
|
+ float vedge = 2.*(le + lw - 2.*lm) + (lne + lnw - 2.*ln) + (lse + lsw - 2.*ls);\n\
|
|
|
+ float ish = step(vedge, hedge);\n\
|
|
|
+ float psoff = ish >= 1.0 ? 1./texsize.y : 1./texsize.x;\n\
|
|
|
+ float pleft = ish >= 1.0 ? ln : le;\n\
|
|
|
+ float pright = ish >= 1.0 ? ls : lw;\n\
|
|
|
+ if (abs(pleft - lm) < abs(pright - lm)) psoff = -psoff;\n\
|
|
|
+ if (ish >= 1.0) { offuv.y += psoff * blend; }else{ offuv.x += psoff * blend; }\n\
|
|
|
+ return vec4(texture(tex, offuv).rgb,colm4.a); \n\
|
|
|
+}\n"
|
|
|
+
|
|
|
const char LA_RAY_FRAGMENT_SHADER[] = "#version 330\n\
|
|
|
uniform vec3 uViewDir;\n\
|
|
|
uniform vec3 uViewPos;\n\
|
|
@@ -169,14 +214,16 @@ uniform float uFOV;\n\
|
|
|
in vec3 fViewDir;\n\
|
|
|
uniform sampler2D TexColor;\n\
|
|
|
uniform sampler2D TexNormal;\n\
|
|
|
-uniform sampler2D TexGPos;\n\
|
|
|
-void main(){\n\
|
|
|
+uniform sampler2D TexGPos;\n"
|
|
|
+LA_SHADER_LIB_FXAA
|
|
|
+"void main(){\n\
|
|
|
float d=dot(uViewDir,normalize(fViewDir));\n\
|
|
|
float target=cos(uFOV/2.);\n\
|
|
|
vec4 color=vec4(1.,1.,1.,1.); float mul=0.;\n\
|
|
|
if(d<(target+0.005)&&d>target) mul=1.0;\n\
|
|
|
vec2 uv=gl_FragCoord.xy/textureSize(TexColor,0);\n\
|
|
|
- vec4 buffer_color=texture2D(TexColor,uv);\n\
|
|
|
+ vec4 buffer_color=fxaa(TexColor,uv,textureSize(TexColor,0));\n\
|
|
|
+ //vec4 buffer_color=texture2D(TexColor,uv);\n\
|
|
|
gl_FragColor = mul*color+buffer_color;\n\
|
|
|
}";
|
|
|
const char LA_SCENE_VERTEX_SHADER[] = "#version 330\n\
|