{ "name" : "TextureUV", "ubo" : [ "UBOGlobal", "UBOModel" ], "uniforms" : [ { "name":"u_tex01", "type":"sampler2D" }, { "name":"u_texScale", "type":"vec2" } ] }<\shader> [ { "name" : "TextureUV", "options" : { "blend":true, "sampleAlphaCoverage":false, "cullFace":true }, "uniforms" : [ { "name":"u_tex01", "value":"tex01" }, { "name":"u_texScale", "value":[1,1] } ] } ]<\materials> #version 300 es layout(location=0) in vec3 a_position; layout(location=2) in vec2 a_uv; uniform UBOGlobal{ mat4 projViewMatrix; vec3 cameraPos; float globalTime; vec2 screenSize; }; uniform UBOModel{ mat4 modelMatrix; mat3 normalMatrix; }; uniform vec2 u_texScale; out vec2 v_uv; void main(void){ v_uv = a_uv * u_texScale; gl_Position = projViewMatrix * modelMatrix * vec4(a_position, 1.0); } <\vertex> #version 300 es precision mediump float; in vec2 v_uv; uniform sampler2D u_tex01; out vec4 oFragColor; void main(void){ oFragColor = texture( u_tex01, v_uv ); } <\fragment>