48 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								// NOTE: Shader automatically converted from Godot Engine 4.4.stable.mono's StandardMaterial3D.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								shader_type spatial;
							 | 
						||
| 
								 | 
							
								render_mode blend_mix, depth_draw_never, cull_back, diffuse_burley, specular_schlick_ggx, depth_test_disabled;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "res://addons/rokojori_action_library/Runtime/Shading/Library/Depth.gdshaderinc"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uniform vec4 albedo : source_color;
							 | 
						||
| 
								 | 
							
								uniform sampler2D albedoTexture : source_color, filter_linear_mipmap, repeat_enable;
							 | 
						||
| 
								 | 
							
								uniform sampler2D opacityTexture : source_color, filter_linear_mipmap, repeat_enable;
							 | 
						||
| 
								 | 
							
								uniform sampler2D depthTexture: hint_depth_texture;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uniform vec3 uv1_scale;
							 | 
						||
| 
								 | 
							
								uniform vec3 uv1_offset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uniform bool checkVisible = false;
							 | 
						||
| 
								 | 
							
								uniform float visibilityDistance = 1;
							 | 
						||
| 
								 | 
							
								uniform float visibilityDistanceScale = 0.01;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void vertex() 
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									UV = UV * uv1_scale.xy + uv1_offset.xy;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void fragment() 
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  vec3 viewPosition = VERTEX;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  bool visible = isVisibleAt( depthTexture, viewPosition, PROJECTION_MATRIX, INV_PROJECTION_MATRIX );
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  if ( checkVisible && ! visible )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    discard;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  vec3 depthViewPosition = getDepthViewPositionAtViewPosition( depthTexture, viewPosition, PROJECTION_MATRIX, INV_PROJECTION_MATRIX );
							 | 
						||
| 
								 | 
							
								  float dist = length( depthViewPosition - viewPosition );
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  float dVis = 1.0 - clamp( dist / ( visibilityDistance * visibilityDistanceScale ), 0, 1 );
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
									vec4 sampledAlbedo = texture( albedoTexture, UV );
							 | 
						||
| 
								 | 
							
								  vec4 sampledOpacity = texture( opacityTexture, UV );
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
									ALBEDO = albedo.rgb * sampledAlbedo.rgb;
							 | 
						||
| 
								 | 
							
									ALPHA *= albedo.a * sampledAlbedo.a * sampledOpacity.r * dVis;
							 | 
						||
| 
								 | 
							
								}
							 |