forked from LeenkxTeam/LNXSDK
Incremental recompute #8
@ -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
@ -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));')
|
||||
|
||||
Reference in New Issue
Block a user