From b04c4008e73d1515d1f78f993ca25826847d7207 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Thu, 1 Oct 2026 15:00:35 +0530 Subject: Add time --- src/main/resources/shaders/mrdoor.glsl | 67 +++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 25 deletions(-) (limited to 'src/main/resources/shaders/mrdoor.glsl') diff --git a/src/main/resources/shaders/mrdoor.glsl b/src/main/resources/shaders/mrdoor.glsl index a37cbab..19290ce 100644 --- a/src/main/resources/shaders/mrdoor.glsl +++ b/src/main/resources/shaders/mrdoor.glsl @@ -6,13 +6,14 @@ layout(local_size_x = 1, local_size_y = 1) in; #include uniform float seconds = 0; -uniform vec3 camera_position = vec3(0, 1, 0); -uniform mat3 camera_transformation; -uniform vec3 key_light_position; +uniform vec3 camera_position = vec3(0, 1.7, -2); +uniform vec3 key_light_position = vec3(0.8, 3, 0.4); layout(rgba8) uniform writeonly image2D output_image; -const vec3 door1_light_position = vec3(0.8, 4, 0.4); -const vec3 sunlight_color = vec3(1, 0.99, 0.99); +uniform float antialiasing = 0.28; + +// const vec3 door1_light_position = vec3(0.8, 4, 0.4); +// const vec3 sunlight_color = vec3(1, 0.99, 0.99); #define PI 3.14159265358979323 @@ -47,7 +48,7 @@ Obj scene(in vec3 p) { float door1angle; timing_actions(door1angle); vec3 hingepos = vec3(-1.0, 0, -0.0); - debugshapesdist = min(debugshapesdist, sdf_circle(doorpos - hingepos, 0.1)); + // debugshapesdist = min(debugshapesdist, sdf_circle(doorpos - hingepos, 0.1)); doorpos = vec3( hingepos.x + (doorpos.x - hingepos.x) * cos(door1angle) - (doorpos.z - hingepos.z) * sin(door1angle), doorpos.y, @@ -61,7 +62,7 @@ Obj scene(in vec3 p) { doorhandle.shine = 22.0; Obj door = create_obj(2, doorbody); door.material = vec3(0.68, 0.17, 0.20); - door.shine = 2.0; + door.shine = 0.2; float doorframe = ssubtract( sdf_box(roompos - vec3(0, 0.5, 0), vec3(2., 2.6, 0.1), 0), @@ -75,7 +76,7 @@ Obj scene(in vec3 p) { Obj walls = create_obj(2, min(min(doorframe, wallsides), roof)); walls.material = vec3(0.15, 0.28, 0.42); - debugshapesdist = min(debugshapesdist, sdf_circle(p - door1_light_position, 0.1)); + // debugshapesdist = min(debugshapesdist, sdf_circle(p - door1_light_position, 0.1)); Obj debug = create_obj(-1, debugshapesdist); debug.lighting = false; debug.material = vec3(0, 1, 0); @@ -145,13 +146,9 @@ float shadow_scene(in vec3 ray_origin, in vec3 ray_direction, in float light_int return res * res * (3.0 - 2.0 * res); } -void main() { - vec2 resolution = vec2(imageSize(output_image).xy); - float aspect_ratio = resolution.y / resolution.x; - vec2 uv = (gl_GlobalInvocationID.xy - resolution / 2) * vec2(1.0, aspect_ratio) / resolution; - +vec3 image(vec2 uv) { vec3 origin = vec3(0); - vec3 uv_direction = normalize((vec3(uv.x, uv.y, 1) - origin) * camera_transformation + origin); + vec3 uv_direction = normalize(vec3(uv.x, uv.y, 1)); Obj obj = ray_march_scene(camera_position, uv_direction); vec3 p = camera_position + uv_direction * obj.dist; @@ -168,23 +165,43 @@ void main() { // key_contrast *= shadow_scene(p, keyl_dir, 8.); key_contrast = clamp(key_contrast, 0, 1); - vec3 door1_ldir = normalize(door1_light_position - p); - float door1_contrast = 1.; - door1_contrast *= clamp(dot(normal, door1_ldir), 0, 1); - door1_contrast *= shadow_scene(p, door1_ldir, 128.); - door1_contrast = clamp(door1_contrast, 0, 1); + // vec3 door1_ldir = normalize(door1_light_position - p); + // float door1_contrast = 1.; + // door1_contrast *= clamp(dot(normal, door1_ldir), 0, 1); + // // door1_contrast *= shadow_scene(p, door1_ldir, 128.); + // door1_contrast = clamp(door1_contrast, 0, 1); - float contrast = max(key_contrast, door1_contrast); + float contrast = key_contrast; // max(key_contrast, door1_contrast); color *= clamp(ambient + contrast * (1.0 - ambient), 0, 1); - vec3 hal_door1 = normalize(door1_ldir - uv_direction); - float spec_door1 = - pow(clamp(dot(normal, hal_door1), 0.0, 1.0), 16.0) * contrast * + vec3 hal = normalize(keyl_dir - uv_direction); + float spec = + pow(clamp(dot(normal, hal), 0.0, 1.0), 16.0) * contrast * (0.04 + - 0.96 * pow(clamp(1.0 + dot(hal_door1, uv_direction), 0.0, 1.0), 5.0)); - color += obj.shine * spec_door1 * vec3(1.00, 0.70, 0.5); + 0.96 * pow(clamp(1.0 + dot(hal, uv_direction), 0.0, 1.0), 5.0)); + color += obj.shine * spec * vec3(1.00, 0.70, 0.5); } + return color; +} + +vec3 antialiased_image(vec2 uv) { + vec2 resolution = vec2(imageSize(output_image).xy); + float s = antialiasing / max(resolution.x, resolution.y); + vec3 sum = vec3(0); + int count = 0; + for (int i = -2; i < 2; i++) + for (int j = -2; j < 2; j++, count++) + sum += image(uv + vec2(i, j) * s); + return sum / count; +} + +void main() { + vec2 resolution = vec2(imageSize(output_image).xy); + float aspect_ratio = resolution.y / resolution.x; + vec2 uv = (gl_GlobalInvocationID.xy - resolution / 2) * vec2(1.0, aspect_ratio) / resolution; + + vec3 color = image(uv); color = clamp(color, 0, 1); imageStore(output_image, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1)); } -- cgit v1.3.1