forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			46 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#version 450
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "compiled.inc"
							 | 
						||
| 
								 | 
							
								#include "std/gbuffer.glsl"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uniform sampler2D tex;
							 | 
						||
| 
								 | 
							
								uniform sampler2D gbuffer0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uniform vec2 dirInv; // texStep
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								in vec2 texCoord;
							 | 
						||
| 
								 | 
							
								out float fragColor;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const float blurWeights[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
							 | 
						||
| 
								 | 
							
								// const float blurWeights[10] = float[] (0.132572, 0.125472, 0.106373, 0.08078, 0.05495, 0.033482, 0.018275, 0.008934, 0.003912, 0.001535);
							 | 
						||
| 
								 | 
							
								const float discardThreshold = 0.95;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float doBlur(const float blurWeight, const int pos, const vec3 nor, const vec2 texCoord) {
							 | 
						||
| 
								 | 
							
									const float posadd = pos + 0.5;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									vec3 nor2 = getNor(textureLod(gbuffer0, texCoord + pos * dirInv, 0.0).rg);
							 | 
						||
| 
								 | 
							
									float influenceFactor = step(discardThreshold, dot(nor2, nor));
							 | 
						||
| 
								 | 
							
									float col = textureLod(tex, texCoord + posadd * dirInv, 0.0).r;
							 | 
						||
| 
								 | 
							
									fragColor += col * blurWeight * influenceFactor;
							 | 
						||
| 
								 | 
							
									float weight = blurWeight * influenceFactor;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									nor2 = getNor(textureLod(gbuffer0, texCoord - pos * dirInv, 0.0).rg);
							 | 
						||
| 
								 | 
							
									influenceFactor = step(discardThreshold, dot(nor2, nor));
							 | 
						||
| 
								 | 
							
									col = textureLod(tex, texCoord - posadd * dirInv, 0.0).r;
							 | 
						||
| 
								 | 
							
									fragColor += col * blurWeight * influenceFactor;
							 | 
						||
| 
								 | 
							
									weight += blurWeight * influenceFactor;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									return weight;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void main() {
							 | 
						||
| 
								 | 
							
									vec3 nor = getNor(textureLod(gbuffer0, texCoord, 0.0).rg);
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									fragColor = textureLod(tex, texCoord, 0.0).r * blurWeights[0];
							 | 
						||
| 
								 | 
							
									float weight = blurWeights[0];
							 | 
						||
| 
								 | 
							
									for (int i = 1; i < 5; i++) {
							 | 
						||
| 
								 | 
							
										weight += doBlur(blurWeights[i], i, nor, texCoord);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fragColor = fragColor / weight;
							 | 
						||
| 
								 | 
							
								}
							 |