在写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

相关文章:

  • 2021-12-25
  • 2022-12-23
  • 2022-01-11
  • 2021-05-06
  • 2021-11-01
  • 2021-08-24
  • 2022-12-23
  • 2022-01-13
猜你喜欢
  • 2022-12-23
  • 2021-06-16
  • 2021-06-04
  • 2021-10-12
  • 2021-11-04
  • 2022-01-19
相关资源
相似解决方案