Incremental recompute

This commit is contained in:
Gorochu
2026-06-25 21:33:51 -07:00
parent 2c30554504
commit 91b6c203e9
3 changed files with 605 additions and 333 deletions

View File

@ -185,19 +185,26 @@ vec3 multi_scatter_sample_lut(vec3 dir, float sun_rotation) {
}
vec3 multi_scatter_sun_disc(vec3 dir, vec3 sun_dir, float angular_diameter, float intensity) {
float dist = distance(dir, sun_dir) / (angular_diameter * 0.5);
if (dist > 1.0) return vec3(0.0);
float half_diameter = max(angular_diameter * 0.5, 0.0005);
float dist = distance(dir, sun_dir) / half_diameter;
float edge = smoothstep(1.0, 0.95, dist);
if (edge <= 0.0) return vec3(0.0);
float horizon = multiScatterSunBottom.w;
float dir_elev = asin(clamp(dir.z, -1.0, 1.0));
float horizon_fade = smoothstep(horizon - half_diameter * 0.1, horizon + half_diameter * 0.1, dir_elev);
edge *= horizon_fade;
if (edge <= 0.0) return vec3(0.0);
float invDist = 1.0 - dist;
float mu = sqrt(invDist * invDist);
vec3 limb_darkening = 1.0 - (1.0 - pow(vec3(mu), sun_limb_darkening_col));
float sun_elev = multiScatterParams.x;
float dir_elev = asin(clamp(dir.z, -1.0, 1.0));
float t = clamp((dir_elev - (sun_elev - angular_diameter * 0.5)) / angular_diameter, 0.0, 1.0);
float t = clamp((dir_elev - (sun_elev - half_diameter)) / (2.0 * half_diameter), 0.0, 1.0);
vec3 sun_color = mix(multiScatterSunBottom.rgb, multiScatterSunTop, t) * intensity * limb_darkening;
return xyz_to_rgb(sun_color);
return xyz_to_rgb(sun_color) * edge;
}
vec3 multi_scatter_atmosphere(vec3 dir) {