forked from LeenkxTeam/LNXSDK
Merge pull request 'Incremental recompute' (#8) from Dante/LNXSDK:main into main
Reviewed-on: #8
This commit is contained in:
@ -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) {
|
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);
|
float half_diameter = max(angular_diameter * 0.5, 0.0005);
|
||||||
if (dist > 1.0) return vec3(0.0);
|
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 invDist = 1.0 - dist;
|
||||||
float mu = sqrt(invDist * invDist);
|
float mu = sqrt(invDist * invDist);
|
||||||
vec3 limb_darkening = 1.0 - (1.0 - pow(vec3(mu), sun_limb_darkening_col));
|
vec3 limb_darkening = 1.0 - (1.0 - pow(vec3(mu), sun_limb_darkening_col));
|
||||||
|
|
||||||
float sun_elev = multiScatterParams.x;
|
float sun_elev = multiScatterParams.x;
|
||||||
float dir_elev = asin(clamp(dir.z, -1.0, 1.0));
|
float t = clamp((dir_elev - (sun_elev - half_diameter)) / (2.0 * half_diameter), 0.0, 1.0);
|
||||||
float t = clamp((dir_elev - (sun_elev - angular_diameter * 0.5)) / angular_diameter, 0.0, 1.0);
|
|
||||||
vec3 sun_color = mix(multiScatterSunBottom.rgb, multiScatterSunTop, t) * intensity * limb_darkening;
|
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) {
|
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:
|
if '_EnvCol' in world.world_defs:
|
||||||
frag.add_uniform('vec3 backgroundCol', link='_backgroundCol')
|
frag.add_uniform('vec3 backgroundCol', link='_backgroundCol')
|
||||||
frag.write('fragColor.rgb = backgroundCol * envmapStrength;')
|
frag.write('fragColor.rgb = backgroundCol * envmapStrength;')
|
||||||
|
else:
|
||||||
elif '_EnvTex' in world.world_defs and '_EnvLDR' in world.world_defs:
|
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 = pow(fragColor.rgb, vec3(2.2));')
|
||||||
|
frag.write('fragColor.rgb *= envmapStrength;')
|
||||||
|
|
||||||
if '_EnvClouds' in world.world_defs:
|
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));')
|
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