playcanvas
Version:
PlayCanvas WebGL game engine
75 lines (55 loc) • 1.6 kB
JavaScript
var gsplatPS = /* glsl */ `
varying float id;
uniform float alphaClip;
varying float vLinearDepth;
// Fast approximate e^x based on https://nic.schraudolph.org/pubs/Schraudolph99.pdf
const float EXP_A = 12102203.0; // ≈ 2^23 / ln(2)
const int EXP_BC_RMS = 1064866808; // (127 << 23) - 60801 * 8
float fastExp(float x) {
int i = int(EXP_A * x) + EXP_BC_RMS;
return intBitsToFloat(i);
}
varying mediump vec2 gaussianUV;
varying mediump vec4 gaussianColor;
void main(void) {
mediump float A = dot(gaussianUV, gaussianUV);
if (A > 1.0) {
discard;
}
// evaluate alpha
mediump float alpha = fastExp(-A * 4.0) * gaussianColor.a;
if (alpha < alphaClip) {
discard;
}
gl_FragColor = getPickOutput();
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
gl_FragColor = float2vec4(vLinearDepth);
if (alpha < 1.0 / 255.0) {
discard;
}
opacityDither(alpha, id * 0.013);
gl_FragColor = vec4(gaussianColor.xyz * alpha, alpha);
}
`;
export { gsplatPS as default };