欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Unity Runtime动态图集

程序员文章站 2022-03-14 19:53:14
动态图集概念:在游戏中经常有道具列表、玩家列表等Icon需要部分展示,而由于Icon总数过多放一起打图集需要很多张图集,而使用时只可能取其中一张,造成资源浪费。动态图集的概念就这样孕育而生:即在游戏运行时根据需要把散图动态打成图集,以此降低DrawCall。怎样把纹理渲染到图集上:unity里将一个Texture2D渲染到另一张Texture2D大致有四种方法:(1)Graphics.Blit(Texture source,RenderTexture dest,Material ma....

动态图集概念:

在游戏中经常有道具列表、玩家列表等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