Shader cleanup
This commit is contained in:
@@ -263,12 +263,6 @@ mat3 cotangentFrame(const vec3 n, const vec3 p, const vec2 texCoord) {
|
||||
vec2 octahedronWrap(const vec2 v) {
|
||||
return (1.0 - abs(v.yx)) * (vec2(v.x >= 0.0 ? 1.0 : -1.0, v.y >= 0.0 ? 1.0 : -1.0));
|
||||
}
|
||||
";
|
||||
|
||||
public static var str_packFloat2 = "
|
||||
float packFloat2(const float f1, const float f2) {
|
||||
return floor(f1 * 255.0) + min(f2, 1.0 - 1.0 / 100.0);
|
||||
}
|
||||
";
|
||||
|
||||
public static var str_packFloatInt16 = "
|
||||
|
||||
@@ -3,20 +3,6 @@ in vec3 vcolor;
|
||||
in vec3 wnormal;
|
||||
out vec4 fragColor;
|
||||
void main() {
|
||||
vec3 n = normalize(wnormal);
|
||||
vec3 basecol;
|
||||
float roughness;
|
||||
float metallic;
|
||||
float occlusion;
|
||||
float specular;
|
||||
float emission;
|
||||
vec3 Attribute_Color_res = vcolor;
|
||||
basecol = Attribute_Color_res;
|
||||
roughness = 0.0;
|
||||
metallic = 0.0;
|
||||
occlusion = 1.0;
|
||||
specular = 0.0;
|
||||
emission = 0.0;
|
||||
fragColor = vec4(basecol, 1.0);
|
||||
fragColor = vec4(vcolor, 1.0);
|
||||
fragColor.rgb = pow(fragColor.rgb, vec3(1.0 / 2.2));
|
||||
}
|
||||
|
||||
@@ -10,20 +10,18 @@ vec3 n = normalize(wnormal);
|
||||
float roughness;
|
||||
float metallic;
|
||||
float occlusion;
|
||||
float specular;
|
||||
float emission;
|
||||
basecol = vec3(0.800000011920929, 0.800000011920929, 0.800000011920929);
|
||||
roughness = 0.0;
|
||||
metallic = 0.0;
|
||||
occlusion = 1.0;
|
||||
specular = 0.0;
|
||||
emission = 0.0;
|
||||
n /= (abs(n.x) + abs(n.y) + abs(n.z));
|
||||
n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy);
|
||||
uint matid = 0;
|
||||
if (emission > 0) { basecol *= emission; matid = 1; }
|
||||
fragColor[0] = vec4(n.xy, roughness, packFloatInt16(metallic, matid));
|
||||
fragColor[1] = vec4(basecol, packFloat2(occlusion, specular));
|
||||
fragColor[1] = vec4(basecol, occlusion);
|
||||
vec2 posa = (wvpposition.xy / wvpposition.w) * 0.5 + 0.5;
|
||||
vec2 posb = (prevwvpposition.xy / prevwvpposition.w) * 0.5 + 0.5;
|
||||
fragColor[2].rg = vec2(posa - posb);
|
||||
|
||||
@@ -12,7 +12,6 @@ void main() {
|
||||
float roughness;
|
||||
float metallic;
|
||||
float occlusion;
|
||||
float specular;
|
||||
float emission;
|
||||
float Mix_fac = 0.0;
|
||||
vec3 RGB_Color_res = vec3(0.2176000028848648, 0.2176000028848648, 0.2176000028848648);
|
||||
@@ -24,14 +23,13 @@ void main() {
|
||||
roughness = 0.4000000059604645;
|
||||
metallic = 0.0;
|
||||
occlusion = 1.0;
|
||||
specular = 1.0;
|
||||
emission = 0.0;
|
||||
n /= (abs(n.x) + abs(n.y) + abs(n.z));
|
||||
n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy);
|
||||
uint matid = 0;
|
||||
if (emission > 0) { basecol *= emission; matid = 1; }
|
||||
fragColor[0] = vec4(n.xy, roughness, packFloatInt16(metallic, matid));
|
||||
fragColor[1] = vec4(basecol, packFloat2(occlusion, specular));
|
||||
fragColor[1] = vec4(basecol, occlusion);
|
||||
vec2 posa = (wvpposition.xy / wvpposition.w) * 0.5 + 0.5;
|
||||
vec2 posb = (prevwvpposition.xy / prevwvpposition.w) * 0.5 + 0.5;
|
||||
fragColor[2].rg = vec2(posa - posb);
|
||||
|
||||
@@ -10,20 +10,18 @@ vec3 n = normalize(wnormal);
|
||||
float roughness;
|
||||
float metallic;
|
||||
float occlusion;
|
||||
float specular;
|
||||
float emission;
|
||||
basecol = vec3(0.800000011920929, 0.800000011920929, 0.800000011920929);
|
||||
roughness = 0.25;
|
||||
metallic = 0.0;
|
||||
occlusion = 1.0;
|
||||
specular = 0.5;
|
||||
emission = 0.0;
|
||||
n /= (abs(n.x) + abs(n.y) + abs(n.z));
|
||||
n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy);
|
||||
uint matid = 0;
|
||||
if (emission > 0) { basecol *= emission; matid = 1; }
|
||||
fragColor[0] = vec4(n.xy, roughness, packFloatInt16(metallic, matid));
|
||||
fragColor[1] = vec4(basecol, packFloat2(occlusion, specular));
|
||||
fragColor[1] = vec4(basecol, occlusion);
|
||||
vec2 posa = (wvpposition.xy / wvpposition.w) * 0.5 + 0.5;
|
||||
vec2 posb = (prevwvpposition.xy / prevwvpposition.w) * 0.5 + 0.5;
|
||||
fragColor[2].rg = vec2(posa - posb);
|
||||
|
||||
@@ -12,7 +12,7 @@ const float ssrJitter = 0.6;
|
||||
uniform sampler2D tex;
|
||||
uniform sampler2D gbufferD;
|
||||
uniform sampler2D gbuffer0; // Normal, roughness
|
||||
uniform sampler2D gbuffer1; // basecol, spec
|
||||
uniform sampler2D gbuffer1; // basecol, occ
|
||||
uniform mat4 P;
|
||||
uniform mat3 V3;
|
||||
uniform vec2 cameraProj;
|
||||
@@ -71,9 +71,6 @@ void main() {
|
||||
float roughness = g0.b;
|
||||
if (roughness == 1.0) { fragColor.rgb = vec3(0.0); return; }
|
||||
|
||||
float spec = fract(textureLod(gbuffer1, texCoord, 0.0).a);
|
||||
if (spec == 0.0) { fragColor.rgb = vec3(0.0); return; }
|
||||
|
||||
float d = textureLod(gbufferD, texCoord, 0.0).r * 2.0 - 1.0;
|
||||
if (d == 1.0) { fragColor.rgb = vec3(0.0); return; }
|
||||
|
||||
|
||||
@@ -183,8 +183,8 @@ void main() {
|
||||
float metallic;
|
||||
uint matid;
|
||||
unpackFloatInt16(g0.a, metallic, matid);
|
||||
vec4 g1 = textureLod(gbuffer1, texCoord, 0.0); // Basecolor.rgb, spec/occ
|
||||
vec2 occspec = unpackFloat2(g1.a);
|
||||
vec4 g1 = textureLod(gbuffer1, texCoord, 0.0); // Basecolor.rgb, occ
|
||||
float occ = g1.a;
|
||||
vec3 albedo = surfaceAlbedo(g1.rgb, metallic); // g1.rgb - basecolor
|
||||
vec3 f0 = surfaceF0(g1.rgb, metallic);
|
||||
|
||||
@@ -194,7 +194,7 @@ void main() {
|
||||
float dotNV = max(dot(n, v), 0.0);
|
||||
|
||||
#ifdef _MicroShadowing
|
||||
occspec.x = mix(1.0, occspec.x, dotNV); // AO Fresnel
|
||||
occ = mix(1.0, occ, dotNV); // AO Fresnel
|
||||
#endif
|
||||
|
||||
#ifdef _Brdf
|
||||
@@ -227,14 +227,14 @@ void main() {
|
||||
envl.rgb *= albedo;
|
||||
|
||||
#ifdef _Rad // Indirect specular
|
||||
envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y) * 1.5 * occspec.y;
|
||||
envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y) * 1.5;
|
||||
#else
|
||||
#ifdef _EnvCol
|
||||
envl.rgb += backgroundCol * surfaceF0(g1.rgb, metallic); // f0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
envl.rgb *= envmapStrength * occspec.x;
|
||||
envl.rgb *= envmapStrength * occ;
|
||||
|
||||
#ifdef _VoxelAOvar
|
||||
|
||||
@@ -292,7 +292,7 @@ void main() {
|
||||
float sdotNL = dot(n, sunDir);
|
||||
float svisibility = 1.0;
|
||||
vec3 sdirect = lambertDiffuseBRDF(albedo, sdotNL) +
|
||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH) * occspec.y;
|
||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH);
|
||||
|
||||
#ifdef _ShadowMap
|
||||
#ifdef _CSM
|
||||
@@ -323,7 +323,7 @@ void main() {
|
||||
#endif
|
||||
|
||||
#ifdef _MicroShadowing
|
||||
svisibility *= sdotNL + 2.0 * occspec.x * occspec.x - 1.0;
|
||||
svisibility *= sdotNL + 2.0 * occ * occ - 1.0;
|
||||
#endif
|
||||
|
||||
fragColor.rgb += sdirect * svisibility * sunCol;
|
||||
@@ -353,7 +353,7 @@ void main() {
|
||||
#ifdef _SinglePoint
|
||||
|
||||
fragColor.rgb += sampleLight(
|
||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, occspec.y, f0
|
||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, f0
|
||||
#ifdef _ShadowMap
|
||||
, 0, pointBias
|
||||
#endif
|
||||
@@ -366,7 +366,7 @@ void main() {
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _MicroShadowing
|
||||
, occspec.x
|
||||
, occ
|
||||
#endif
|
||||
);
|
||||
|
||||
@@ -403,7 +403,6 @@ void main() {
|
||||
lightsArray[li * 2 + 1].xyz, // lightCol
|
||||
albedo,
|
||||
roughness,
|
||||
occspec.y,
|
||||
f0
|
||||
#ifdef _ShadowMap
|
||||
, li, lightsArray[li * 2].w // bias
|
||||
@@ -415,7 +414,7 @@ void main() {
|
||||
, lightsArraySpot[li].xyz // spotDir
|
||||
#endif
|
||||
#ifdef _MicroShadowing
|
||||
, occspec.x
|
||||
, occ
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
@@ -187,8 +187,8 @@ void main() {
|
||||
float metallic;
|
||||
uint matid;
|
||||
unpackFloatInt16(g0.a, metallic, matid);
|
||||
vec4 g1 = textureLod(gbuffer1, texCoord, 0.0); // Basecolor.rgb, spec/occ
|
||||
vec2 occspec = unpackFloat2(g1.a);
|
||||
vec4 g1 = textureLod(gbuffer1, texCoord, 0.0); // Basecolor.rgb, occ
|
||||
float occ = g1.a;
|
||||
vec3 albedo = surfaceAlbedo(g1.rgb, metallic); // g1.rgb - basecolor
|
||||
vec3 f0 = surfaceF0(g1.rgb, metallic);
|
||||
|
||||
@@ -198,7 +198,7 @@ void main() {
|
||||
float dotNV = max(dot(n, v), 0.0);
|
||||
|
||||
#ifdef _MicroShadowing
|
||||
occspec.x = mix(1.0, occspec.x, dotNV); // AO Fresnel
|
||||
occ = mix(1.0, occ, dotNV); // AO Fresnel
|
||||
#endif
|
||||
|
||||
#ifdef _Brdf
|
||||
@@ -231,14 +231,14 @@ void main() {
|
||||
envl.rgb *= albedo;
|
||||
|
||||
#ifdef _Rad // Indirect specular
|
||||
envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y) * 1.5 * occspec.y;
|
||||
envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y) * 1.5;
|
||||
#else
|
||||
#ifdef _EnvCol
|
||||
envl.rgb += backgroundCol * surfaceF0(g1.rgb, metallic); // f0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
envl.rgb *= envmapStrength * occspec.x;
|
||||
envl.rgb *= envmapStrength * occ;
|
||||
|
||||
#ifdef _VoxelAOvar
|
||||
|
||||
@@ -296,7 +296,7 @@ void main() {
|
||||
float sdotNL = dot(n, sunDir);
|
||||
float svisibility = 1.0;
|
||||
vec3 sdirect = lambertDiffuseBRDF(albedo, sdotNL) +
|
||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH) * occspec.y;
|
||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH);
|
||||
|
||||
#ifdef _ShadowMap
|
||||
#ifdef _CSM
|
||||
@@ -327,7 +327,7 @@ void main() {
|
||||
#endif
|
||||
|
||||
#ifdef _MicroShadowing
|
||||
svisibility *= sdotNL + 2.0 * occspec.x * occspec.x - 1.0;
|
||||
svisibility *= sdotNL + 2.0 * occ * occ - 1.0;
|
||||
#endif
|
||||
|
||||
fragColor.rgb += sdirect * svisibility * sunCol;
|
||||
@@ -357,7 +357,7 @@ void main() {
|
||||
#ifdef _SinglePoint
|
||||
|
||||
fragColor.rgb += sampleLight(
|
||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, occspec.y, f0
|
||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, f0
|
||||
#ifdef _ShadowMap
|
||||
, 0, pointBias
|
||||
#endif
|
||||
@@ -370,7 +370,7 @@ void main() {
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _MicroShadowing
|
||||
, occspec.x
|
||||
, occ
|
||||
#endif
|
||||
);
|
||||
|
||||
@@ -407,7 +407,6 @@ void main() {
|
||||
lightsArray[li * 2 + 1].xyz, // lightCol
|
||||
albedo,
|
||||
roughness,
|
||||
occspec.y,
|
||||
f0
|
||||
#ifdef _ShadowMap
|
||||
, li, lightsArray[li * 2].w // bias
|
||||
@@ -419,7 +418,7 @@ void main() {
|
||||
, lightsArraySpot[li].xyz // spotDir
|
||||
#endif
|
||||
#ifdef _MicroShadowing
|
||||
, occspec.x
|
||||
, occ
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
@@ -186,8 +186,8 @@ void main() {
|
||||
float metallic;
|
||||
uint matid;
|
||||
unpackFloatInt16(g0.a, metallic, matid);
|
||||
vec4 g1 = textureLod(gbuffer1, texCoord, 0.0); // Basecolor.rgb, spec/occ
|
||||
vec2 occspec = unpackFloat2(g1.a);
|
||||
vec4 g1 = textureLod(gbuffer1, texCoord, 0.0); // Basecolor.rgb, occ
|
||||
float occ = g1.a;
|
||||
vec3 albedo = surfaceAlbedo(g1.rgb, metallic); // g1.rgb - basecolor
|
||||
vec3 f0 = surfaceF0(g1.rgb, metallic);
|
||||
|
||||
@@ -197,7 +197,7 @@ void main() {
|
||||
float dotNV = max(dot(n, v), 0.0);
|
||||
|
||||
#ifdef _MicroShadowing
|
||||
occspec.x = mix(1.0, occspec.x, dotNV); // AO Fresnel
|
||||
occ = mix(1.0, occ, dotNV); // AO Fresnel
|
||||
#endif
|
||||
|
||||
#ifdef _Brdf
|
||||
@@ -230,14 +230,14 @@ void main() {
|
||||
envl.rgb *= albedo;
|
||||
|
||||
#ifdef _Rad // Indirect specular
|
||||
envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y) * 1.5 * occspec.y;
|
||||
envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y) * 1.5;
|
||||
#else
|
||||
#ifdef _EnvCol
|
||||
envl.rgb += backgroundCol * surfaceF0(g1.rgb, metallic); // f0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
envl.rgb *= envmapStrength * occspec.x;
|
||||
envl.rgb *= envmapStrength * occ;
|
||||
|
||||
#ifdef _VoxelAOvar
|
||||
|
||||
@@ -295,7 +295,7 @@ void main() {
|
||||
float sdotNL = dot(n, sunDir);
|
||||
float svisibility = 1.0;
|
||||
vec3 sdirect = lambertDiffuseBRDF(albedo, sdotNL) +
|
||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH) * occspec.y;
|
||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH);
|
||||
|
||||
#ifdef _ShadowMap
|
||||
#ifdef _CSM
|
||||
@@ -326,7 +326,7 @@ void main() {
|
||||
#endif
|
||||
|
||||
#ifdef _MicroShadowing
|
||||
svisibility *= sdotNL + 2.0 * occspec.x * occspec.x - 1.0;
|
||||
svisibility *= sdotNL + 2.0 * occ * occ - 1.0;
|
||||
#endif
|
||||
|
||||
fragColor.rgb += sdirect * svisibility * sunCol;
|
||||
@@ -356,7 +356,7 @@ void main() {
|
||||
#ifdef _SinglePoint
|
||||
|
||||
fragColor.rgb += sampleLight(
|
||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, occspec.y, f0
|
||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, f0
|
||||
#ifdef _ShadowMap
|
||||
, 0, pointBias
|
||||
#endif
|
||||
@@ -369,7 +369,7 @@ void main() {
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _MicroShadowing
|
||||
, occspec.x
|
||||
, occ
|
||||
#endif
|
||||
);
|
||||
|
||||
@@ -406,7 +406,6 @@ void main() {
|
||||
lightsArray[li * 2 + 1].xyz, // lightCol
|
||||
albedo,
|
||||
roughness,
|
||||
occspec.y,
|
||||
f0
|
||||
#ifdef _ShadowMap
|
||||
, li, lightsArray[li * 2].w // bias
|
||||
@@ -418,7 +417,7 @@ void main() {
|
||||
, lightsArraySpot[li].xyz // spotDir
|
||||
#endif
|
||||
#ifdef _MicroShadowing
|
||||
, occspec.x
|
||||
, occ
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
@@ -187,8 +187,8 @@ void main() {
|
||||
float metallic;
|
||||
uint matid;
|
||||
unpackFloatInt16(g0.a, metallic, matid);
|
||||
vec4 g1 = textureLod(gbuffer1, texCoord, 0.0); // Basecolor.rgb, spec/occ
|
||||
vec2 occspec = unpackFloat2(g1.a);
|
||||
vec4 g1 = textureLod(gbuffer1, texCoord, 0.0); // Basecolor.rgb, occ
|
||||
float occ = g1.a;
|
||||
vec3 albedo = surfaceAlbedo(g1.rgb, metallic); // g1.rgb - basecolor
|
||||
vec3 f0 = surfaceF0(g1.rgb, metallic);
|
||||
|
||||
@@ -198,7 +198,7 @@ void main() {
|
||||
float dotNV = max(dot(n, v), 0.0);
|
||||
|
||||
#ifdef _MicroShadowing
|
||||
occspec.x = mix(1.0, occspec.x, dotNV); // AO Fresnel
|
||||
occ = mix(1.0, occ, dotNV); // AO Fresnel
|
||||
#endif
|
||||
|
||||
#ifdef _Brdf
|
||||
@@ -231,14 +231,14 @@ void main() {
|
||||
envl.rgb *= albedo;
|
||||
|
||||
#ifdef _Rad // Indirect specular
|
||||
envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y) * 1.5 * occspec.y;
|
||||
envl.rgb += prefilteredColor * (f0 * envBRDF.x + envBRDF.y) * 1.5;
|
||||
#else
|
||||
#ifdef _EnvCol
|
||||
envl.rgb += backgroundCol * surfaceF0(g1.rgb, metallic); // f0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
envl.rgb *= envmapStrength * occspec.x;
|
||||
envl.rgb *= envmapStrength * occ;
|
||||
|
||||
#ifdef _VoxelAOvar
|
||||
|
||||
@@ -296,7 +296,7 @@ void main() {
|
||||
float sdotNL = dot(n, sunDir);
|
||||
float svisibility = 1.0;
|
||||
vec3 sdirect = lambertDiffuseBRDF(albedo, sdotNL) +
|
||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH) * occspec.y;
|
||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH);
|
||||
|
||||
#ifdef _ShadowMap
|
||||
#ifdef _CSM
|
||||
@@ -327,7 +327,7 @@ void main() {
|
||||
#endif
|
||||
|
||||
#ifdef _MicroShadowing
|
||||
svisibility *= sdotNL + 2.0 * occspec.x * occspec.x - 1.0;
|
||||
svisibility *= sdotNL + 2.0 * occ * occ - 1.0;
|
||||
#endif
|
||||
|
||||
fragColor.rgb += sdirect * svisibility * sunCol;
|
||||
@@ -357,7 +357,7 @@ void main() {
|
||||
#ifdef _SinglePoint
|
||||
|
||||
fragColor.rgb += sampleLight(
|
||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, occspec.y, f0
|
||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, f0
|
||||
#ifdef _ShadowMap
|
||||
, 0, pointBias
|
||||
#endif
|
||||
@@ -370,7 +370,7 @@ void main() {
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _MicroShadowing
|
||||
, occspec.x
|
||||
, occ
|
||||
#endif
|
||||
);
|
||||
|
||||
@@ -407,7 +407,6 @@ void main() {
|
||||
lightsArray[li * 2 + 1].xyz, // lightCol
|
||||
albedo,
|
||||
roughness,
|
||||
occspec.y,
|
||||
f0
|
||||
#ifdef _ShadowMap
|
||||
, li, lightsArray[li * 2].w // bias
|
||||
@@ -419,7 +418,7 @@ void main() {
|
||||
, lightsArraySpot[li].xyz // spotDir
|
||||
#endif
|
||||
#ifdef _MicroShadowing
|
||||
, occspec.x
|
||||
, occ
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
@@ -71,15 +71,6 @@ vec3 getPos2NoEye(const vec3 eye, const mat4 invVP, const float depth, const vec
|
||||
return pos.xyz - eye;
|
||||
}
|
||||
|
||||
float packFloat2(const float f1, const float f2) {
|
||||
// Higher f1 = less precise f2
|
||||
return floor(f1 * 255.0) + min(f2, 1.0 - 1.0 / 100.0);
|
||||
}
|
||||
|
||||
vec2 unpackFloat2(const float f) {
|
||||
return vec2(floor(f) / 255.0, fract(f));
|
||||
}
|
||||
|
||||
vec4 encodeRGBM(const vec3 rgb) {
|
||||
const float maxRange = 6.0;
|
||||
float maxRGB = max(rgb.x, max(rgb.g, rgb.b));
|
||||
|
||||
@@ -64,7 +64,7 @@ uniform sampler2D sltcMag;
|
||||
#endif
|
||||
|
||||
vec3 sampleLight(const vec3 p, const vec3 n, const vec3 v, const float dotNV, const vec3 lp, const vec3 lightCol,
|
||||
const vec3 albedo, const float rough, const float spec, const vec3 f0
|
||||
const vec3 albedo, const float rough, const vec3 f0
|
||||
#ifdef _ShadowMap
|
||||
, int index, float bias
|
||||
#endif
|
||||
@@ -99,10 +99,10 @@ vec3 sampleLight(const vec3 p, const vec3 n, const vec3 v, const float dotNV, co
|
||||
float ltcspec = ltcEvaluate(n, v, dotNV, p, invM, lightArea0, lightArea1, lightArea2, lightArea3);
|
||||
ltcspec *= textureLod(sltcMag, tuv, 0.0).a;
|
||||
float ltcdiff = ltcEvaluate(n, v, dotNV, p, mat3(1.0), lightArea0, lightArea1, lightArea2, lightArea3);
|
||||
vec3 direct = albedo * ltcdiff + ltcspec * spec * 0.05;
|
||||
vec3 direct = albedo * ltcdiff + ltcspec * 0.05;
|
||||
#else
|
||||
vec3 direct = lambertDiffuseBRDF(albedo, dotNL) +
|
||||
specularBRDF(f0, rough, dotNL, dotNH, dotNV, dotVH) * spec;
|
||||
specularBRDF(f0, rough, dotNL, dotNH, dotNV, dotVH);
|
||||
#endif
|
||||
direct *= attenuate(distance(p, lp));
|
||||
direct *= lightCol;
|
||||
|
||||
@@ -14,7 +14,8 @@ class MakeMesh {
|
||||
compare_mode: "less",
|
||||
cull_mode: Context.cullBackfaces ? "clockwise" : "none",
|
||||
vertex_elements: [{name: "pos", data: "short4norm"},{name: "nor", data: "short2norm"},{name: "tex", data: "short2norm"}],
|
||||
color_attachments: ["RGBA64", "RGBA64", "RGBA64"]
|
||||
color_attachments: ["RGBA64", "RGBA64", "RGBA64"],
|
||||
depth_attachment: "DEPTH32"
|
||||
});
|
||||
|
||||
var vert = con_mesh.make_vert();
|
||||
@@ -64,13 +65,12 @@ class MakeMesh {
|
||||
frag.n = true;
|
||||
|
||||
frag.add_function(MaterialFunctions.str_packFloatInt16);
|
||||
frag.add_function(MaterialFunctions.str_packFloat2);
|
||||
|
||||
if (Context.tool == ToolColorId) {
|
||||
frag.add_uniform('sampler2D texcolorid', '_texcolorid');
|
||||
frag.write('fragColor[0] = vec4(n.xy, 1.0, packFloatInt16(0.0, uint(0)));'); // met/rough
|
||||
frag.write('vec3 idcol = pow(textureLod(texcolorid, texCoord, 0.0).rgb, vec3(2.2, 2.2, 2.2));');
|
||||
frag.write('fragColor[1] = vec4(idcol.rgb, packFloat2(1.0, 1.0));'); // occ/spec
|
||||
frag.write('fragColor[1] = vec4(idcol.rgb, 1.0);'); // occ
|
||||
}
|
||||
else {
|
||||
frag.add_function(MaterialFunctions.str_octahedronWrap);
|
||||
@@ -392,7 +392,7 @@ class MakeMesh {
|
||||
}
|
||||
else { // Deferred, Pathtraced
|
||||
if (MaterialBuilder.emisUsed) frag.write('if (matid == 1.0) basecol *= 10.0;'); // Boost for bloom
|
||||
frag.write('fragColor[1] = vec4(basecol, packFloat2(occlusion, 1.0));'); // occ/spec
|
||||
frag.write('fragColor[1] = vec4(basecol, occlusion);');
|
||||
}
|
||||
}
|
||||
else if (Context.viewportMode == ViewBaseColor) {
|
||||
|
||||
@@ -21,7 +21,8 @@ class MakeMeshPreview {
|
||||
compare_mode: "less",
|
||||
cull_mode: (Context.cullBackfaces || !isScene) ? "clockwise" : "none",
|
||||
vertex_elements: [{name: "pos", data: "short4norm"}, {name: "nor", data: "short2norm"}, {name: "tex", data: "short2norm"}],
|
||||
color_attachments: ["RGBA64", "RGBA64", "RGBA64"]
|
||||
color_attachments: ["RGBA64", "RGBA64", "RGBA64"],
|
||||
depth_attachment: "DEPTH32"
|
||||
});
|
||||
|
||||
var vert = con_mesh.make_vert();
|
||||
@@ -92,7 +93,6 @@ class MakeMeshPreview {
|
||||
frag.n = true;
|
||||
|
||||
frag.add_function(MaterialFunctions.str_packFloatInt16);
|
||||
frag.add_function(MaterialFunctions.str_packFloat2);
|
||||
frag.add_function(MaterialFunctions.str_cotangentFrame);
|
||||
frag.add_function(MaterialFunctions.str_octahedronWrap);
|
||||
|
||||
@@ -116,7 +116,7 @@ class MakeMeshPreview {
|
||||
frag.write('n.xy = n.z >= 0.0 ? n.xy : octahedronWrap(n.xy);');
|
||||
// uint matid = 0;
|
||||
frag.write('fragColor[0] = vec4(n.x, n.y, roughness, packFloatInt16(metallic, uint(0)));'); // metallic/matid
|
||||
frag.write('fragColor[1] = vec4(basecol.r, basecol.g, basecol.b, packFloat2(occlusion, 1.0));'); // occ/spec
|
||||
frag.write('fragColor[1] = vec4(basecol.r, basecol.g, basecol.b, occlusion);');
|
||||
frag.write('fragColor[2] = vec4(0.0, 0.0, 0.0, 0.0);'); // veloc
|
||||
|
||||
Material.finalize(con_mesh);
|
||||
|
||||
Reference in New Issue
Block a user