playcanvas
Version:
PlayCanvas WebGL game engine
60 lines (58 loc) • 1.4 kB
JavaScript
var gsplatPS = `
varying id: f32;
uniform alphaClip: f32;
varying vLinearDepth: f32;
const EXP_A: f32 = 12102203.0;
const EXP_BC_RMS: i32 = 1064866808;
fn fastExp(x: f32) -> f32 {
var i: i32 = i32(EXP_A * x) + EXP_BC_RMS;
return bitcast<f32>(i);
}
varying gaussianUV: vec2f;
varying gaussianColor: vec4f;
@fragment
fn fragmentMain(input: FragmentInput) -> FragmentOutput {
var output: FragmentOutput;
let A: f32 = dot(gaussianUV, gaussianUV);
if (A > 1.0) {
discard;
return output;
}
var alpha: f32 = fastExp(-A * 4.0) * gaussianColor.a;
if (alpha < uniform.alphaClip) {
discard;
return output;
}
output.color = getPickOutput();
output.color = vec4f(0.0, 0.0, 0.0, 1.0);
output.color = float2vec4(vLinearDepth);
if (alpha < (1.0 / 255.0)) {
discard;
return output;
}
opacityDither(&alpha, id * 0.013);
output.color = vec4f(input.gaussianColor.xyz * alpha, alpha);
return output;
}`;
export { gsplatPS as default };