dither cloud intersection threshold to avoid silhouettes. make snells window only apply to water.

This commit is contained in:
Xonk
2025-03-17 22:43:25 -04:00
parent 1465baede1
commit fa255a138d
4 changed files with 12 additions and 9 deletions

View File

@ -284,9 +284,8 @@ vec3 specularReflections(
in bool isHand // mask for the hand
#ifdef FORWARD_SPECULAR
, inout float reflectanceForAlpha
#else
, bool isWater
, inout float reflectanceForAlpha
#endif
,in vec4 flashLight_stuff
@ -327,7 +326,7 @@ vec3 specularReflections(
float shlickFresnel = shlickFresnelRoughness(dot(-normalize(viewDir), vec3(0.0,0.0,1.0)), roughness);
#if defined FORWARD_SPECULAR && defined SNELLS_WINDOW
if(isEyeInWater == 1) shlickFresnel = mix(shlickFresnel, 1.0, min(max(0.98 - (1.0-shlickFresnel),0.0)/(1-0.98),1.0));
if(isEyeInWater == 1 && isWater) shlickFresnel = mix(shlickFresnel, 1.0, min(max(0.98 - (1.0-shlickFresnel),0.0)/(1-0.98),1.0));
#endif
// F0 < 230 dialectrics

View File

@ -334,10 +334,13 @@ vec4 raymarchCloud(
float shapeWithDensityFaded = shape*density * pow(clamp((rayPosition.y - minHeight)/(max(maxHeight-minHeight,1.0)*0.25),0.0,1.0),2.0);
if(shapeWithDensityFaded > mix(0.06, 1e-5, dither)){
cloudPlaneDistance.x = length(rayPosition - cameraPosition); cloudPlaneDistance.y = 0.0;
}
// check if the pixel has visible clouds before doing work.
if(shapeWithDensityFaded > 1e-5){
cloudPlaneDistance.x = length(rayPosition - cameraPosition); cloudPlaneDistance.y = 0.0;
// can add the initial cloud shape sample for a free shadow starting step :D
float indirectShadowMask = 1.0 - min(max(rayPosition.y - minHeight,0.0) / max(maxHeight-minHeight,1.0), 1.0);