forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
#version 450
 | 
						|
 | 
						|
#include "compiled.inc"
 | 
						|
 | 
						|
uniform sampler2D tex;
 | 
						|
uniform sampler2D tex2;
 | 
						|
#ifdef _Veloc
 | 
						|
uniform sampler2D sveloc;
 | 
						|
#endif
 | 
						|
 | 
						|
in vec2 texCoord;
 | 
						|
out vec4 fragColor;
 | 
						|
 | 
						|
const float SMAA_REPROJECTION_WEIGHT_SCALE = 30.0;
 | 
						|
 | 
						|
void main() {
 | 
						|
	vec4 current = textureLod(tex, texCoord, 0.0);
 | 
						|
 | 
						|
#ifdef _Veloc
 | 
						|
	// Velocity is assumed to be calculated for motion blur, so we need to inverse it for reprojection
 | 
						|
	vec2 velocity = -textureLod(sveloc, texCoord, 0.0).rg;
 | 
						|
 | 
						|
	#ifdef _InvY
 | 
						|
	velocity.y = -velocity.y;
 | 
						|
	#endif
 | 
						|
 | 
						|
	// Reproject current coordinates and fetch previous pixel
 | 
						|
	vec4 previous = textureLod(tex2, texCoord + velocity, 0.0);
 | 
						|
 | 
						|
	// Attenuate the previous pixel if the velocity is different
 | 
						|
	#ifdef _SMAA
 | 
						|
		float delta = abs(current.a * current.a - previous.a * previous.a) / 5.0;
 | 
						|
	#else
 | 
						|
		const float delta = 0.0;
 | 
						|
	#endif
 | 
						|
	float weight = 0.5 * clamp(1.0 - sqrt(delta) * SMAA_REPROJECTION_WEIGHT_SCALE, 0.0, 1.0);
 | 
						|
 | 
						|
	// Blend the pixels according to the calculated weight:
 | 
						|
	fragColor = vec4(mix(current.rgb, previous.rgb, weight), 1.0);
 | 
						|
#else
 | 
						|
	vec4 previous = textureLod(tex2, texCoord, 0.0);
 | 
						|
	fragColor = vec4(mix(current.rgb, previous.rgb, 0.5), 1.0);
 | 
						|
#endif
 | 
						|
}
 |