shader_type spatial; render_mode blend_mix, world_vertex_coords, depth_draw_opaque, cull_front, diffuse_burley, specular_schlick_ggx, unshaded; #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Math.gdshaderinc" #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Transform.gdshaderinc" #include "res://addons/rokojori_action_library/Runtime/Shading/Library/Noise.gdshaderinc" uniform vec4 albedo : source_color; uniform float size:hint_range(0,10) = 1; uniform float sizeCloseScale : hint_range(0,10) = 1; uniform float sizeFarScale : hint_range(0,10) = 0.5; uniform float closeDistance = 20; uniform float farDistance = 40; void vertex() { float cameraDistance = distance( VERTEX, CAMERA_POSITION_WORLD ); float outlineSize = size * mapClamped( cameraDistance, closeDistance, farDistance, sizeCloseScale, sizeFarScale ); VERTEX += NORMAL * outlineSize/500.0 * cameraDistance; } void fragment() { ALBEDO = albedo.rgb; ALPHA = albedo.a; }