Buckets:
| export default /* glsl */` | |
| #define PI 3.141592653589793 | |
| #define PI2 6.283185307179586 | |
| #define PI_HALF 1.5707963267948966 | |
| #define RECIPROCAL_PI 0.3183098861837907 | |
| #define RECIPROCAL_PI2 0.15915494309189535 | |
| #define EPSILON 1e-6 | |
| #ifndef saturate | |
| // <tonemapping_pars_fragment> may have defined saturate() already | |
| #define saturate( a ) clamp( a, 0.0, 1.0 ) | |
| #endif | |
| #define whiteComplement( a ) ( 1.0 - saturate( a ) ) | |
| float pow2( const in float x ) { return x*x; } | |
| vec3 pow2( const in vec3 x ) { return x*x; } | |
| float pow3( const in float x ) { return x*x*x; } | |
| float pow4( const in float x ) { float x2 = x*x; return x2*x2; } | |
| float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } | |
| float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } | |
| // expects values in the range of [0,1]x[0,1], returns values in the [0,1] range. | |
| // do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/ | |
| highp float rand( const in vec2 uv ) { | |
| const highp float a = 12.9898, b = 78.233, c = 43758.5453; | |
| highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); | |
| return fract( sin( sn ) * c ); | |
| } | |
| #ifdef HIGH_PRECISION | |
| float precisionSafeLength( vec3 v ) { return length( v ); } | |
| #else | |
| float precisionSafeLength( vec3 v ) { | |
| float maxComponent = max3( abs( v ) ); | |
| return length( v / maxComponent ) * maxComponent; | |
| } | |
| #endif | |
| struct IncidentLight { | |
| vec3 color; | |
| vec3 direction; | |
| bool visible; | |
| }; | |
| struct ReflectedLight { | |
| vec3 directDiffuse; | |
| vec3 directSpecular; | |
| vec3 indirectDiffuse; | |
| vec3 indirectSpecular; | |
| }; | |
| #ifdef USE_ALPHAHASH | |
| varying vec3 vPosition; | |
| #endif | |
| vec3 transformDirection( in vec3 dir, in mat4 matrix ) { | |
| return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); | |
| } | |
| vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { | |
| // dir can be either a direction vector or a normal vector | |
| // upper-left 3x3 of matrix is assumed to be orthogonal | |
| return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); | |
| } | |
| mat3 transposeMat3( const in mat3 m ) { | |
| mat3 tmp; | |
| tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); | |
| tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); | |
| tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); | |
| return tmp; | |
| } | |
| bool isPerspectiveMatrix( mat4 m ) { | |
| return m[ 2 ][ 3 ] == - 1.0; | |
| } | |
| vec2 equirectUv( in vec3 dir ) { | |
| // dir is assumed to be unit length | |
| float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; | |
| float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; | |
| return vec2( u, v ); | |
| } | |
| vec3 BRDF_Lambert( const in vec3 diffuseColor ) { | |
| return RECIPROCAL_PI * diffuseColor; | |
| } // validated | |
| vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { | |
| // Original approximation by Christophe Schlick '94 | |
| // float fresnel = pow( 1.0 - dotVH, 5.0 ); | |
| // Optimized variant (presented by Epic at SIGGRAPH '13) | |
| // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf | |
| float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); | |
| return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); | |
| } // validated | |
| float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { | |
| // Original approximation by Christophe Schlick '94 | |
| // float fresnel = pow( 1.0 - dotVH, 5.0 ); | |
| // Optimized variant (presented by Epic at SIGGRAPH '13) | |
| // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf | |
| float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); | |
| return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); | |
| } // validated | |
| `; | |
Xet Storage Details
- Size:
- 3.59 kB
- Xet hash:
- aec15afc0b3b21e831a13d2ce3bceff4c1d03dc612f2a63998b8cf9b319f0877
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.