MagicNStuff/game/tools/debug_outline.gdshader
2026-03-23 20:25:06 +01:00

44 lines
1.3 KiB
Plaintext

shader_type spatial;
render_mode unshaded, cull_disabled;
// From ChatGPT since I'm not that good at shaders (and for a debug visualizer it's okay).
uniform vec4 base_color : source_color = vec4(0.3, 1.0, 0.3, 0.12);
uniform vec4 edge_color : source_color = vec4(1.0, 1.0, 0.5, 0.7);
uniform float edge_power = 2.0;
instance uniform vec3 box_center;
instance uniform vec3 box_extents;
void fragment() {
// Fresnel edge factor (works from inside + outside)
float ndv = abs(dot(NORMAL, VIEW));
float fresnel = pow(1.0 - ndv, edge_power);
fresnel = clamp(fresnel + 0.15, 0.0, 1.0);
// Subtle face shading for depth cues
float lighting = dot(NORMAL, vec3(0.3, 0.7, 0.6)) * 0.5 + 0.5;
// Camera distance to box center
vec3 cam_to_center = CAMERA_POSITION_WORLD - box_center;
float cam_dist = length(cam_to_center);
// Normalize distance (tweak as needed)
float cam_proximity = clamp(1.0 - cam_dist / 100.0, 0.0, 1.0);
// Camera-based tint (blue far → red near)
vec3 cam_tint = mix(vec3(0.2, 0.6, 1.0), vec3(1.0, 0.3, 0.2), cam_proximity);
// Base color + edge highlight
vec3 color = mix(base_color.rgb, edge_color.rgb, fresnel);
color *= lighting;
// Subtle camera-based tint
color = mix(color, cam_tint, 0.2 * cam_proximity);
float alpha = mix(base_color.a, edge_color.a, fresnel);
ALBEDO = color;
ALPHA = alpha;
}