先上图:
原理:
在顶点着色器中先把uv乘以density,这样uv的range就从0 - 1变成了0 - density。
然后在片元着色器中把uv值取整再除以2,这样uv值就变成了0, 0.5, 1, 1.5, 2, 2.5 。。。
接着把x,y相加,值为0, 0.5, 1, 1.5 。。。
再取小数,值为0或者0.5
再乘以2,值为0或者1
最后取颜色。
然后是代码:
Shader "Custom/ShaderExample4"
{
Properties
{
_Density("Density", Range(2, 100)) = 30
}
SubShader
{
Pass
{
GLSLPROGRAM
uniform float _Density;
#ifdef VERTEX
//顶点着色器
out vec4 texUvCoords;
void main()
{
//把UV的值的范围扩大到0-50
texUvCoords = gl_MultiTexCoord0 * _Density;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
#endif
#ifdef FRAGMENT
//片元着色器
in vec4 texUvCoords;
void main()
{
//UV值取整然后除以2
vec4 c = floor(texUvCoords) / 2;
//fract() : 计算c.x + c.y结果的小数部分
float f = fract(c.x + c.y) * 2;
vec4 checker = vec4(f, f, f, 1.0);
gl_FragColor = checker;
}
#endif
ENDGLSL
}
}
}