{ "name":"BaseColor", "ubo":[ "UBOGlobal", "UBOModel" ], "options": { "modelMatrix":true }, "uniforms":[ { "name":"u_color", "type":"rgba" } ] }<\shader> [ { "name":"BaseColorRed", "uniforms":[{ "name":"u_color", "value":"ff0000ff" }], "options": { "blend":true, "sampleAlphaCoverage":false } }, { "name":"BaseColorGreen", "uniforms":[{ "name":"u_color", "value":"00ff00ff" }], "options": { "blend":true, "sampleAlphaCoverage":false } }, { "name":"BaseColorGray", "uniforms":[{ "name":"u_color", "value":"a0a0a0aa" }], "options": { "blend":true, "sampleAlphaCoverage":false } }, { "name":"BaseColorDGray", "uniforms":[{ "name":"u_color", "value":"808080ff" }], "options": { "blend":true, "sampleAlphaCoverage":false } }, { "name":"BaseColorDDGray", "uniforms":[{ "name":"u_color", "value":"404040ff" }], "options": { "blend":true, "sampleAlphaCoverage":false } }, { "name":"BaseColorBlack", "uniforms":[{ "name":"u_color", "value":"000000ff" }], "options": { "blend":true, "sampleAlphaCoverage":false } } ]<\materials> #version 300 es layout(location=0) in vec3 a_position; uniform UBOGlobal{ mat4 projViewMatrix; vec3 cameraPos; float globalTime; vec2 screenSize; float deltaTime; }; uniform UBOModel{ mat4 modelMatrix; mat3 normalMatrix; }; void main(void){ //vec4 world_pos = modelMatrix * vec4( a_position, 1.0 ); //gl_Position = projViewMatrix * world_pos; gl_PointSize = 8.0; gl_Position = projViewMatrix * modelMatrix * vec4( a_position, 1.0 ); } <\vertex> #version 300 es precision mediump float; const vec2 UV_CENTER = vec2( 0.5 ); uniform vec4 u_color; out vec4 oFragColor; void main(void){ vec2 coord = gl_PointCoord - UV_CENTER; oFragColor = vec4( u_color.rgb, smoothstep( 0.5, 0.45, length(coord) ) ); //oFragColor = u_color; } <\fragment>