From 9a9a88360a95f88700e66998ec5a89a54bb8ea22 Mon Sep 17 00:00:00 2001 From: numzero Date: Sat, 29 Mar 2025 00:45:45 +0300 Subject: [PATCH] Make Sun customizable! --- src/trace.wgsl | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/trace.wgsl b/src/trace.wgsl index 79ba954..9a906cd 100644 --- a/src/trace.wgsl +++ b/src/trace.wgsl @@ -104,8 +104,22 @@ fn trace_fragment(in: Varying) -> vec3f { if (sphere == -1) { let theta = dot(ray, normalize(vec3(0., 0., 1.))); var env: vec3f; // in kilonits - if (theta > 0.999988647254458) { - env = vec3(1.6e6, 1.5e6, 1.0e6); + + const ILLUMINANCE_LUX = 1e5; + const ANGULAR_DIAMETER_DEG = 0.5; // Sun: 0.5° + + const PI = 3.141592653589793; + + const ANGULAR_DIAMETER_RAD = PI / 180.0 * ANGULAR_DIAMETER_DEG; + const THETA = 0.5 * ANGULAR_DIAMETER_RAD; + const COS_THETA = 1.0 - 0.5 * THETA * THETA; // approximately + + const SOLID_ANGLE_SR = PI * THETA * THETA; // approximately + const LUMINANCE_NIT = ILLUMINANCE_LUX / SOLID_ANGLE_SR; + const LUMINANCE_KNIT = 1e-3 * LUMINANCE_NIT; + + if (theta > COS_THETA) { + env = vec3(1.0, 0.9, 0.6) * LUMINANCE_KNIT; } else { env = mix(vec3(0.5, 1.0, 2.0), vec3(2.0, 3.0, 4.0), 0.5 * theta + 0.5); }