UNPKG

playcanvas

Version:

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

3 lines (2 loc) 1.94 kB
declare const _default: "\n#if SH_BANDS > 0\n #ifndef SOG_V2\n uniform shN_mins: f32;\n uniform shN_maxs: f32;\n #endif\n\n fn readSHTexel(u: i32, v: i32) -> half3 {\n let t = textureLoad(sh_centroids, vec2i(u, v), 0);\n #ifdef SOG_V2\n let idx = vec3i(t.xyz * 255.0 + 0.5);\n return half3(vec3f(lutShN(idx.x), lutShN(idx.y), lutShN(idx.z)));\n #else\n return mix(half3(half(uniform.shN_mins)), half3(half(uniform.shN_maxs)), half3(t.xyz));\n #endif\n }\n\n fn readSHData(sh: ptr<function, array<half3, SH_COEFFS>>, scale: ptr<function, f32>) {\n // extract the 16-bit centroid palette index from sh_labels bytes 0 and 1\n let labels = textureLoad(sh_labels, splat.uv, 0);\n let n = i32(labels.x * 255.0 + 0.5) + i32(labels.y * 255.0 + 0.5) * 256;\n\n // calculate offset into the centroids texture (64 centroids per row, SH_COEFFS texels each)\n let u = (n % 64) * SH_COEFFS;\n let v = n / 64;\n\n // read consecutive texels (unrolled to avoid Dawn's forward progress volatile wrapper)\n sh[0] = readSHTexel(u, v);\n sh[1] = readSHTexel(u + 1, v);\n sh[2] = readSHTexel(u + 2, v);\n #if SH_BANDS > 1\n sh[3] = readSHTexel(u + 3, v);\n sh[4] = readSHTexel(u + 4, v);\n sh[5] = readSHTexel(u + 5, v);\n sh[6] = readSHTexel(u + 6, v);\n sh[7] = readSHTexel(u + 7, v);\n #endif\n #if SH_BANDS > 2\n sh[8] = readSHTexel(u + 8, v);\n sh[9] = readSHTexel(u + 9, v);\n sh[10] = readSHTexel(u + 10, v);\n sh[11] = readSHTexel(u + 11, v);\n sh[12] = readSHTexel(u + 12, v);\n sh[13] = readSHTexel(u + 13, v);\n sh[14] = readSHTexel(u + 14, v);\n #endif\n\n *scale = 1.0;\n }\n#endif\n"; export default _default;