Incremental recompute #8

Merged
Onek8 merged 1 commits from Dante/LNXSDK:main into main 2026-06-26 04:40:10 +00:00
3 changed files with 605 additions and 333 deletions
Showing only changes of commit 91b6c203e9 - Show all commits

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) {

File diff suppressed because it is too large Load Diff

View File

@ -239,9 +239,10 @@ def build_node_tree(world: bpy.types.World, frag: Shader, vert: Shader, con: Sha
if '_EnvCol' in world.world_defs:
frag.add_uniform('vec3 backgroundCol', link='_backgroundCol')
frag.write('fragColor.rgb = backgroundCol * envmapStrength;')
elif '_EnvTex' in world.world_defs and '_EnvLDR' in world.world_defs:
frag.write('fragColor.rgb = pow(fragColor.rgb, vec3(2.2));')
else:
if '_EnvTex' in world.world_defs and '_EnvLDR' in world.world_defs:
frag.write('fragColor.rgb = pow(fragColor.rgb, vec3(2.2));')
frag.write('fragColor.rgb *= envmapStrength;')
if '_EnvClouds' in world.world_defs:
frag.write('if (pos.z > 0.0) fragColor.rgb = mix(fragColor.rgb, traceClouds(fragColor.rgb, pos), clamp(pos.z * 5.0, 0, 1));')