playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
3 lines (2 loc) • 2.69 kB
TypeScript
declare const _default: "\n #if SH_BANDS == 1\n const SH_COEFFS: i32 = 3;\n #elif SH_BANDS == 2\n const SH_COEFFS: i32 = 8;\n #elif SH_BANDS == 3\n const SH_COEFFS: i32 = 15;\n #else\n const SH_COEFFS: i32 = 0;\n #endif\n\n #if SH_BANDS > 0\n\n const SH_C1: half = half(0.4886025119029199);\n\n #if SH_BANDS > 1\n const SH_C2_0: half = half(1.0925484305920792);\n const SH_C2_1: half = half(-1.0925484305920792);\n const SH_C2_2: half = half(0.31539156525252005);\n const SH_C2_3: half = half(-1.0925484305920792);\n const SH_C2_4: half = half(0.5462742152960396);\n #endif\n\n #if SH_BANDS > 2\n const SH_C3_0: half = half(-0.5900435899266435);\n const SH_C3_1: half = half(2.890611442640554);\n const SH_C3_2: half = half(-0.4570457994644658);\n const SH_C3_3: half = half(0.3731763325901154);\n const SH_C3_4: half = half(-0.4570457994644658);\n const SH_C3_5: half = half(1.445305721320277);\n const SH_C3_6: half = half(-0.5900435899266435);\n #endif\n\n // see https://github.com/graphdeco-inria/gaussian-splatting/blob/main/utils/sh_utils.py\n fn evalSH(sh: ptr<function, array<half3, SH_COEFFS>>, dir: vec3f) -> half3 {\n let d: half3 = half3(dir);\n\n // 1st degree\n var result: half3 = SH_C1 * (-sh[0] * d.y + sh[1] * d.z - sh[2] * d.x);\n\n #if SH_BANDS > 1\n // 2nd degree\n let xx: half = d.x * d.x;\n let yy: half = d.y * d.y;\n let zz: half = d.z * d.z;\n let xy: half = d.x * d.y;\n let yz: half = d.y * d.z;\n let xz: half = d.x * d.z;\n\n result = result + (\n sh[3] * (SH_C2_0 * xy) +\n sh[4] * (SH_C2_1 * yz) +\n sh[5] * (SH_C2_2 * (half(2.0) * zz - xx - yy)) +\n sh[6] * (SH_C2_3 * xz) +\n sh[7] * (SH_C2_4 * (xx - yy))\n );\n #endif\n\n #if SH_BANDS > 2\n // 3rd degree\n result = result + (\n sh[8] * (SH_C3_0 * d.y * (half(3.0) * xx - yy)) +\n sh[9] * (SH_C3_1 * xy * d.z) +\n sh[10] * (SH_C3_2 * d.y * (half(4.0) * zz - xx - yy)) +\n sh[11] * (SH_C3_3 * d.z * (half(2.0) * zz - half(3.0) * xx - half(3.0) * yy)) +\n sh[12] * (SH_C3_4 * d.x * (half(4.0) * zz - xx - yy)) +\n sh[13] * (SH_C3_5 * d.z * (xx - yy)) +\n sh[14] * (SH_C3_6 * d.x * (xx - half(3.0) * yy))\n );\n #endif\n\n return result;\n }\n #endif\n";
export default _default;