declare const _default: "\n// means dequantization (both V1 and V2)\nuniform means_mins: vec3f;\nuniform means_maxs: vec3f;\n\n#ifndef SOG_V2\n    // V1: linear min/max dequantization (no codebooks)\n    uniform scales_mins: vec3f;\n    uniform scales_maxs: vec3f;\n    uniform sh0_mins: vec4f;\n    uniform sh0_maxs: vec4f;\n#endif\n\n// SH_C0 coefficient for 0th degree spherical harmonic\nconst SH_C0: f32 = 0.28209479177387814;\nconst norm: f32 = sqrt(2.0);\n\n#ifdef SOG_V2\n    // 256x1 RGBA32F LUT:\n    //   .r = scales codebook, .g = sh0 codebook, .b = shN codebook, .a unused\n    fn lutScales(b: i32) -> f32 { return textureLoad(sogCodebook, vec2i(b, 0), 0).r; }\n    fn lutSh0(b: i32) -> f32    { return textureLoad(sogCodebook, vec2i(b, 0), 0).g; }\n    fn lutShN(b: i32) -> f32    { return textureLoad(sogCodebook, vec2i(b, 0), 0).b; }\n#endif\n\n// read the model-space center of the gaussian (16-bit per-axis, low + high byte)\nfn getCenter() -> vec3f {\n    let l = textureLoad(means_l, splat.uv, 0).xyz;\n    let u = textureLoad(means_u, splat.uv, 0).xyz;\n    let n = (l + u * 256.0) / 257.0;\n    let v = mix(uniform.means_mins, uniform.means_maxs, n);\n    return sign(v) * (exp(abs(v)) - 1.0);\n}\n\n// decode rotation quaternion (3 components + 2-bit mode selecting the omitted axis)\nfn getRotation() -> vec4f {\n    let q = textureLoad(quats, splat.uv, 0);\n    let qmode = u32(q.w * 255.0 + 0.5) - 252u;\n    let abc = (q.xyz - 0.5) * norm;\n    let d = sqrt(max(0.0, 1.0 - dot(abc, abc)));\n\n    var quat: vec4f;\n    if (qmode == 0u) {\n        quat = vec4f(d, abc);\n    } else if (qmode == 1u) {\n        quat = vec4f(abc.x, d, abc.y, abc.z);\n    } else if (qmode == 2u) {\n        quat = vec4f(abc.x, abc.y, d, abc.z);\n    } else {\n        quat = vec4f(abc.x, abc.y, abc.z, d);\n    }\n    return quat;\n}\n\nfn getScale() -> vec3f {\n    let s = textureLoad(scales, splat.uv, 0).xyz;\n    var logS: vec3f;\n    #ifdef SOG_V2\n        let i = vec3i(s * 255.0 + 0.5);\n        logS = vec3f(lutScales(i.x), lutScales(i.y), lutScales(i.z));\n    #else\n        logS = mix(uniform.scales_mins, uniform.scales_maxs, s);\n    #endif\n    return exp(logS);\n}\n\nfn getColor() -> vec4f {\n    let c = textureLoad(sh0, splat.uv, 0);\n    var rgb: vec3f;\n    var alpha: f32;\n    #ifdef SOG_V2\n        let i = vec3i(c.xyz * 255.0 + 0.5);\n        rgb = vec3f(lutSh0(i.x), lutSh0(i.y), lutSh0(i.z));\n        alpha = c.w;\n    #else\n        rgb = mix(uniform.sh0_mins.xyz, uniform.sh0_maxs.xyz, c.xyz);\n        let logitAlpha = mix(uniform.sh0_mins.w, uniform.sh0_maxs.w, c.w);\n        alpha = 1.0 / (1.0 + exp(-logitAlpha));\n    #endif\n    return vec4f(vec3f(0.5) + rgb * SH_C0, alpha);\n}\n\n#include \"gsplatSogSHVS\"\n";
export default _default;
