aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources/shaders/mrdoor.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/resources/shaders/mrdoor.glsl')
-rw-r--r--src/main/resources/shaders/mrdoor.glsl67
1 files changed, 42 insertions, 25 deletions
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 <noise>
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));
}