Unity Runtime动态图集
动态图集概念:
在游戏中经常有道具列表、玩家列表等Icon需要部分展示,而由于Icon总数过多放一起打图集需要很多张图集,而使用时只可能取其中一张中的一个Icon,造成显存带宽浪费。
动态图集的概念就这样孕育而生:即在游戏运行时根据需要把散图动态打成图集,以此降低DrawCall。
怎样把纹理渲染到图集上:
unity里将一个Texture2D渲染到另一张Texture2D大致有四种方法:
(1)Graphics.Blit(Texture source,RenderTexture dest,Material mat),使用Shader进行复制Texture2D。
(2)GL编程 Low-level graphics library,作用跟Graphics.Blit差不多,但是实现起来比较麻烦。
(3)Texture2D的 Color[] GetPixels()以及 void SetPixels(int x, int y, int blockWidth, int blockHeight, Color[] colors);调用GetPixels的时候,这个Texture2D图片必须要勾选Read/Write Enabled, 读写纹理unity将创建纹理副本,这个Texture2D图片要在CPU和GPU中各占一份内存。
(4)Graphics.CopyTexture() GPU级别的接口函数,跟CPU没什么关联,所以无论是效率还是内存,都是最优解。然后并不是所有手机的GPU都支持这个接口,通过SystemInfo.copyTextureSupport接口可以得知GPU是否支持这个接口,而且有的格式的图片如PVRTC这种不是基于块的格式,是不支持Copy的,所以限制性较大。
具体实现工程我已经放到GitHub:https://github.com/Cxihu/CxihuRuntimeDynamicAtlas
本文地址:https://blog.csdn.net/cxihu/article/details/110194133
上一篇: 微信app照片和视频怎么关闭?
下一篇: 初学者应该看的Webpack完整指南