playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
36 lines (35 loc) • 1.04 kB
JavaScript
var gsplatPacking_default = `
uint pack8888(vec4 v) {
uvec4 t = uvec4(v * 255.0) << uvec4(24u, 16u, 8u, 0u);
return t.x | t.y | t.z | t.w;
}
uint pack101010(vec3 v) {
uvec3 t = uvec3(v * 1023.0) << uvec3(20u, 10u, 0u);
return t.x | t.y | t.z;
}
uint pack111110(vec3 v) {
uvec3 t = uvec3(v * vec3(2047.0, 2047.0, 1023.0)) << uvec3(21u, 10u, 0u);
return t.x | t.y | t.z;
}
vec4 unpack8888(uint v) {
return vec4((uvec4(v) >> uvec4(24u, 16u, 8u, 0u)) & 0xffu) / 255.0;
}
vec3 unpack101010(uint v) {
return vec3((uvec3(v) >> uvec3(20u, 10u, 0u)) & 0x3ffu) / 1023.0;
}
vec3 unpack111110(uint v) {
return vec3((uvec3(v) >> uvec3(21u, 10u, 0u)) & uvec3(0x7ffu, 0x7ffu, 0x3ffu)) / vec3(2047.0, 2047.0, 1023.0);
}
vec3 resolveCodebook(vec3 s, vec4 codebook[64]) {
uvec3 idx = uvec3(s * 255.0);
vec3 v = vec3(
codebook[idx.x >> 2u][idx.x & 3u],
codebook[idx.y >> 2u][idx.y & 3u],
codebook[idx.z >> 2u][idx.z & 3u]
);
return (v - codebook[0].x) / (codebook[63].w - codebook[0].x);
}
`;
export {
gsplatPacking_default as default
};