playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
3 lines (2 loc) • 3 kB
TypeScript
declare const _default: "\n\n#define GSPLAT_CENTER_NOPROJ\n\n#include \"gsplatHelpersVS\"\n#include \"gsplatFormatVS\"\n#include \"gsplatStructsVS\"\n#include \"gsplatDeclarationsVS\"\n#include \"gsplatCenterVS\"\n#include \"gsplatEvalSHVS\"\n#include \"gsplatQuatToMat3VS\"\n#include \"gsplatReadVS\"\n#include \"gsplatWorkBufferOutputVS\"\n#include \"gsplatWriteVS\"\n#include \"gsplatModifyVS\"\n\n// Packed sub-draw params: (sourceBase, colStart, rowWidth, rowStart)\nflat varying ivec4 vSubDraw;\n\nuniform vec3 uColorMultiply;\n\n// pre-computed model matrix decomposition\nuniform vec3 model_scale;\nuniform vec4 model_rotation; // (x,y,z,w) format\n\n#ifdef GSPLAT_ID\n uniform uint uId;\n#endif\n\nvoid main(void) {\n // Compute source index from packed sub-draw varying: (sourceBase, colStart, rowWidth, rowStart)\n int localRow = int(gl_FragCoord.y) - vSubDraw.w;\n int localCol = int(gl_FragCoord.x) - vSubDraw.y;\n uint originalIndex = uint(vSubDraw.x + localRow * vSubDraw.z + localCol);\n\n // Initialize global splat for format read functions\n setSplat(originalIndex);\n\n // read center in local space\n vec3 modelCenter = getCenter();\n\n // compute world-space center for storage\n vec3 worldCenter = (matrix_model * vec4(modelCenter, 1.0)).xyz;\n SplatCenter center;\n initCenter(modelCenter, center);\n\n // Get source rotation and scale\n // getRotation() returns (w,x,y,z) format, convert to (x,y,z,w) for quatMul\n vec4 srcRotation = getRotation().yzwx;\n vec3 srcScale = getScale();\n\n // Combine: world = model * source (both in x,y,z,w format)\n vec4 worldRotation = quatMul(model_rotation, srcRotation);\n // Ensure w is positive so sqrt() reconstruction works correctly\n // (quaternions q and -q represent the same rotation)\n if (worldRotation.w < 0.0) {\n worldRotation = -worldRotation;\n }\n vec3 worldScale = model_scale * srcScale;\n\n // Apply custom center modification\n vec3 originalCenter = worldCenter;\n modifySplatCenter(worldCenter);\n\n // Apply custom rotation/scale modification\n modifySplatRotationScale(originalCenter, worldCenter, worldRotation, worldScale);\n\n // read color\n vec4 color = getColor();\n\n // evaluate spherical harmonics\n #if SH_BANDS > 0\n // calculate the model-space view direction\n vec3 dir = normalize(center.view * mat3(center.modelView));\n\n // read sh coefficients\n vec3 sh[SH_COEFFS];\n float scale;\n readSHData(sh, scale);\n\n // evaluate\n color.xyz += evalSH(sh, dir) * scale;\n #endif\n\n // Apply custom color modification\n modifySplatColor(worldCenter, color);\n\n color.xyz *= uColorMultiply;\n\n // write color + transform using format-specific encoding\n writeSplat(worldCenter, worldRotation, worldScale, color);\n\n #ifdef GSPLAT_ID\n writePcId(uvec4(uId, 0u, 0u, 0u));\n #endif\n}\n";
export default _default;