Merge pull request #2534 from rajgandhi1/shading

Improve shading to properly display blind holes #2161
This commit is contained in:
Hanno Braun 2025-06-18 11:05:52 +02:00 committed by GitHub
commit 6353d539bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -46,13 +46,21 @@ fn frag_face(in: VertexOutput) -> FragmentOutput {
fn frag_model(in: VertexOutput) -> FragmentOutput { fn frag_model(in: VertexOutput) -> FragmentOutput {
let light = vec3<f32>(0.0, 0.0, -1.0); let light = vec3<f32>(0.0, 0.0, -1.0);
// normal-based shading
let angle = acos(dot(light, -in.normal)); let angle = acos(dot(light, -in.normal));
let f_angle = angle / (pi * 0.75); let f_angle = angle / (pi * 0.75);
let f_normal = max(1.0 - f_angle, 0.0); let f_normal = max(1.0 - f_angle, 0.0);
// Depth-based shading to improve visibility of blind holes and recessed surfaces
let depth = in.position.z;
//50% max darkening
let depth_factor = 1.0 - depth * 0.5;
let final_shading = f_normal * depth_factor;
var out: FragmentOutput; var out: FragmentOutput;
out.color = vec4<f32>(in.color.rgb * f_normal, in.color.a); out.color = vec4<f32>(in.color.rgb * final_shading, in.color.a);
return out; return out;
} }