declare const _default: "\n\nuniform matrix_model: mat4x4f;\nuniform matrix_view: mat4x4f;\n#ifndef GSPLAT_CENTER_NOPROJ\n    uniform camera_params: vec4f;             // 1 / far, far, near, isOrtho\n    uniform matrix_projection: mat4x4f;\n    #ifdef GSPLAT_FISHEYE\n        uniform fisheye_k: f32;\n        uniform fisheye_inv_k: f32;           // 1.0 / fisheye_k (precomputed on CPU)\n        uniform fisheye_projMat00: f32;       // projection scale X (precomputed on CPU)\n        uniform fisheye_projMat11: f32;       // projection scale Y (precomputed on CPU)\n    #endif\n#endif\n\n// project the model space gaussian center to view and clip space\nfn initCenter(modelCenter: vec3f, center: ptr<function, SplatCenter>) -> bool {\n    let modelView: mat4x4f = uniform.matrix_view * uniform.matrix_model;\n    let centerView: vec4f = modelView * vec4f(modelCenter, 1.0);\n\n    #ifndef GSPLAT_CENTER_NOPROJ\n\n        #ifdef GSPLAT_FISHEYE\n\n            // Generalized fisheye: g(\u03B8) = k\u00B7tan(\u03B8/k)\n            // k=2: stereographic, k\u2192\u221E: equidistant\n            let v: vec3f = centerView.xyz;\n            let r_xy: f32 = length(v.xy);\n            let neg_z: f32 = -v.z;\n            let theta: f32 = atan2(r_xy, neg_z);\n\n            // Cull near the singularity at \u03B8 = k\u00B7\u03C0/2, and at camera origin\n            let maxTheta: f32 = min(uniform.fisheye_k * 1.5707963, 3.13);\n            if (theta > maxTheta - 0.01 || dot(v, v) < 0.0001) {\n                return false;\n            }\n\n            let tk: f32 = theta * uniform.fisheye_inv_k;\n            let sin_tk: f32 = sin(tk);\n            let cos_tk: f32 = cos(tk);\n            let g_theta: f32 = uniform.fisheye_k * sin_tk / cos_tk;\n            let fisheye_s: f32 = select(select(0.0, 1.0 / neg_z, neg_z > 0.0), g_theta / r_xy, r_xy > 1e-4);\n\n            let ndc: vec2f = vec2f(uniform.fisheye_projMat00 * fisheye_s * v.x, uniform.fisheye_projMat11 * fisheye_s * v.y);\n\n            let near: f32 = uniform.camera_params.z;\n            let far: f32 = uniform.camera_params.y;\n            let linearDepth: f32 = neg_z;\n            let depthNdc: f32 = clamp((linearDepth - near) / (far - near), 0.0, 1.0);\n\n            center.proj = vec4f(ndc, depthNdc, 1.0);\n            center.projMat00 = uniform.fisheye_projMat00;\n            center.fisheyeSinTK = sin_tk;\n            center.fisheyeCosTK = cos_tk;\n            center.fisheyeRxy = r_xy;\n\n        #else\n\n            // early out if splat is behind the camera (perspective only)\n            // orthographic projections don't need this check as frustum culling handles it\n            if (uniform.camera_params.w != 1.0 && centerView.z > 0.0) {\n                return false;\n            }\n\n            var centerProj: vec4f = uniform.matrix_projection * centerView;\n\n            // ensure gaussians are not clipped by camera near and far\n            centerProj.z = clamp(centerProj.z, 0.0, abs(centerProj.w));\n\n            center.proj = centerProj;\n            center.projMat00 = uniform.matrix_projection[0][0];\n\n        #endif\n\n    #endif\n\n    center.view = centerView.xyz / centerView.w;\n    center.modelView = modelView;\n    return true;\n}\n";
export default _default;
