colored shadows

This commit is contained in:
2024-06-07 21:32:00 -04:00
parent 7a2767a049
commit 47a4e4164d

View File

@@ -201,15 +201,15 @@ fn apply_group(
let full_pos = pos_view + dir_view * full_t; let full_pos = pos_view + dir_view * full_t;
// lighting // lighting
let shadow = trace_light(full_pos); let light = trace_light(full_pos);
let diffuse = max(dot(norm_light, normal) * 1.3 + 0.1, 0.0); let diffuse = max(dot(norm_light, normal) * 1.3 + 0.1, 0.0);
let ambient = 0.2; let ambient = 0.2;
let specular = (exp(max( let specular = (exp(max(
-(dot(reflect(dir_view.xyz, normal), norm_light) + 0.90) * 4.0, 0.0 -(dot(reflect(dir_view.xyz, normal), norm_light) + 0.90) * 4.0, 0.0
)) - 1.0) * shadow; )) - 1.0) * light;
let lighting = max(diffuse * shadow, ambient); let lighting = max(diffuse * light.a, ambient);
let new_rgb = min(vcolor.xyz * lighting + vec3<f32>(specular), vec3<f32>(1.0)); let new_rgb = min(vcolor.xyz * lighting + specular.xyz + light.xyz * vcolor.xyz, vec3<f32>(1.0));
let new_a = min(vcolor.a + specular, 1.0); let new_a = min(vcolor.a + specular.a, 1.0);
let color = vec4<f32>(new_rgb, new_a); let color = vec4<f32>(new_rgb, new_a);
// add hit // add hit
@@ -228,17 +228,19 @@ fn apply_group(
fn trace_light( fn trace_light(
pos: vec4<f32> pos: vec4<f32>
) -> f32 { ) -> vec4<f32> {
let dir = vec4<f32>(-normalize(GLOBAL_LIGHT), 0.0); let dir = vec4<f32>(-normalize(GLOBAL_LIGHT), 0.0);
var mask = 1.0; var mask = vec4<f32>(0.0);
let start = pos + dir * .001; let start = pos + dir * .001;
for (var gi: u32 = 0; gi < arrayLength(&voxel_groups); gi = gi + 1) { for (var gi: u32 = 0; gi < arrayLength(&voxel_groups); gi = gi + 1) {
let color = trace_one(gi, start, dir); let color = trace_one(gi, start, dir);
mask -= mask * color.a; mask += vec4<f32>(color.xyz * color.a * (1.0 - mask.a), (1.0 - mask.a) * color.a);
if mask <= .0001 { if mask.a > FULL_ALPHA {
return mask; break;
} }
} }
mask.a = 1.0 - mask.a;
mask = vec4<f32>(mask.a * mask.xyz, mask.a);
return mask; return mask;
} }