Buckets:
| export default /* glsl */` | |
| vec3 packNormalToRGB( const in vec3 normal ) { | |
| return normalize( normal ) * 0.5 + 0.5; | |
| } | |
| vec3 unpackRGBToNormal( const in vec3 rgb ) { | |
| return 2.0 * rgb.xyz - 1.0; | |
| } | |
| const float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1) | |
| const float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1) | |
| const float ShiftRight8 = 1. / 256.; | |
| const float Inv255 = 1. / 255.; | |
| const vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 ); | |
| const vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g ); | |
| const vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b ); | |
| const vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a ); | |
| vec4 packDepthToRGBA( const in float v ) { | |
| if( v <= 0.0 ) | |
| return vec4( 0., 0., 0., 0. ); | |
| if( v >= 1.0 ) | |
| return vec4( 1., 1., 1., 1. ); | |
| float vuf; | |
| float af = modf( v * PackFactors.a, vuf ); | |
| float bf = modf( vuf * ShiftRight8, vuf ); | |
| float gf = modf( vuf * ShiftRight8, vuf ); | |
| return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af ); | |
| } | |
| vec3 packDepthToRGB( const in float v ) { | |
| if( v <= 0.0 ) | |
| return vec3( 0., 0., 0. ); | |
| if( v >= 1.0 ) | |
| return vec3( 1., 1., 1. ); | |
| float vuf; | |
| float bf = modf( v * PackFactors.b, vuf ); | |
| float gf = modf( vuf * ShiftRight8, vuf ); | |
| // the 0.9999 tweak is unimportant, very tiny empirical improvement | |
| // return vec3( vuf * Inv255, gf * PackUpscale, bf * 0.9999 ); | |
| return vec3( vuf * Inv255, gf * PackUpscale, bf ); | |
| } | |
| vec2 packDepthToRG( const in float v ) { | |
| if( v <= 0.0 ) | |
| return vec2( 0., 0. ); | |
| if( v >= 1.0 ) | |
| return vec2( 1., 1. ); | |
| float vuf; | |
| float gf = modf( v * 256., vuf ); | |
| return vec2( vuf * Inv255, gf ); | |
| } | |
| float unpackRGBAToDepth( const in vec4 v ) { | |
| return dot( v, UnpackFactors4 ); | |
| } | |
| float unpackRGBToDepth( const in vec3 v ) { | |
| return dot( v, UnpackFactors3 ); | |
| } | |
| float unpackRGToDepth( const in vec2 v ) { | |
| return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g; | |
| } | |
| vec4 pack2HalfToRGBA( const in vec2 v ) { | |
| vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); | |
| return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); | |
| } | |
| vec2 unpackRGBATo2Half( const in vec4 v ) { | |
| return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); | |
| } | |
| // NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera | |
| float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { | |
| // -near maps to 0; -far maps to 1 | |
| return ( viewZ + near ) / ( near - far ); | |
| } | |
| float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) { | |
| // maps orthographic depth in [ 0, 1 ] to viewZ | |
| return depth * ( near - far ) - near; | |
| } | |
| // NOTE: https://twitter.com/gonnavis/status/1377183786949959682 | |
| float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { | |
| // -near maps to 0; -far maps to 1 | |
| return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); | |
| } | |
| float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { | |
| // maps perspective depth in [ 0, 1 ] to viewZ | |
| return ( near * far ) / ( ( far - near ) * depth - far ); | |
| } | |
| `; | |
Xet Storage Details
- Size:
- 3.24 kB
- Xet hash:
- 07ddeb0420fa64f8ee7da7324a081ba5fc069c5b90793e1901832df554f8caf0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.