mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-30 23:15:32 +01:00 
			
		
		
		
	Fragment color for nodes is now calculated from: * Texture color, highlighted by artificial light if present (light color conveyed via vertex color). * Texture color highlighted by natural light (conveyed via vertex color) filtered by shadow. * Reflected day/moonlight filtered by shadow (color and intensity), assuming some portion of the light is directly reflected from the materials.
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| uniform sampler2D ColorMapSampler;
 | |
| varying vec4 tPos;
 | |
| 
 | |
| #ifdef COLORED_SHADOWS
 | |
| varying vec3 varColor;
 | |
| 
 | |
| // c_precision of 128 fits within 7 base-10 digits
 | |
| const float c_precision = 128.0;
 | |
| const float c_precisionp1 = c_precision + 1.0;
 | |
| 
 | |
| float packColor(vec3 color)
 | |
| {
 | |
| 	return floor(color.b * c_precision + 0.5)
 | |
| 		+ floor(color.g * c_precision + 0.5) * c_precisionp1
 | |
| 		+ floor(color.r * c_precision + 0.5) * c_precisionp1 * c_precisionp1;
 | |
| }
 | |
| 
 | |
| const vec3 black = vec3(0.0);
 | |
| #endif
 | |
| 
 | |
| void main()
 | |
| {
 | |
| 	vec4 col = texture2D(ColorMapSampler, gl_TexCoord[0].st);
 | |
| #ifndef COLORED_SHADOWS
 | |
| 	if (col.a < 0.5)
 | |
| 		discard;
 | |
| #endif
 | |
| 
 | |
| 	float depth = 0.5 + tPos.z * 0.5;
 | |
| 	// ToDo: Liso: Apply movement on waving plants
 | |
| 	// depth in [0, 1] for texture
 | |
| 
 | |
| 	//col.rgb = col.a == 1.0 ? vec3(1.0) : col.rgb;
 | |
| #ifdef COLORED_SHADOWS
 | |
| 	col.rgb *= varColor.rgb;
 | |
| 	// premultiply color alpha (see-through side)
 | |
| 	float packedColor = packColor(col.rgb * (1.0 - col.a));
 | |
| 	gl_FragColor = vec4(depth, packedColor, 0.0,1.0);
 | |
| #else
 | |
| 	gl_FragColor = vec4(depth, 0.0, 0.0, 1.0);
 | |
| #endif
 | |
| }
 |