vec4 packFloatToRgba(float _value) { const vec4 shift = vec4(256 * 256 * 256, 256 * 256, 256, 1.0); const vec4 mask = vec4(0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0); vec4 comp = fract(_value * shift); comp -= comp.xxyz * mask; return comp; } float unpackRgbaToFloat(vec4 _rgba) { const vec4 shift = vec4(1.0 / (256.0 * 256.0 * 256.0), 1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0); return dot(_rgba, shift); } vec2 packHalfFloat(float _value) { const vec2 shift = vec2(256, 1.0); const vec2 mask = vec2(0, 1.0 / 256.0); vec2 comp = fract(_value * shift); comp -= comp.xx * mask; return comp; } float unpackHalfFloat(vec2 _rg) { const vec2 shift = vec2(1.0 / 256.0, 1.0); return dot(_rg, shift); }