当前位置:   article > 正文

Unity图集、Image和SpriteRenderer_tight packing

tight packing

Unity图集、Image和SpriteRenderer


前言

最近好久没有写技术笔记了,今天继续回归日常学习的状态。


图集Tight Packing

Unity提供的SpriteAtlas有一个Tight Packing选项。这个选项勾选之后,图片就会按照它的Sprite Mesh来进行图集排布。可以大大提升图集的使用率,尤其是对于那些斜视角游戏。

但是使用Tight Packing会面临一个问题,就是默认情况下,Image使用的Mesh是Rect Mesh,也就是说在裁剪图集的时候,回把一些我们不想要的图片也裁剪进来。如下图:

Tight Packing
那我们不想要多余的图片怎么办呢?

那就需要让Image使用Sprite Mesh来渲染。Sprite Mesh的图集对应Sprite Mesh的Image,好像也没什么毛病。

在Image组件上选择Use Sprite Mesh即可。如下图:

Use Sprite Mesh
多余的图片是不是就没有了?

但是这也面临一个问题,使用Sprite Mesh会增加渲染的顶点数量,增加计算量,也会降低Overdraw。所以说,到底选不选择这种方案,就是一个trade off的过程了。对于一些渲染压力比较低内存压力比较高的游戏,采取这种方案还是很好的。


SpriteRenderer和Image

既然提到了图集,那么正好顺便总结一下SpriteRenderer和Image相关的区别知识点。


主要区别:
SpriteRendererImage
SpriteRenderer使用的是图片Mesh,增加顶点数的同时减少了OverdrawImage可以使用RectMesh也可以使用图片Mesh
SpriteRenderer就是Unity基本渲染器的一种,渲染顺序基于Sorting Layer等Image是基于Canvas绘制的,由底层计算的depth控制绘制顺序(具体可以参考我之前写的笔记
SpriteRenderer的SetPass基于动态合批和图集,同一批次的绘制中要尽可能减少切换材质的次数Image不管是不是一个图集,在不设置额外Material的情况下,同一Canvas下的SetPass就是1
SpriteRenderer在大量绘制的情况下,绘制成本开销会高,但移动、变化消耗几乎没有Image在大量绘制的情况下,Canvas会重用,绘制成本会很低,但是一旦移动、变化就会触发Canvas重绘,会产生很大开销

总得来说,就是各有利弊。


使用场景:

综合上述,对于大量静态图片,最好还是使用Image。

一旦这些图片需要移动、变化,要么把这些需要移动、变化的图片单独放在一个Canvas上,要么把它们做成SpriteRenderer。


小结

最近因为个人原因,很久没有总结技术笔记了。

现在算是回归初心了,总之继续总结笔记,学就完事了。


参考

https://tsubakit1.hateblo.jp/entry/2016/09/26/080000
https://forum.unity.com/threads/tight-packing-in-sprite-atlas-issue.701582/#post-4750916

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/106597
推荐阅读
相关标签
  

闽ICP备14008679号