IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity3D纹理介绍及优化 -> 正文阅读

[游戏开发]Unity3D纹理介绍及优化

Unity3D纹理介绍及优化

Unity3D对于图片的支持

  1. jpg : 有损压缩 文件小 不支持透明

  2. png: 无损压缩 文件小 支持透明

  3. tag:无所压缩 文件大 支持透明

  4. dds : 无损压缩 文件最小 支持透明 不支持iOS

无论任何格式的图片放入Unity后会被转换为Unity自身的Texture2D格式 ,Unity3D只识别2的N次方的图片,因此图片导入后悔自动转为符合标准大小的图片。因此不等价于贴图资源本身的大小。

如果原图不是2的幂次方,可以在advance设置Non Power of 2值,

  • ToNearest :转换成距离该图片最近的2的幂次方值。

  • ToLarger : 转换成比该图片大的2的幂次方值。

  • ToSmaller : 转换成比该图片小的2的幂次方值。

我们在项目中一般使用png和jpg文件

纹理资源项目管理

UI模块引用的纹理

Unity3D在搭建UI时有可能会发生下面几种问题。

引用外部的图片

外部图片是独立打包,然后动态加载的。所以UI模块不能引用外部图片,不然会在被引用的模块又打包进一张图片。

处理方式:获取UI模块下预设所引用的guid,然后在查找外部图片的guid,对比得到所引用的外部图片。

不允许各模块之间交叉引用图片

功能模块资源包都是根据包括进行AB包生成的,不允许各模块之间交叉引用图片。对于多个模块需要引用到的图片可以使用一个common包进行标志。

无用的纹理及时删除

将图片分为动态加载和静态加载两个目录,分析静态加载的图片目录将未被预制引用的纹理删除。对于动态目录则要结合实际项目进行定期检查。

纹理合批优化

合批优化

  1. UI中如非必要,Z轴统一设为0。如果有Z改变了,尽量通过Group来规整在一起

  2. 注意组件的遮挡关系,尤其是Text被Image遮挡的情况。

  3. 打图集。

  4. 图集的管理选择以单个面板来管理图集,而不是使用文件夹形式。

  5. Image组件不要选择None,也会使用一个默认图片且无法与图集合批,选用一张图片来统一使用并打入到图集中。

  6. 不要设计很多层级的UI,会全部绘制。

UI组件优化

  1. 不要使用透明为0的图片当作按钮,改用NoOverdrawImage来代替

//不渲染但可以相应点击 public class NoOverdrawImage : Graphic{     public override void Rebuild(CanvasUpdate update){}}  

  1. 使是RectMask2D来代替Mask

  2. 全屏UI关闭主相机,只保留UI相机

  3. UI相机看不到的物体也会被渲染,占用DC,可以先禁用它们

材质引用的纹理

纹理图片除了最常用的UI模块,制作特效时和模型贴图也是引用了纹理;这些纹理图片的引用就跟UI模块的引用有一些不同。这些引用主是要引用材质球,材质球引用shader,最后在shader引用纹理。

通过图集的方式优化DrawCall

通常为了优化DrawCall,我们会把同一个UI界面上的图片放进一个图集里。图集大小要控制在1024*1024以内,因为超过1024*1024的图集占用的内存会非常大。

移动端的纹理资源格式介绍及推荐

Android

  1. 如果对贴图质量要求高,UI格式可使用RGBA32/RGB32

  2. 如果对质量无特殊要求而且目标机型是中高端机型,使用ETC2

  3. 如果是全机型通用,使用ECT1拆分alpha通道的方式。

IOS

  1. 如果对贴图质量要求高,UI格式可使用RGBA32/RGB32。

  2. 如果对质量无特殊要求,使用RGB Compressed PVRTC 4拆分alpha通道的方式。

不同平台选择合适的图片压缩算法

  1. PC: DXT1 无透明的图 压缩比高,生成图片最小(适合jpg)

  2. DXT5 适合有透明度的图

  3. iOS: PVRTC 4bit 有无透明无关

  4. Android: ETC2 透明图片

推荐android使用ETC2, ios使用ASTC,或者PVRTC。

资源加载建议

1、严格控制RGBA32和ARGB32纹理的使用,在保证视觉效果的前提下,尽可能采用“够用就好”的原则,降低纹理资源的分辨率,以及使用硬件支持的纹理格式。

2、在硬件格式(ETC、PVRTC)无法满足视觉效果时,RGBA16格式是一种较为理想的折中选择,既可以增加视觉效果,又可以保持较低的加载耗时。

3、严格检查纹理资源的Mipmap功能,特别注意UI纹理的Mipmap是否开启。有不少项目的UI纹理均开启了Mipmap功能,不仅造成了内存占用上的浪费,同时也增加了不小的加载时间。

4、ETC2对于支持OpenGL ES3.0的Android移动设备来说,是一个很好的处理半透明的纹理格式。但是,如果你的游戏需要在大量OpenGL ES2.0的设备上进行运行,那么我们不建议使用ETC2格式纹理。因为不仅会造成大量的内存占用(ETC2转成RGBA32),同时也增加一定的加载时间。下图为测试2中所用的测试纹理在三星S3和S4设备上加载性能表现。可以看出,在OpenGL ES2.0设备上,ETC2格式纹理的加载要明显高于ETC1格式,且略高于RGBA16格式纹理。因此,建议研发团队在项目中谨慎使用ETC2格式纹理。

MiniMap功能介绍

Mipmap在UI贴图上一定要取消勾选。它有点类似于LOD技术,但是不同的是,LOD针对的是模型资源,而Mipmap针对的是纹理贴图,勾选Mipmap后,Unity3D会生成八个精度不同的贴图,根据贴图与摄像机距离选择使用不同精度的贴图,距离摄像机越远,显示的贴图像素越低,反之,像素越高。所以勾选Mipmap必然占内存,大概会将内存提升30%,因为大多数UI图片都是渲染在屏幕的最上层,就没必要勾选。对于具有较大纵深感的3D游戏,3D场景模型和角色一般是建议勾选Mipmap,能有效有效降低渲染带宽的压力,提升游戏的渲染效率。

运行时动态图集技术

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:31:04  更:2021-09-26 10:33:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年3日历 -2024/3/29 7:19:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码