不管是绘制halftone图形,还是制作TriangularBillboard,都离不开一个环节,那就是格子的划分。
在格子的基础上,还可以发展出许多有趣的效果,最常见的就是像素化。
关于格子划分的问题,观看上一章:绘制halftone动画,实现星之卡比新星同盟切屏效果
首先增加两个property,用以控制在横向和纵向分格的数量。
Properties {
_MainTex ("Main Texture", 2D) = "white" {}
_Progress ("Progress", Range(0,1)) = 1.0
_SegmentX("Segment x", Float )=5
_SegmentY("Segment y", Float )=5
}
之后,在frag中,计算当前uv坐标所属的格子的中心位置,方法很简单,与前几章中使用的大同小异。对于将格子数量转换为每个格子在uv中所占的长度的计算,放在vert活着直接在脚本中算好传进来也都是可以的。
fixed4 frag(v2f i) : SV_Target {
float2 _Diameter=fixed2(1/ceil(_SegmentX),1/ceil(_SegmentY));
float2 center = float2(_Diameter.x*floor(i.uvORI.x/_Diameter.x), _Diameter.y*floor(i.uvORI.y/_Diameter.y));
center+=_Diameter/2;
return tex2D(_MainTex, center);
}
在计算出中心位置之后,直接返回中心的颜色,我们就可以得到一张对比强烈的像素图了。
如果需要颜色变化更柔和一点,同时采样中心点周围的几个坐标的颜色,并且按照你喜欢的方式为周围坐标的颜色加上权重即可。