custommods

This commit is contained in:
samsonsin
2025-05-29 23:31:29 +02:00
committed by samsonsin
parent 29b5acd552
commit cec1be0c4f
799 changed files with 19536 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
vec3 GetN(int idx) {
if (idx == 230) return vec3(2.9114, 2.9497, 2.5845);
if (idx == 231) return vec3(0.18299, 0.42108, 1.3734);
if (idx == 232) return vec3(1.3456, 0.96521, 0.61722);
if (idx == 233) return vec3(3.1071, 3.1812, 2.3230);
if (idx == 234) return vec3(0.27105, 0.67693, 1.3164);
if (idx == 235) return vec3(1.9100, 1.8300, 1.4400);
if (idx == 236) return vec3(2.3757, 2.0847, 1.8453);
if (idx == 237) return vec3(0.15943, 0.14512, 0.13547);
return vec3(0.0);
}
vec3 GetK(int idx) {
if (idx == 230) return vec3(3.0893, 2.9318, 2.7670);
if (idx == 231) return vec3(3.4242, 2.3459, 1.7704);
if (idx == 232) return vec3(7.4746, 6.3995, 5.3031);
if (idx == 233) return vec3(3.3314, 3.3291, 3.1350);
if (idx == 234) return vec3(3.6092, 2.6248, 2.2921);
if (idx == 235) return vec3(3.5100, 3.4000, 3.1800);
if (idx == 236) return vec3(4.2655, 3.7153, 3.1365);
if (idx == 237) return vec3(3.9291, 3.1900, 2.3808);
return vec3(1.0);
}
vec3 ComplexFresnel(float fresnel, float f0) {
int metalidx = int(f0 * 255.0);
vec3 k = GetK(metalidx);
vec3 n = GetN(metalidx);
float invFresnel = 1.0 - fresnel;
vec3 k2 = k * k;
vec3 n2 = n * n;
float invFresnel2 = invFresnel * invFresnel;
vec3 rs_num = n2 + k2 - 2 * n * invFresnel + invFresnel2;
vec3 rs_den = n2 + k2 + 2 * n * invFresnel + invFresnel2;
vec3 rs = rs_num / rs_den;
vec3 rp_num = (n2 + k2) * invFresnel2 - 2 * n * invFresnel + 1;
vec3 rp_den = (n2 + k2) * invFresnel2 + 2 * n * invFresnel + 1;
vec3 rp = rp_num / rp_den;
vec3 fresnel3 = clamp(0.5 * (rs + rp), vec3(0.0), vec3(1.0));
fresnel3 *= fresnel3;
return fresnel3;
}

View File

@@ -0,0 +1,51 @@
vec3 nvec3(vec4 pos) {
return pos.xyz/pos.w;
}
vec4 nvec4(vec3 pos) {
return vec4(pos.xyz, 1.0);
}
float cdist(vec2 coord) {
return max(abs(coord.s-0.5) * 1.95, abs(coord.t-0.5) * 2.0);
}
vec4 Raytrace(sampler2D depthtex, vec3 viewPos, vec3 normal, float dither) {
vec3 pos = vec3(0.0);
float dist = 0.0;
#if AA > 1
dither = fract(dither + frameTimeCounter);
#endif
vec3 start = viewPos;
vec3 vector = reflect(normalize(viewPos), normalize(normal));
viewPos += vector;
vec3 tvector = vector;
int sr = 0;
for(int i = 0; i < 30; i++) {
pos = nvec3(gbufferProjection * nvec4(viewPos)) * 0.5 + 0.5;
if (pos.x < -0.05 || pos.x > 1.05 || pos.y < -0.05 || pos.y > 1.05) break;
vec3 rfragpos = vec3(pos.xy, texture2D(depthtex,pos.xy).r);
rfragpos = nvec3(gbufferProjectionInverse * nvec4(rfragpos * 2.0 - 1.0));
dist = length(start - rfragpos);
float err = length(viewPos - rfragpos);
float lVector = length(vector);
if (lVector > 1.0) lVector = pow(lVector, 1.14);
if (err < lVector) {
sr++;
if(sr >= 6) break;
tvector -= vector;
vector *= 0.1;
}
vector *= 2.0;
tvector += vector * (dither * 0.05 + 1.0);
viewPos = start + tvector;
}
return vec4(pos, dist);
}

View File

@@ -0,0 +1,52 @@
vec3 nvec3(vec4 pos) {
return pos.xyz/pos.w;
}
vec4 nvec4(vec3 pos) {
return vec4(pos.xyz, 1.0);
}
float cdist(vec2 coord) {
return max(abs(coord.s-0.5) * 1.82, abs(coord.t-0.5) * 2.0);
}
vec4 Raytrace(sampler2D depthtex, vec3 viewPos, vec3 normal, float dither) {
vec3 pos = vec3(0.0);
float dist = 0.0;
#if AA > 1
dither = fract(dither + frameTimeCounter);
#endif
vec3 start = viewPos;
vec3 vector = 0.5 * reflect(normalize(viewPos), normalize(normal));
viewPos += vector;
vec3 tvector = vector;
float difFactor = 0.4;
int sr = 0;
for(int i = 0; i < 30; i++) {
pos = nvec3(gbufferProjection * nvec4(viewPos)) * 0.5 + 0.5;
if (pos.x < -0.05 || pos.x > 1.05 || pos.y < -0.05 || pos.y > 1.05) break;
vec3 rfragpos = vec3(pos.xy, texture2D(depthtex,pos.xy).r);
rfragpos = nvec3(gbufferProjectionInverse * nvec4(rfragpos * 2.0 - 1.0));
dist = length(start - rfragpos);
float err = length(viewPos - rfragpos);
float lVector = length(vector) * (1.0 + clamp(0.25 * sqrt(dist), 0.3, 0.8));
if (err < lVector || (dist < difFactor && err > difFactor)) {
sr++;
if(sr >= 6) break;
tvector -= vector;
vector *= 0.1;
}
vector *= 2.0;
tvector += vector * (dither * 0.02 + 0.765);
viewPos = start + tvector;
}
return vec4(pos, dist);
}

View File

@@ -0,0 +1,33 @@
vec4 RoughReflection(vec3 viewPos, vec3 normal, float dither, float smoothness) {
vec4 color = vec4(0.0);
vec4 pos = Raytrace(depthtex0, viewPos, normal, dither);
float border = clamp(1.0 - pow(cdist(pos.st), 50.0), 0.0, 1.0);
if (pos.z < 1.0 - 1e-5) {
#ifdef REFLECTION_ROUGH
float dist = 1.0 - exp(-0.125 * (1.0 - smoothness) * pos.a);
float lod = log2(viewHeight / 8.0 * (1.0 - smoothness) * dist) * 0.35;
#else
float lod = 0.0;
#endif
float check = float(texture2DLod(depthtex0, pos.st, 0).r < 1.0 - 1e-5);
if (lod < 1.0) {
color.a = check;
if (color.a > 0.1) color.rgb = texture2DLod(colortex0, pos.st, 0).rgb;
} else {
float alpha = check;
if (alpha > 0.1) {
color.rgb += texture2DLod(colortex0, pos.st, max(lod - 1.0, 0)).rgb;
color.a += alpha;
}
}
color *= color.a;
color.a *= border;
}
color.rgb *= 1.8 * (1.0 - 0.065 * min(length(color.rgb), 10.0));
return color;
}

View File

@@ -0,0 +1,21 @@
vec4 SimpleReflection(vec3 viewPos, vec3 normal, float dither, float skyLightFactor) {
vec4 reflection = vec4(0.0);
vec4 pos = Raytrace(depthtex1, viewPos, normal, dither);
float border = clamp(1.0 - pow(cdist(pos.st), 50.0), 0.0, 1.0);
if (pos.z < 1.0 - 1e-5) {
float refDepth = texture2D(depthtex1, pos.st).r;
reflection.a = float(0.999999 > refDepth);
if (reflection.a > 0.001) {
reflection.rgb = texture2D(gaux2, pos.st).rgb;
if (refDepth > 0.9995) reflection.rgb *= sqrt3(skyLightFactor);
}
reflection.a *= border;
}
reflection.rgb = pow(reflection.rgb * 2.0, vec3(8.0));
return reflection;
}