效果图:

shader代码:
Shader "Unlit/MaSaiKe"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_TillSize("Till Size",Range(0.001,0.05))=0.005
}
SubShader
{
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct a2v{
float4 vertex:POSITION;
float2 texcoord:TEXCOORD0;
};
struct v2f{
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
sampler2D _MainTex;
float _TillSize;
v2f vert(a2v v){
v2f o;
o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
o.uv=v.texcoord;
return o;
}
fixed4 frag(v2f i):SV_Target{
i.uv.x = floor(i.uv.x/_TillSize) * _TillSize;
i.uv.y = floor(i.uv.y/_TillSize) * _TillSize;
fixed4 col = tex2D(_MainTex,i.uv);
return col;
}
ENDCG
}
}
}
原理:将uv的坐标除以一个缩放值,然后向下(floor)或者向上(ceil)取值,在乘以缩放值,即可得到马赛克效果。
本文介绍了一种在Unity中实现马赛克效果的方法。通过使用自定义shader,该方法通过对纹理UV坐标的处理来达到马赛克效果,具体操作为将UV坐标除以一个特定的缩放值后进行向下取整,再乘以缩放值。
4万+

被折叠的 条评论
为什么被折叠?



