playcanvas
Version:
PlayCanvas WebGL game engine
3 lines (2 loc) • 3.31 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 var splatSH_1to3: texture_2d<u32>;\n\n fn readSHData(source: ptr<function, SplatSource>, sh: ptr<function, array<vec3f, 3>>, scale: ptr<function, f32>) {\n let result = fetchScale(textureLoad(splatSH_1to3, source.uv, 0));\n *scale = result.scale;\n sh[0] = result.a;\n sh[1] = result.b;\n sh[2] = result.c;\n }\n#elif SH_BANDS == 2\n var splatSH_1to3: texture_2d<u32>;\n var splatSH_4to7: texture_2d<u32>;\n var splatSH_8to11: texture_2d<u32>;\n\n fn readSHData(source: ptr<function, SplatSource>, sh: ptr<function, array<vec3f, 8>>, scale: ptr<function, f32>) {\n let first: ScaleAndSH = fetchScale(textureLoad(splatSH_1to3, source.uv, 0));\n *scale = first.scale;\n sh[0] = first.a;\n sh[1] = first.b;\n sh[2] = first.c;\n\n let second: SH = fetch4(textureLoad(splatSH_4to7, source.uv, 0));\n sh[3] = second.a;\n sh[4] = second.b;\n sh[5] = second.c;\n sh[6] = second.d;\n\n sh[7] = fetch1(textureLoad(splatSH_8to11, source.uv, 0).x);\n }\n#else\n var splatSH_1to3: texture_2d<u32>;\n var splatSH_4to7: texture_2d<u32>;\n var splatSH_8to11: texture_2d<u32>;\n var splatSH_12to15: texture_2d<u32>;\n\n fn readSHData(source: ptr<function, SplatSource>, sh: ptr<function, array<vec3f, 15>>, scale: ptr<function, f32>) {\n let first: ScaleAndSH = fetchScale(textureLoad(splatSH_1to3, source.uv, 0));\n *scale = first.scale;\n sh[0] = first.a;\n sh[1] = first.b;\n sh[2] = first.c;\n\n let second: SH = fetch4(textureLoad(splatSH_4to7, source.uv, 0));\n sh[3] = second.a;\n sh[4] = second.b;\n sh[5] = second.c;\n sh[6] = second.d;\n\n let third: SH = fetch4(textureLoad(splatSH_8to11, source.uv, 0));\n sh[7] = third.a;\n sh[8] = third.b;\n sh[9] = third.c;\n sh[10] = third.d;\n\n let fourth: SH = fetch4(textureLoad(splatSH_12to15, source.uv, 0));\n sh[11] = fourth.a;\n sh[12] = fourth.b;\n sh[13] = fourth.c;\n sh[14] = fourth.d;\n }\n#endif\n\n#endif\n";
export default _default;