playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
3 lines (2 loc) • 2.89 kB
TypeScript
declare const _default: "\n\n#if SH_BANDS > 0\n\n// unpack signed 11 10 11 bits\nfn unpack111011s(bits: u32) -> vec3f {\n return (vec3f((vec3<u32>(bits) >> vec3<u32>(21u, 11u, 0u)) & vec3<u32>(0x7ffu, 0x3ffu, 0x7ffu)) / vec3f(2047.0, 1023.0, 2047.0)) * 2.0 - 1.0;\n}\n\nstruct ScaleAndSH {\n scale: f32,\n a: vec3f,\n b: vec3f,\n c: vec3f\n};\n\n// fetch quantized spherical harmonic coefficients\nfn fetchScale(t_in: vec4<u32>) -> ScaleAndSH {\n var result: ScaleAndSH;\n result.scale = bitcast<f32>(t_in.x);\n result.a = unpack111011s(t_in.y);\n result.b = unpack111011s(t_in.z);\n result.c = unpack111011s(t_in.w);\n return result;\n}\n\nstruct SH {\n a: vec3f,\n b: vec3f,\n c: vec3f,\n d: vec3f\n};\n\n// fetch quantized spherical harmonic coefficients\nfn fetch4(t_in: vec4<u32>) -> SH {\n var result: SH;\n result.a = unpack111011s(t_in.x);\n result.b = unpack111011s(t_in.y);\n result.c = unpack111011s(t_in.z);\n result.d = unpack111011s(t_in.w);\n return result;\n}\n\nfn fetch1(t_in: u32) -> vec3f {\n return unpack111011s(t_in);\n}\n\n#if SH_BANDS == 1\n fn readSHData(sh: ptr<function, array<half3, 3>>, scale: ptr<function, f32>) {\n let result = fetchScale(loadSplatSH_1to3());\n *scale = result.scale;\n sh[0] = half3(result.a);\n sh[1] = half3(result.b);\n sh[2] = half3(result.c);\n }\n#elif SH_BANDS == 2\n fn readSHData(sh: ptr<function, array<half3, 8>>, scale: ptr<function, f32>) {\n let first: ScaleAndSH = fetchScale(loadSplatSH_1to3());\n *scale = first.scale;\n sh[0] = half3(first.a);\n sh[1] = half3(first.b);\n sh[2] = half3(first.c);\n\n let second: SH = fetch4(loadSplatSH_4to7());\n sh[3] = half3(second.a);\n sh[4] = half3(second.b);\n sh[5] = half3(second.c);\n sh[6] = half3(second.d);\n\n sh[7] = half3(fetch1(loadSplatSH_8to11().x));\n }\n#else\n fn readSHData(sh: ptr<function, array<half3, 15>>, scale: ptr<function, f32>) {\n let first: ScaleAndSH = fetchScale(loadSplatSH_1to3());\n *scale = first.scale;\n sh[0] = half3(first.a);\n sh[1] = half3(first.b);\n sh[2] = half3(first.c);\n\n let second: SH = fetch4(loadSplatSH_4to7());\n sh[3] = half3(second.a);\n sh[4] = half3(second.b);\n sh[5] = half3(second.c);\n sh[6] = half3(second.d);\n\n let third: SH = fetch4(loadSplatSH_8to11());\n sh[7] = half3(third.a);\n sh[8] = half3(third.b);\n sh[9] = half3(third.c);\n sh[10] = half3(third.d);\n\n let fourth: SH = fetch4(loadSplatSH_12to15());\n sh[11] = half3(fourth.a);\n sh[12] = half3(fourth.b);\n sh[13] = half3(fourth.c);\n sh[14] = half3(fourth.d);\n }\n#endif\n\n#endif\n";
export default _default;