在写shader的时候遇到的问题,最终返回的值总是按图片alpha非0的部分显示。
如下,片段着色器直接返回fixed4(1,1,1,1)时的图片显示:
发现原因是图片的设置里面,mesh type是Tight。官方文档说明:
设置fullrect时,会使用和图片纹理大小一样的矩形。
设置为Tight时,会基于alpha尽可能多的裁剪像素。
看下不同形状的裁剪情况:
原图 | 采样图 |
---|---|
纹理设置中的MeshType只对SpriteRenderer有效。所以在UI中使用shader没有出现这个问题(按照ImageType来画Mesh)。使用Tight的话,就意味着(可能)需要额外的内存,更多的顶点数,但overdraw少了。差别不是很大,实际使用按需求来就好。
overdraw | 顶点数 | |
---|---|---|
Tight | ||
Fullrect |