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; }