UNPKG

three-aseprite

Version:

Three.js mesh rendering for Aseprite JSON sprite sheets

12 lines (11 loc) 2.78 kB
import { RawShaderMaterial, Texture } from "three"; export declare const asepriteShaderMaterialVertexShader = "\nprecision mediump float;\n\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float opacity;\nuniform vec3 color;\nuniform vec4 fade;\nuniform vec2 outlineSpread;\n\nattribute vec3 position;\nattribute vec2 uv;\nattribute vec3 vtxColor;\nattribute vec4 vtxFade;\nattribute float vtxOpacity;\nattribute vec2 vtxOutlineSpread;\n\nvarying vec2 vUv;\nvarying vec3 vColor;\nvarying vec4 vFade;\nvarying float vOpacity;\nvarying vec2 vOutlineSpread;\n\nvoid main() {\n\tvUv = uv;\n\n\tvColor = color * vtxColor;\n\n\tvFade = vec4(0.0, 0.0, 0.0, 0.0);\n\tif (fade.a > 0.0) vFade = fade;\n\tif (vtxFade.a > 0.0) vFade = vFade * ((vFade.a + vtxFade.a) - vtxFade.a) + vtxFade * vtxFade.a;\n\t\n\tvOpacity = vtxOpacity * opacity;\n\n\t// Support layer-specific outline sizes.\n\tvOutlineSpread = vec2(0.0, 0.0);\n\tvOutlineSpread += outlineSpread;\n\tvOutlineSpread *= vtxOutlineSpread;\n\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"; export declare const asepriteShaderMaterialFragmentShader = "\nprecision mediump float;\n\nuniform sampler2D map;\nuniform vec4 outline;\n\nvarying vec2 vUv;\nvarying vec3 vColor;\nvarying vec4 vFade;\nvarying float vOpacity;\nvarying vec2 vOutlineSpread;\n\nvoid main() {\n\tvec4 color = texture2D(map, vUv);\n\n\t// Support material and vertex coloration.\n\tcolor.rgb = color.rgb * vColor;\n\n\t// Support fading to a color.\n\tif (vFade.a > 0.0) {\n\t\tcolor.rgb = color.rgb * (1.0 - vFade.a) + vFade.rgb * vFade.a;\n\t}\n\t\n\t// Support outlines.\n\tif (color.a < 1.0 && (vOutlineSpread.x > 0.0 || vOutlineSpread.y > 0.0)) {\n\t\tvec4 color1 = texture2D(map, vUv - vec2(vOutlineSpread.x, 0.0));\n\t\tvec4 color2 = texture2D(map, vUv + vec2(vOutlineSpread.x, 0.0));\n\t\tvec4 color3 = texture2D(map, vUv - vec2(0.0, vOutlineSpread.y));\n\t\tvec4 color4 = texture2D(map, vUv + vec2(0.0, vOutlineSpread.y));\n\t\tif (color1.a > color.a && color1.a > 0.5) {\n\t\t\tcolor = outline;\n\t\t}\n\t\telse if (color2.a > color.a && color2.a > 0.5) {\n\t\t\tcolor = outline;\n\t\t}\n\t\telse if (color3.a > color.a && color3.a > 0.5) {\n\t\t\tcolor = outline;\n\t\t}\n\t\telse if (color4.a > color.a && color4.a > 0.5) {\n\t\t\tcolor = outline;\n\t\t}\n\t}\n\n\t// Support opacity.\n\tcolor.a = color.a * vOpacity;\n\n\t// Discard at low opacity.\n\tif (color.a < 0.01) discard;\n\tgl_FragColor = color;\n}\n"; export type AsepriteShaderMaterialProps = { texture: Texture; }; /** * Creates a ShaderMaterial used to render sprites. * @param props - properties of the material. */ export declare function createAspriteShaderMaterial(props: AsepriteShaderMaterialProps): RawShaderMaterial;