unity中Sprite render与纹理的mesh type

在写shader的时候遇到的问题,最终返回的值总是按图片alpha非0的部分显示。
如下,片段着色器直接返回fixed4(1,1,1,1)时的图片显示:
unity中Sprite render与纹理的mesh typeunity中Sprite render与纹理的mesh type
发现原因是图片的设置里面,mesh type是Tight。官方文档说明:
unity中Sprite render与纹理的mesh type
设置fullrect时,会使用和图片纹理大小一样的矩形。
设置为Tight时,会基于alpha尽可能多的裁剪像素。
看下不同形状的裁剪情况:

原图 采样图
unity中Sprite render与纹理的mesh type unity中Sprite render与纹理的mesh type
unity中Sprite render与纹理的mesh type unity中Sprite render与纹理的mesh type
unity中Sprite render与纹理的mesh type unity中Sprite render与纹理的mesh type
unity中Sprite render与纹理的mesh type unity中Sprite render与纹理的mesh type

纹理设置中的MeshType只对SpriteRenderer有效。所以在UI中使用shader没有出现这个问题(按照ImageType来画Mesh)。使用Tight的话,就意味着(可能)需要额外的内存,更多的顶点数,但overdraw少了。差别不是很大,实际使用按需求来就好。

overdraw 顶点数
Tight unity中Sprite render与纹理的mesh type unity中Sprite render与纹理的mesh type
Fullrect unity中Sprite render与纹理的mesh type unity中Sprite render与纹理的mesh type