replace gl_FragData with layout for deferred data. improve POM_OFFSET_SHADOW_BIAS

This commit is contained in:
Xonk
2026-02-12 23:30:26 -05:00
parent 853f4a0409
commit 0acaa6c168
2 changed files with 29 additions and 20 deletions
+22 -9
View File
@@ -253,8 +253,16 @@ void convertHandDepth(inout float depth) {
#if defined HAND || defined ENTITIES || defined BLOCKENTITIES
/* RENDERTARGETS:1,8,2 */
layout(location = 0) out vec4 DEFERRED_DATA;
layout(location = 1) out vec4 SPECULAR_DATA;
layout(location = 2) out vec4 EXTRA_STUFF;
#else
/* RENDERTARGETS:1,8 */
layout(location = 0) out vec4 DEFERRED_DATA;
layout(location = 1) out vec4 SPECULAR_DATA;
#endif
void main() {
@@ -337,9 +345,9 @@ void main() {
#if defined POM_OFFSET_SHADOW_BIAS
#ifdef Adaptive_Step_length
saveDepth += clamp((1.0/MAX_OCCLUSION_POINTS)*clamp(1.0-pow(depthmap,2),0.1,1.0),0.0,1.0);
saveDepth += clamp((1.0/MAX_OCCLUSION_POINTS)*clamp(1.0-pow(depthmap,2),0.1,1.0)-0.0001,0.0,1.0);
#else
saveDepth += clamp(1.0/MAX_OCCLUSION_POINTS,0.0,1.0);
saveDepth += clamp(1.0/MAX_OCCLUSION_POINTS-0.0001,0.0,1.0);
#endif
#endif
}
@@ -374,7 +382,7 @@ void main() {
Albedo *= color;
if(LIGHTNING > 0) Albedo = vec4(1);
if(LIGHTNING > 0) Albedo = vec4(1.0);
#if defined WORLD && !defined ENTITIES && !defined HAND
float endPortalEmission = 0.0;
@@ -470,21 +478,21 @@ void main() {
if (Albedo.a > 0.1) Albedo.a = normalMat.a;
else Albedo.a = 0.0;
#if defined POM_OFFSET_SHADOW_BIAS && !defined HAND
if(saveDepth > 0) Albedo.a = min(sqrt(saveDepth),Albedo.a);
#if !defined HAND && !defined ENTITIES && defined POM && defined POM_OFFSET_SHADOW_BIAS
if(saveDepth > 0) Albedo.a = clamp(sqrt(saveDepth)*0.45,0.0,Albedo.a);
#endif
#endif
#ifdef HAND
if (Albedo.a > 0.1){
Albedo.a = 0.75;
gl_FragData[2] = vec4(0.0);
EXTRA_STUFF.xyzw = vec4(0.0);
} else {
Albedo.a = 1.0;
}
#endif
#if defined PARTICLE_RENDERING_FIX && (defined ENTITIES || defined BLOCKENTITIES)
gl_FragData[2] = vec4(0.0);
EXTRA_STUFF.xyzw = vec4(0.0);
#endif
@@ -549,7 +557,7 @@ void main() {
vec4 otherData = clamp(vec4(viewToWorld(FlatNormals) * 0.5 + 0.5, VanillaAO),0.0,1.0);
gl_FragData[1] = vec4(
SPECULAR_DATA.xyzw = vec4(
encodeVec2(specularData.x, otherData.x),
encodeVec2(specularData.y, otherData.y),
encodeVec2(specularData.z, otherData.z),
@@ -586,7 +594,12 @@ void main() {
Albedo = clamp(Albedo,0,1);
data1 = clamp(data1,0,1);
gl_FragData[0] = vec4(encodeVec2(Albedo.x,data1.x), encodeVec2(Albedo.y,data1.y), encodeVec2(Albedo.z,data1.z), encodeVec2(data1.w,Albedo.w));
DEFERRED_DATA.xyzw = vec4(
encodeVec2(Albedo.x,data1.x),
encodeVec2(Albedo.y,data1.y),
encodeVec2(Albedo.z,data1.z),
encodeVec2(data1.w,Albedo.w)
);
#endif
}
+7 -11
View File
@@ -877,14 +877,10 @@ void main() {
// 0.50 = lightning bolt mask
// 0.45 = entity mask
float opaqueMasks = dataUnpacked1.w;
// bool isPOM = abs(opaqueMasks-0.2) < 0.01;
// #if defined POM_OFFSET_SHADOW_BIAS
float POM_DEEPNESS = opaqueMasks < 0.48 ? 1.0-min(max(0.4-opaqueMasks,0.0)/0.4,1.0) : 0.0;
// #else
// float POM_DEEPNESS = 0.0;
// #endif
#if defined POM && defined POM_OFFSET_SHADOW_BIAS
float shadowCutMask = opaqueMasks < 0.45 ? min(max(opaqueMasks/0.45,0.0)*3.0,1.0) : 0.0;
#endif
// 1.0 = water mask
// 0.9 = entity mask
@@ -1114,9 +1110,9 @@ void main() {
#else
float distortFactor = 1.0;
#endif
#if defined POM_OFFSET_SHADOW_BIAS && defined POM
projectedShadowPosition.z += shadowProjection[3].z * (0.0012 + POM_DEEPNESS * POM_DEPTH * 0.01);
#if defined POM && defined POM_OFFSET_SHADOW_BIAS
projectedShadowPosition.z += shadowProjection[3].z * (0.0012 + shadowCutMask * mix(0.25,1.0,POM_DEPTH) * 0.01);
#else
projectedShadowPosition.z += shadowProjection[3].z * 0.0012;
#endif
@@ -1475,7 +1471,7 @@ void main() {
}
////// DEBUG VIEW STUFF
#if DEBUG_VIEW == debug_SHADOWMAP
gl_FragData[0].rgb = vec3(1.0) * (Shadows * NdotL * 0.9 + 0.1);
gl_FragData[0].rgb = vec3(1.0) * max(Shadows,0.2);
if(dot(feetPlayerPos_normalized, unsigned_WsunVec) > 0.999 ) gl_FragData[0].rgb = vec3(10,10,0);
if(dot(feetPlayerPos_normalized, -WmoonVec) > 0.999 ) gl_FragData[0].rgb = vec3(1,1,10);