纹理工具
纹理工具
前言
Texture(UI)和Sprite(UI)的区别
- Texture是一张独立的图片,不依托于任何图集,这张Texture有自己的材质和Shader,每一个Texture都将消耗一个DrawCall去渲染,每一个Texture都将独立进行加载。
- Texture作为低层次的图像数据结构,需要考虑的是如何高效地存储和访问像素数据。它需要支持各种图像处理操作和着色器操作,因此其设计更为通用。
- Sprite是为2D图形和UI设计的图像类型,提供了丰富的2D图形处理功能,如九宫格切片和填充模式。是Unity为拓展Texture的功能而创造的一种格式。
- Sprite作为高层次的2D图形结构,需要支持一系列2D图形特性,如九宫格切片(9-slicing)、动画、多帧处理等。这些特性是为2D渲染和UI优化设计的,使用Sprite可以更高效地进行2D渲染和批处理。
什么时候使用Texture
- 当图片过大,不适合合成图集的时候,可以使用Texture,此时要尽量的保证图片的宽高是2的N次方(1. 底层图形学只识别2的N次方的图片,OpenGL仅支持分辨率为2^m * 2^n的纹理,非2的N次方的图片会转化为2的N次方的图片,这个转化的过程十分耗时; 2. ios pvrtc的原因,有些GPU不支持NPOT,遇到NPOT会有一个转换POT的过程,浪费性能)。
- 当图片为2的N次方,但出现的频率不高时,可以使用Texture。例如游戏的背景和Logo。
- 修改更改特别频繁的图片,为了减少每次更新维护的麻烦,可以考了使用Texture。
- 如果图片很小且多处会使用到(例如按钮)尽量将图片放入图集,通过精灵的方式使用。
- 总结:Texture的功能是在屏幕上显示一张图片,在这一点上它和Sprite有着相似的功能,但是UITexture会消耗单独的DrawCall去渲染,并会单独加载进内存,所以会增大程序性能的开销。
什么时候使用Sprite
- 如果要显示一张图片,它的形状不规则,长宽不是2的N次方,那么一定要使用Sprite。因为unity对非2的N次方的图片处理要慢很多。
- 如果这个UI元件频繁的出现,那么最好使用UISprite,因为这样它就可以和图集一起被载入内存,并不用新增一个DrawCall去渲染它。
- 对于一些展示型的图片,不会变化,只是起一个展示的作用,例如弹框上的花纹装饰,顶部的花圈, 一般都以Sprite的方式来制作和展示。
存储纹理的结构体
c#
1 | [ ] |
从Image组件中获取纹理数据
c#
1 | /// <summary> |
从RawImage组件中获取纹理数据
c#
1 |
获取Texture2D的渲染数据
c#
1 | // 精灵图缩放比例 |
获取Texture的渲染数据
c#
1 | /// <summary> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SleepyLoser's Blog!
评论
Powered By Valine
v1.5.1
v1.5.1