Unity 优化合集

1️⃣ 贴图优化

1. Read/Write Enable

这个属性勾选后允许你在运行时读取和写入纹理数据,这对于需要实时生成内容或者需要动态修改纹理的场合非常有用但在大部分情况下这是不必要的。如果打开这个属性,会使运行时贴图大小翻倍,内存中会额外存储一份贴图数据。所以默认关闭这个属性,在需要的时候开启。

Pasted image 20240511175434

2. Mipmap

优点:会优化显存带宽,用来减少渲染,因为可以根据实际情况,会选择适合的贴图来渲染,距离摄像机越远,显示的贴图像素越低,反之,像素越高!

缺点:会占用内存,因为mipmap会根据摄像机远近不同而生成对应的贴图,所以必然占内存!

MipMap可以用于跑酷类游戏,当角色靠近时,贴图清晰显示,否则模糊显示。

如果我们使用的贴图不需要这样效果的话,就一定要把Generate Mip Maps选项和Read/Write Enabled选项取消勾选!因为Mipmap会十分占内存!
Mipmap会让你的包占更大的容量!

Pasted image 20240511175540

3. 贴图压缩

优点:可以加快加载速度,也可以减少内存的占用。
缺点:不同的压缩格式在不同的平台上可能会有兼容性问题,压缩可能导致丢失纹理细节。
Pasted image 20240511174646

[RGBA Compressed]
RGBA Compressed: 是一种通过压缩的方式来存储RGBA(红色、绿色、蓝色和透明度)的四个通道的图片格式。

优点:
体积小,节省空间:通过对RGBA通道进行压缩,相较于未压缩的RGBA格式,可以大大降低文件的体积,节省存储空间。

完整的色彩信息:由于RGBA Compressed同时包含了红色、绿色、蓝色和透明度四个通道,因此能够完整且详细地表现图像的色彩信息。

透明度通道:不仅可以存储RGB色彩信息,还可以存储透明度信息,在进行复杂的图像编辑和动画制作时非常有用。

缺点:
有损压缩:虽然RGBA Compressed可以有效地减少文件大小,但它是一种有损压缩,因此可能会在一定程度上降低图片的质量。

兼容性问题:尽管RGBA Compressed格式可以提供丰富的色彩和透明度信息,但并非所有的图像处理软件或设备都能完全支持此格式,可能存在兼容性问题。

处理速度:由于需要进行压缩和解压缩操作,所以在处理大量的或者高分辨率的图像时,可能会相较于其他未压缩的格式更为耗时。

[DXT]
DXT:全称DirectX Texture Compression Format,是由Nvidia开发的一种在计算机图形绘制中常见的纹理压缩格式,常见于Windows平台的游戏中,包括DXT1,DXT3和DXT5。其中,DXT5是一种常见的压缩方式,它提供高达6:1的压缩比,但可能会牺牲一些图像详细度。在Unity中,DXT格式是默认的PC平台和游戏主机平台的纹理压缩格式。

优点:
空间效率:DXT格式是一种有损压缩格式,能够将原始数据的体积减小到1/8或者1/4,为图形绘制提供更大的空间。

显存效率:在运行时,DXT格式直接存储在GPU的显存中,提升了纹理读取的效率。

兼容性:DXT格式得到了广泛的硬件支持,无论是桌面、移动设备或者游戏主机,大部分的设备都能够直接处理DXT格式的纹理。

缺点:
图像质量:DXT格式是一种有损压缩格式,虽然能够显著减小数据体积,但是也会带来不可避免的图像质量损失。

色彩问题:DXT格式在处理高色彩深度的图像时,可能会出现色块或者色带问题。

压缩速度:相较于其他格式,DXT格式的压缩速度可能会稍慢一些。

[PVRTC]
PVRTC: PowerVR Texture Compression(PVRTC)是专为PowerVR系列的图形处理器设计的,主要用在iOS设备上。PVRTC的压缩比很高,可以达到8:1或4:1,但这种压缩方式可能会牺牲一部分图像质量。

优点:
高压缩比:PVRTC提供了极高的压缩比,可以将图片体积减小到原来的1/2、1/4、1/8等,极大地节省了存储空间和带宽。

支持多通道:PVRTC支持RGBA四通道,因此能够展示丰富的颜色和透明效果。

实时解压:PVRTC可以在GPU侧实时解压,避免占用CPU资源,提高了性能。

缺点:
图像质量:由于其是一种有损压缩方式,可能会导致一些图像质量损失。

兼容性问题:PVRTC主要是为Imagination Technologies的PowerVR系列GPU设计的,对于非PowerVR GPU,可能会遇到兼容性问题。

需要专门的工具进行压缩:创建PVRTC纹理需要使用专门的PVRTexTool,可能对某些开发者来说不太方便。

压缩速度较慢:在某些情况下,PVRTC的压缩速度可能相比其他压缩格式较慢。

PVRTC格式通常在需要高效压缩和处理图像的移动设备上使用,但在使用时需要考虑到其可能的图像质量损失和兼容性问题。

[ETC]
ETC: 全称Ericsson Texture Compression(ETC)是一种面向OpenGL ES和WebGL的纹理压缩格式,专为Android设备设计的一种压缩格式。ETC1只支持RGB压缩,不支持Alpha通道,而ETC2则提供了对Alpha通道的支持。

优点:
高压缩比:ETC能有效减少图像文件大小并维持相当高的图像质量,有利于在有限的内存空间和带宽下优化应用运行表现。

广泛兼容:ETC拥有较好的跨平台性,适用于各种类型的设备,被广大基于OpenGL ES和WebGL的应用所接受。

实时解压:ETC格式的纹理可以在GPU侧实时解压,避免占用CPU资源。

缺点:
只支持RGB信息:ETC的标准版本仅支持RGB颜色,ETC1不支持透明度,而且压缩后图像质量可能会下降。ETC2虽然支持透明度,但是不是所有Android设备都支持ETC2。

图像质量:与许多有损压缩算法一样,ETC压缩可能会牺牲一部分图像质量。

总的来说,ETC是为OpenGL ES和WebGL设计的优秀纹理压缩格式。它提供了一种平衡图像质量和存储需求的有效方式,适用于各种计算资源受限制的场景。

[ASTC]
ASTC:全称 Adaptive Scalable Texture Compression(ASTC)是由ARM开发的一种高效的纹理压缩格式,是一种更加先进的压缩格式,支持各种纹理类型和细节级别。它在许多现代移动设备上都有支持。

优点:
高效压缩:ASTC提供了高度适应的压缩能力,能够非常有效地减小纹理所占用的存储空间和内存带宽。

灵活性:ASTC支持的纹理大小范围非常广,从4x4到12x12像素,甚至可以压缩3D纹理,提供了极大的灵活性。

高质量:ASTC提供了良好的图像质量,并支持包括RGBA在内的多种颜色格式和渐变效果。

硬件解压缩:ASTC格式的纹理可以在GPU侧进行解压,这有助于提高渲染性能并减低CPU的压力。

缺点:
容性问题:虽然ASTC正在成为新标准,但仍存在一些设备不支持ASTC格式的情况,开发者需要考虑向后兼容问题。

压缩速度:ASTC提供的块大小和压缩选项较多,这增加了压缩时间,压缩过程可能相对较长。

4. MaxSize

这个属性限制纹理尺寸,根据最终真机效果调整,当然越小越好。
Pasted image 20240511174824

2️⃣ UI优化

1. Canvas层级管理

  • Canvas细分:基于UI元素的更新频率,将静态元素与动态元素分离至不同Canvas。静态元素共享一个Canvas,而具有相似更新周期的动态元素应置于规模较小的独立Canvas中,以提升渲染效率。
  • Canvas属性统一:确保同一Canvas内的元素具备一致的Z值、材质和纹理属性。
  • 动态元素管理:对于仅在特定条件下显示的UI元素,如战斗伤害指示器,在不活动时应设为禁用状态,以避免不必要的绘制调用(Draw Call)。
  • Canvas禁用策略:在需要隐藏整个Canvas的场景中,禁用Canvas组件优于禁用GameObject,以减少Mesh重建的性能开销。

2. 输入处理优化

  • GraphicRaycaster使用限制:仅在需要处理用户输入的Canvas上启用GraphicRaycaster组件,并通过将非输入响应元素移至独立Canvas以最小化相交检测范围。
  • Raycast Target禁用:对于无需响应用户输入的UI元素,如纯展示的文本和图像,应关闭其Raycast Target属性。
    image.png

3. Layout性能优化

  • 避免Layout Group:鉴于Layout Group的高更新成本,建议在静态UI设计中避免使用,或在动态UI中通过脚本在布局完成后立即禁用。
  • Layout Group布局策略:在必须使用Layout Group时,应避免嵌套使用,以降低性能损耗。

4. 渲染优化

  • 减少Overdraw:避免UI元素过度重叠,以减少Overdraw现象,考虑在运行时合并重叠元素以实现批处理渲染。
  • 全屏UI性能调整:在全屏UI场景中,隐藏所有非必要渲染对象,并适当降低帧率以减少GPU负载。
  • 打包图集:将多个小纹理合并到一个大的纹理图集(Atlas)中,减少纹理切换和内存占用。
  • 图像资源优化:对图像资源进行压缩和格式优化,减少内存占用,加快加载速度。
  • 材质合并:通过合并多个UI元素的材质,减少渲染过程中的Draw Call数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/798072.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

缓存与分布式锁

一、缓存 1、缓存使用 为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。 适合放入缓存的数据有: 即时性、数据一致性要求不高的;访问量大且更新频率不高的数据。 在开发中,凡是放入缓存中的数据我们都…

Git 命令行快速入门

前言 (1)新手个人建议使用TortoiseGit这类图形化界面来上手学习。 (2)如果一定需要用命令行进行操作,可以按照B站:程式与网页开发者必备技能!Git 和 GitHub 零基础快速上手,轻松掌握…

构造与操作链栈

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝心态决定高度,细节决定成败! 链栈是数据结构中栈的一种实现方式,它利用链表(通常是单链表)来存储栈中的元…

【触摸屏】【红十字会学习系统】功能模块:视频 + AI拍照合成

项目背景 提升公众急救能力:确保每个人都能在紧急情况下采取正确的急救措施,减少伤害,挽救生命。培养人道主义价值观:通过教育和培训,传播红十字精神,促进社会对弱势群体的关注与支持。建立社区响应网络&a…

1. InternLM - 入门岛

第1关 Linux 基础知识 1. 完成SSH连接与端口映射并运行hello_world.py SSH连接配置 # wsl2中生成密钥对(~/.ssh/id_rsa, ~/.ssh/id_rsa.pub) ssh-keygen -t rsa# 将id_rsa.pub在internStudio作为公钥导入SSH登录 $ ssh -p 38871 rootssh.intern-ai.o…

5.SpringBoot核心源码-启动类源码分析

目录 概述技巧spring boot 如何启动应用程序run方法里面核心逻辑 SpringApplicaiton.run(xxx.class,args)结束 概述 SpringBoot核心源码-启动类源码分析 技巧 如何给外部源码加注释,想要在源码中添加自己的注释,会弹出 file is read only,代…

Java核心技术【二十二】Java的I/O流处理:深入文件读写操作、缓冲流、序列化与NIO

Java的I/O流处理:深入文件读写操作、缓冲流、序列化 在Java编程中,I/O流是处理输入输出操作的基础,特别是在文件读写、网络通信等领域。本文将在前文的基础上,进一步探讨缓冲流、序列化以及NIO(New I/O)在…

从0开始的STM32HAL库学习2

外部中断(HAL库GPIO讲解) 今天我们会详细地学习STM32CubeMX配置外部中断,并且讲解HAL库的GPIO的各种函数。 准备工作: 1、STM32开发板(我的是STM32F103C8T6) 2、STM32CubeMx软件、 IDE: Keil软件 3、STM32F1xx/ST…

01- 收入数据集【Pytorch入门实战】

目录 一、机器学习基础 二、实战例子 1.数据集分析 2.实战训练 3.总结 三、参考资料 一、机器学习基础 为了解决这个问题,人们想到数据驱动方法,也就是让计算机从现有的大量的带标签图片电学习规律,一旦计算机学习到了其中的规律&…

sip协议栈简介

SIP协议栈简介 SIP协议栈流程 数据链路层:当SIP消息从网络中传输到达TCP/IP协议栈时,首先被接收到的是数据链路层的数据帧。数据链路层会对数据帧进行解封装,得到网络层的IP数据报。 网络层:网络层会对IP数据报进行解析&#xf…

1.27、基于径向基神经网络的曲线拟合(matlab)

1、基于径向基神经网络的曲线拟合简介及原理 1)原理简介 基于径向基神经网络(Radial Basis Function Neural Network, RBFNN)的曲线拟合是一种常用的非线性拟合方法,通过在输入空间中使用径向基函数对数据进行处理,实现对非线性关系的拟合。 RBFNN的基本原理是将输入空…

Java基础(十九):集合框架

目录 一、Java集合框架体系二、Collection接口及方法1、添加2、判断3、删除4、其它 三、Iterator(迭代器)接口1、Iterator接口2、迭代器的执行原理3、foreach循环 四、Collection子接口1:List1、List接口特点2、List接口方法3、List接口主要实现类:Array…

【Hive SQL 每日一题】在线峰值人数计算

文章目录 测试数据需求说明需求实现 测试数据 -- 创建 user_activity 表 DROP TABLE IF EXISTS user_activity ; CREATE TABLE user_activity (user_id STRING,activity_start TIMESTAMP,activity_end TIMESTAMP );-- 插入数据 INSERT INTO user_activity VALUES (user1, 2024…

算效最高的智算中心上线,天府智算为AI产业带来哪些启示?

四川简阳,地处川中、控扼巴峡,自古乃成渝、川鄂之间的交通重镇,素有“天府雄州”之美誉。 步入数字经济时代,“天府雄州”得天独厚的地理位置再次彰显出巨大的战略价值。简阳市成为成渝算力枢纽的天府数据中心集群关键布局点&…

element ui ts table重置排序

#日常# 今天带的实习生&#xff0c;在遇到开发过程中&#xff0c;遇到了element ui table 每次查询的时候都需要重置排序方式&#xff0c;而且多个排序是由前端排序。 <el-table :data"tableData" ref"restTable"> </<el-table> <script…

bi项目笔记

1.bi是什么 bi项目就是商业智能系统&#xff0c;也就是数据可视画、报表可视化系统&#xff0c;如下图的就是bi项目了 2.技术栈

深入了解 MySQL 的 EXPLAIN 命令

一、什么是 EXPLAIN 命令&#xff1f; EXPLAIN 命令用于显示 MySQL 如何执行某个 SQL 语句&#xff0c;尤其是 SELECT 语句。通过 EXPLAIN 命令&#xff0c;可以看到查询在实际执行前的执行计划&#xff0c;这对于优化查询性能至关重要。 二、EXPLAIN 的基本用法 要使用 EXP…

什么时候要用弗洛伊德算法

分析一下题目&#xff0c;我们看到数据量只有一百&#xff0c;这个时候我们就要注意是否是要用弗洛伊德算法&#xff0c;然后接着我们还需要枚举每一种情况&#xff0c;我们可以用到next_permutation这个方法 #include<bits/stdc.h> using namespace std;const int N 10…

matlab R2016b安装cplex12.6,测试时cplex出现出现内部错误的解决方法

问题场景 网上搜索matlabyalmipcplex的安装教程&#xff0c;跟着步骤操作即可&#xff0c;假如都安装好了&#xff0c;在matlab中测试安装是否成功&#xff0c;出现以下问题&#xff1a; 1、matlab中设置路径中添加了yalmip和cplex路径&#xff0c;在命令窗口中输入yalmiptest…

实现将Nginx的每个网站配置单独的nginx配置文件——每个网站单独管理

一、问题描述 Nginx默认地配置文件【nginx.conf】是包含了所有网站的配置内容,如果我们需要配置很多网站的话,就需要在默认的配置文件中给每个网站都添加一条server记录,这样下去nginx默认配置文件会变得很大,很难管理(比如有些网站不使用了,需要注销掉,也需要到该文件操…