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 |