UNPKG

playcanvas

Version:

Open-source WebGL/WebGPU 3D engine for the web

88 lines (87 loc) 2.37 kB
var uncompressedSH_default = ` #if SH_BANDS > 0 fn unpack111011s(bits: u32) -> vec3f { 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; } struct ScaleAndSH { scale: f32, a: vec3f, b: vec3f, c: vec3f }; fn fetchScale(t_in: vec4<u32>) -> ScaleAndSH { var result: ScaleAndSH; result.scale = bitcast<f32>(t_in.x); result.a = unpack111011s(t_in.y); result.b = unpack111011s(t_in.z); result.c = unpack111011s(t_in.w); return result; } struct SH { a: vec3f, b: vec3f, c: vec3f, d: vec3f }; fn fetch4(t_in: vec4<u32>) -> SH { var result: SH; result.a = unpack111011s(t_in.x); result.b = unpack111011s(t_in.y); result.c = unpack111011s(t_in.z); result.d = unpack111011s(t_in.w); return result; } fn fetch1(t_in: u32) -> vec3f { return unpack111011s(t_in); } #if SH_BANDS == 1 fn readSHData(sh: ptr<function, array<half3, 3>>, scale: ptr<function, f32>) { let result = fetchScale(loadSplatSH_1to3()); *scale = result.scale; sh[0] = half3(result.a); sh[1] = half3(result.b); sh[2] = half3(result.c); } #elif SH_BANDS == 2 fn readSHData(sh: ptr<function, array<half3, 8>>, scale: ptr<function, f32>) { let first: ScaleAndSH = fetchScale(loadSplatSH_1to3()); *scale = first.scale; sh[0] = half3(first.a); sh[1] = half3(first.b); sh[2] = half3(first.c); let second: SH = fetch4(loadSplatSH_4to7()); sh[3] = half3(second.a); sh[4] = half3(second.b); sh[5] = half3(second.c); sh[6] = half3(second.d); sh[7] = half3(fetch1(loadSplatSH_8to11().x)); } #else fn readSHData(sh: ptr<function, array<half3, 15>>, scale: ptr<function, f32>) { let first: ScaleAndSH = fetchScale(loadSplatSH_1to3()); *scale = first.scale; sh[0] = half3(first.a); sh[1] = half3(first.b); sh[2] = half3(first.c); let second: SH = fetch4(loadSplatSH_4to7()); sh[3] = half3(second.a); sh[4] = half3(second.b); sh[5] = half3(second.c); sh[6] = half3(second.d); let third: SH = fetch4(loadSplatSH_8to11()); sh[7] = half3(third.a); sh[8] = half3(third.b); sh[9] = half3(third.c); sh[10] = half3(third.d); let fourth: SH = fetch4(loadSplatSH_12to15()); sh[11] = half3(fourth.a); sh[12] = half3(fourth.b); sh[13] = half3(fourth.c); sh[14] = half3(fourth.d); } #endif #endif `; export { uncompressedSH_default as default };