forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			50 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								// Exclusive to volumetric light for now
							 | 
						||
| 
								 | 
							
								#version 450
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "compiled.inc"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uniform sampler2D tex;
							 | 
						||
| 
								 | 
							
								uniform vec2 dir;
							 | 
						||
| 
								 | 
							
								uniform vec2 screenSize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								in vec2 texCoord;
							 | 
						||
| 
								 | 
							
								out float fragColor;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const float weight[10] = float[] (0.132572, 0.125472, 0.106373, 0.08078, 0.05495, 0.033482, 0.018275, 0.008934, 0.003912, 0.001535);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float normpdf(float x, float sigma) {
							 | 
						||
| 
								 | 
							
									return 0.39894 * exp(-0.5 * x * x / (sigma * sigma)) / sigma;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float normpdf3(vec3 v, float sigma) {
							 | 
						||
| 
								 | 
							
									return 0.39894 * exp(-0.5 * dot(v, v) / (sigma * sigma)) / sigma;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void main() {
							 | 
						||
| 
								 | 
							
									vec2 step = (dir / screenSize.xy);
							 | 
						||
| 
								 | 
							
									vec3 colf = textureLod(tex, texCoord, 0.0).rgb * weight[0];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									float col;
							 | 
						||
| 
								 | 
							
									float sumfactor = 0.0;
							 | 
						||
| 
								 | 
							
									float factor;
							 | 
						||
| 
								 | 
							
									float f = 1.0 / normpdf(0.0, 1.0);
							 | 
						||
| 
								 | 
							
									fragColor = 0.0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for (int i = 1; i < 10; i++) {
							 | 
						||
| 
								 | 
							
										float fw = f * weight[i];
							 | 
						||
| 
								 | 
							
										vec2 s = step * (float(i) + 0.5);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										col = textureLod(tex, texCoord + s, 0.0).r;
							 | 
						||
| 
								 | 
							
										factor = normpdf3(col - colf, 1.0) * fw;
							 | 
						||
| 
								 | 
							
										sumfactor += factor;
							 | 
						||
| 
								 | 
							
										fragColor += factor * col;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										col = textureLod(tex, texCoord - s, 0.0).r;
							 | 
						||
| 
								 | 
							
										factor = normpdf3(col - colf, 1.0) * fw;
							 | 
						||
| 
								 | 
							
										sumfactor += factor;
							 | 
						||
| 
								 | 
							
										fragColor += factor * col;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fragColor /= sumfactor;
							 | 
						||
| 
								 | 
							
								}
							 |