49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef _MATH_GLSL_
							 | 
						||
| 
								 | 
							
								#define _MATH_GLSL_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float hash(const vec2 p) {
							 | 
						||
| 
								 | 
							
									float h = dot(p, vec2(127.1, 311.7));
							 | 
						||
| 
								 | 
							
									return fract(sin(h) * 43758.5453123);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								vec2 envMapEquirect(const vec3 normal) {
							 | 
						||
| 
								 | 
							
									const float PI = 3.1415926535;
							 | 
						||
| 
								 | 
							
									const float PI2 = PI * 2.0;
							 | 
						||
| 
								 | 
							
									float phi = acos(normal.z);
							 | 
						||
| 
								 | 
							
									float theta = atan(-normal.y, normal.x) + PI;
							 | 
						||
| 
								 | 
							
									return vec2(theta / PI2, phi / PI);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float rand(const vec2 co) { // Unreliable
							 | 
						||
| 
								 | 
							
									return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								vec2 rand2(const vec2 coord) {
							 | 
						||
| 
								 | 
							
									const float width = 1100.0;
							 | 
						||
| 
								 | 
							
									const float height = 500.0;
							 | 
						||
| 
								 | 
							
									float noiseX = ((fract(1.0 - coord.s * (width / 2.0)) * 0.25) + (fract(coord.t * (height / 2.0)) * 0.75)) * 2.0 - 1.0;
							 | 
						||
| 
								 | 
							
									float noiseY = ((fract(1.0 - coord.s * (width / 2.0)) * 0.75) + (fract(coord.t * (height / 2.0)) * 0.25)) * 2.0 - 1.0;
							 | 
						||
| 
								 | 
							
									return vec2(noiseX, noiseY);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float linearize(const float depth, vec2 cameraProj) {
							 | 
						||
| 
								 | 
							
									// to viewz
							 | 
						||
| 
								 | 
							
									return cameraProj.y / (depth - cameraProj.x);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float attenuate(const float dist) {
							 | 
						||
| 
								 | 
							
								// float attenuate(float dist, float constant, float linear, float quadratic) {
							 | 
						||
| 
								 | 
							
									return 1.0 / (dist * dist);
							 | 
						||
| 
								 | 
							
									// 1.0 / (constant * 1.0)
							 | 
						||
| 
								 | 
							
									// 1.0 / (linear * dist)
							 | 
						||
| 
								 | 
							
									// 1.0 / (quadratic * dist * dist);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float safe_acos(const float x) {
							 | 
						||
| 
								 | 
							
									// acos is undefined if |x| > 1
							 | 
						||
| 
								 | 
							
									return acos(clamp(x, -1.0, 1.0));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |