playcanvas
Version:
PlayCanvas WebGL game engine
4 lines (2 loc) • 2.06 kB
JavaScript
var msdfPS = "\nuniform sampler2D texture_msdfMap;\nfloat median(float r, float g, float b) {\n return max(min(r, g), min(max(r, g), b));\n}\nfloat map (float min, float max, float v) {\n return (v - min) / (max - min);\n}\nuniform float font_sdfIntensity;\nuniform float font_pxrange;\nuniform float font_textureWidth;\n#ifndef LIT_MSDF_TEXT_ATTRIBUTE\n uniform vec4 outline_color;\n uniform float outline_thickness;\n uniform vec4 shadow_color;\n uniform vec2 shadow_offset;\n#else\n varying vec4 outline_color;\n varying float outline_thickness;\n varying vec4 shadow_color;\n varying vec2 shadow_offset;\n#endif\nvec4 applyMsdf(vec4 color) {\n color.rgb = gammaCorrectInput(color.rgb);\n vec3 tsample = texture2D(texture_msdfMap, vUv0).rgb;\n vec2 uvShdw = vUv0 - shadow_offset;\n vec3 ssample = texture2D(texture_msdfMap, uvShdw).rgb;\n float sigDist = median(tsample.r, tsample.g, tsample.b);\n float sigDistShdw = median(ssample.r, ssample.g, ssample.b);\n float smoothingMax = 0.2;\n vec2 w = fwidth(vUv0);\n float smoothing = clamp(w.x * font_textureWidth / font_pxrange, 0.0, smoothingMax);\n float mapMin = 0.05;\n float mapMax = clamp(1.0 - font_sdfIntensity, mapMin, 1.0);\n float sigDistInner = map(mapMin, mapMax, sigDist);\n float sigDistOutline = map(mapMin, mapMax, sigDist + outline_thickness);\n sigDistShdw = map(mapMin, mapMax, sigDistShdw + outline_thickness);\n float center = 0.5;\n float inside = smoothstep(center-smoothing, center+smoothing, sigDistInner);\n float outline = smoothstep(center-smoothing, center+smoothing, sigDistOutline);\n float shadow = smoothstep(center-smoothing, center+smoothing, sigDistShdw);\n vec4 tcolor = (outline > inside) ? outline * vec4(outline_color.a * outline_color.rgb, outline_color.a) : vec4(0.0);\n tcolor = mix(tcolor, color, inside);\n vec4 scolor = (shadow > outline) ? shadow * vec4(shadow_color.a * shadow_color.rgb, shadow_color.a) : tcolor;\n tcolor = mix(scolor, tcolor, outline);\n tcolor.rgb = gammaCorrectOutput(tcolor.rgb);\n \n return tcolor;\n}\n";
export { msdfPS as default };