| 
									
										
										
										
											2025-01-19 20:35:51 +00:00
										 |  |  | 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) = 2; | 
					
						
							|  |  |  | 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; | 
					
						
							|  |  |  | uniform float opacityModulationStrength : hint_range(0,1) = 0.2; | 
					
						
							|  |  |  | uniform float opacityModulationDuration : hint_range(0,10) = 1; | 
					
						
							|  |  |  | uniform float scanLineAmount : hint_range(0,1) = 1; | 
					
						
							|  |  |  | uniform float scanLineDivisions = 50; | 
					
						
							|  |  |  | uniform float scanLineSpeed = 2; | 
					
						
							|  |  |  | varying vec4 appliedColor; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-21 20:58:56 +00:00
										 |  |  | void vertex() | 
					
						
							| 
									
										
										
										
											2025-01-19 20:35:51 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   float cameraDistance = distance( VERTEX, CAMERA_POSITION_WORLD ); | 
					
						
							|  |  |  |   float outlineSize = size * mapClamped( cameraDistance, closeDistance, farDistance, sizeCloseScale, sizeFarScale ); | 
					
						
							|  |  |  | 	VERTEX += NORMAL * outlineSize/500.0 * cameraDistance; | 
					
						
							| 
									
										
										
										
											2025-01-21 20:58:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   float sinTime = sin( mod( TIME, opacityModulationDuration ) / opacityModulationDuration * PI * 2.0 ) / 2.0; | 
					
						
							| 
									
										
										
										
											2025-01-19 20:35:51 +00:00
										 |  |  |   float alpha = 1.0 - opacityModulationStrength * 0.5 + sinTime * opacityModulationStrength; | 
					
						
							| 
									
										
										
										
											2025-01-21 20:58:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-19 20:35:51 +00:00
										 |  |  |   appliedColor = albedo; | 
					
						
							| 
									
										
										
										
											2025-01-21 20:58:56 +00:00
										 |  |  |   appliedColor.a *= alpha; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-19 20:35:51 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void fragment() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   vec2 sceenUV = SCREEN_UV; | 
					
						
							|  |  |  |   float scanline = mix( 1, mod( sceenUV.y * scanLineDivisions - TIME * scanLineSpeed, 1.0 ), scanLineAmount ); | 
					
						
							| 
									
										
										
										
											2025-01-21 20:58:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-19 20:35:51 +00:00
										 |  |  | 	ALBEDO = appliedColor.rgb; | 
					
						
							|  |  |  |   ALPHA = appliedColor.a * scanline; | 
					
						
							|  |  |  | } |