第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解
无论是CPU还是GPU,粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化,玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。
特效(Particle System)
游戏效果对于游戏呈现来说是必不可少的,Unity经常使用粒子效果系统
我们将从性能调优的角度介绍如何使用粒子系统,以及如何避免错误。 以下优化点很重要。
- 保持低颗粒数量,建议少于60
- 注意Noise模块消耗大的
- 粒子系统持续时间
- 粒子系统发射间隔
- 粒子系统发射模型面数,Mesh勾选静态,以便合并
- 共享材质,减少shader的复杂度
- 对象池,通过创建粒子池来重用粒子对象,避免频繁创建和销毁对象所带来的性能开销
- 粒子系统RingBuffer开关
- 粒子系统物理碰撞选项
- 粒子需要碰撞地面或者墙壁时,Collision中选择Planes模式
- 帧动画代替粒子系统、粒子系统表现烘培成序列帧动画
- 粒子特效引用的纹理数不宜过多,建议不超过5个,且纹理的大小也不宜过大,不越过256*256。
- 特效运行时DrawCall峰值不宜过高,建议控制在10以下。
- 特效运行时平均Overdraw率不宜过高,陪数控制在3倍以下,在Overdraw模式下不出红色最好。(Overdraw对性能影响最大,需特别留意)
- 减少Overdraw ,又提到了Overdraw,又提到了Overdraw
- 粒子大小与透明度,尽量使用较小的粒子,并避免使用过于复杂的粒子纹理,对于非常小的粒子,可以去除其alpha 通道以减少内存消耗
- 大面积使用粒子的情况下,尽量使用add模式,因为blend模式会渲染通道,消耗内存较大
- 如果粒子叠加层次比较多。尽量使用中空模型,会大大降低渲染压力
- shader的选择方面,特效一般情况使用mobile 模式下的shader
- 不要使用mesh collider
减少粒子数量
粒子的数量与负载有关,由于粒子系统是CPU驱动的(CPU粒子),粒子越多,CPU负载就越高。作为基本策略,将粒子数量设置为必要的最小值。根据需要调整粒子的数量。
有两种方法可以限制粒子的数量。
- 限制发射系统的发射数量particles emitted
- 在Max particles主模块中限制最大粒子数
限制发射模块的发射数量图
- Rate over Time时间速率:每秒发出的粒子数量
- Bursts>Count:粒子在Burst时间发射的数量
限制发射的最大粒子数量图
另一种方法是在主模块中使用Max Particles。在上面的例子中,超过1000的粒子将不会被释放
- 小心次级发射器
- 在减少粒子数量时,还应考虑Sub - Emitters模块。子发射器模块在特定时间产生任意粒子系统(在创建时,在生命结束时等)根据子发射器的设置,粒子的数量可能会立即达到峰值数量,所以在使用此模块时要小心。
注意Noise模块消耗大
噪声模块的质量很容易过载。噪声可以表达有机颗粒,常被用来方便地增加质量效果。因为它是一个经常使用的函数,所以应该注意它的性能。
Quality 窗口中的设置控制着生成的独特噪声样本数量。使用 Medium 和 Low 设置时,使用的柏林噪声样本较少,这些样本将在多个轴上重用,但会组合在一起以尽可能进行重用并隐藏这样的重用。这意味着当使用较低质量的设置时,噪声可能看起来不那么动态和多样化。但是,使用较低质量的设置时,可以获得显著的性能优势。
质量尺寸越高,负载越高。如果你不需要噪音,关闭噪音模块。如果需要使用噪点,请先将“质量”设置为“低”,然后根据需要增加“质量”。
粒子系统发射模型面数
粒子特效的网格发射数不宜过多,粒子的渲染模式可分为两大类:2D的Billboard(公告牌)图形模式和Mesh模式,Mesh性能开销较高,建议不超过5个,且Mash的面片数也要尽量少,建议不越过500。
减少Overdraw
通过优化场景布局和摄像机设置来减少Overdraw(即像素被多次绘制的情况),例如,使用遮挡剔除(occusion culling)技术来避免绘制被其他物体遮挡的物体。
这里再补充一些常见的优化思路
对于低端设备尽可能降低粒子系统的复杂程度和屏幕覆盖面积,从而降低其渲染方面的开销,提升低端设备的运行流畅性。具体做法如下:
(1)特效播放时平均Overdraw率过高
统计每帧参与渲染的像素的平均Overdraw,并取过程中最高的值。该值越大,特效导致GPU压力的可能性也会越高,建议对其进行检查。
(2)特效播放时DrawCall峰值过高
统计每帧的DrawCall数,并取过程中最高的值。该值较高时需要对其进行检查。
(3)特效总贴图内存过大
统计特效中包含的贴图总内存。该值较高时,可能是纹理使用过量,需要对其进行检查。
(4)特效运行时包含的ParticleSystem组件数量过多
统计特效中包含的ParticleSystem组件数。该值较高时,容易导致较高的渲染相关指标,以及较高的序列化耗时等,需要对其进行检查。
(5)特效播放时最大粒子数量过大
统计每帧的粒子数总和,并取过程中最高的值。该值越大,特效的更新开销可能也会越大。
(6)特效总贴图数量过大
统计特效中包含的贴图总数。该值较高时,容易导致较高的渲染相关指标,需要对其进行检查。
(7)开启Collision或Trigger的ParticleSystem
粒子系统建议不要开启Collison或Trigger功能,否则会有较高的物理开销。
(8)在中低端机型上降低粒子数、同屏粒子数,比如仅显示“关键”粒子特效或自身角色释放的粒子特效等,从而降低Update的CPU开销;
(9)尝试关闭离当前视域体或当前相机较远的粒子系统,离近后再进行开启,从而避免不必要的粒子系统Update的开销;
(10)尽可能降低粒子特效在屏幕中的覆盖面积,覆盖面积越大,层叠数越多,其渲染开销越大。
今天是2024年12月1日
重复一段毒鸡汤来勉励我和你
你的对手在看书
你的仇人在磨刀
你的闺蜜在减肥
隔壁的老王在练腰
而你在干嘛?
相关文章:

第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解
无论是CPU还是GPU,粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化,玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效(Particle System) 游戏效…...

Oracle对比表与表之间的结构
自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…...

基于JSP+MySQL的网上招聘系统的设计与实现
摘要 在这样一个经济飞速发展的时代,人们的生存与生活问题已成为当代社会需要关注的一个焦点。对于一个刚刚 踏入社会的年轻人来说,他对就业市场和形势了解的不够详细,同时对自己的职业规划也很模糊,这就导致大量的 时间被花费在…...

【Linux】进程地址空间(虚拟地址vs物理地址vs页表)
Linux 进程概念补充【Linux】 进程是什么(不熟悉的兄弟可以看看)。 1. C/C内存分布图 对于有c/c基础的同学相信对上面的图片并不陌生,实际上其描述的并不是正真的物理内存,而是虚拟内存,我们把它叫做进程地址空间 。 2…...
pytorch 融合 fuse 学习笔记
目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下(与 LoRA 相关) 参数融合功能 在使用 LoRA(Low - Rank Adaptation)对预训练模型进行微调后,fuse_lora函数的主要作…...
在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程
在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili(哔哩哔哩)视频的完整和详细步骤如下,包括使用预编译二进制文件的安装方法: 1. 安装依赖 确保你的系统已安装 FFmpeg&…...
【eclipse】快捷键
【eclipse】快捷键 编辑导航重构调试复制其他快速生成 Eclipse 提供了丰富的快捷键来帮助开发者提高工作效率。 以下是一些常用的 Eclipse 快捷键,它们覆盖了编辑、导航、重构、调试等多个方面。 这些快捷键能够显著提升开发效率,尤其是在处理大型项目时…...
集成开发环境(IDE)的使用技巧插件配置
在开发过程中,集成开发环境(IDE)的使用技巧和插件配置对提高工作效率、优化代码质量和加速调试至关重要。 一、IDE使用技巧 1. 代码导航 跳转到定义(Go to Definition):快速跳转到函数、类或变量的定义位…...
【如何提升代码工程质量】code review篇
应该对于基本上所有软件相关的公司来说,都有committer机制,即代码写好之后会提交合并请求,待相关人员code review通过后再进行合入,所以code review就是代码合入代码仓库的最后一道关卡,对于代码质量的影响也是不容忽视…...
Qt 面试题学习13_2024-12-1
Qt 面试题 1、 QString与基本数据类型如何转换?2、常用数据结构3、进程之间的道信方式有哪些? 1、 QString与基本数据类型如何转换? 1、将QString转换为基本数据类型通过QString的各种转换函数,可以将QString转换为int、float、double等基本数据类型。 QStri…...
Hive 安装与架构详解
Hive 安装(基于 Ubuntu 系统) 为了学习 Hive 的相关操作,我们需要先安装 Hive,以下是基于 Ubuntu 系统安装 Hive 的步骤: 下载 Hive 我们将使用 hive-0.13.1-cdh5.3.2 版本,当然你可以根据需要下载最新的…...
前端入门指南:模块打包器是什么?模块打包器的工作原理与实践
前言 在前端开发的生态系统中,随着项目复杂度和规模的不断提升,代码管理和优化变得至关重要。模块化开发作为一种有效的代码组织方式,极大地提升了代码的可维护性和复用性。 然而,面对大量的模块和复杂的依赖关系,如…...

初识ProtoBuf以及环境搭建(Win和Ubuntu)
初始ProtoBuf 序列化和反序列化的概念 序列化:把对象转换为字节序列的过程 称为对象的序列化。 反序列化:把字节序列恢复为对象的过程 称为对象的反序列化。 什么情况下需要序列化和反序列化? 存储数据:当你想把的内存中的对象状…...

springboot366高校物品捐赠管理系统(论文+源码)_kaic
毕 业 设 计(论 文) 高校物品捐赠管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此ÿ…...

【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息
目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉,出现新的请求结果,参数start更新,每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…...
递归算法讲解(c基础)
递归的定义 递归是指在函数的定义中使用函数自身的方法。它是一种解决问题的策略,将一个大型复杂的问题逐步分解为规模更小的、与原问题相似的子问题来解决。当子问题的规模足够小,达到一个可以直接求解的基本情况(也称为终止条件)…...

AJAX一、axios使用,url组成(协议,域名,资源路径)查询参数和化简,错误处理,请求/响应报文,状态码,接口文档,
一、AJAX是什么 概念 : AJAX是一种与服务器(后端)通信的技术 二、请求库axios的基本用法 1导包 2使用 // 1. 发请求 axios({ url: 请求地址 }).then(res > { // 2.接收并使用数据 }) <body><p class"province"…...

QT6学习第六天 初识QML
QT6学习第六天 创建Qt Quick UI项目使用Qt Quick DesignerQML 语法基础导入语句 import对象 object 和属性 property布局注释表达式和属性绑定QML 编码约定 设置应用程序图标 创建Qt Quick UI项目 如果你有只测试QML相关内容快速显示界面的需求,这时可以创建Qt Qui…...
映射vim键位,基本功能键位表(未更完)
键位映射:建议使用jj代替esc,毕竟esc离手那么远 linux下修改方法是:vim /etc/vim/vimrc 在该文件尾添加inoremap jj <Esc>该方法可以同样可以用到其他键位映射上 i:表示这个映射是在插入模式(insert mode)下有效…...

Python学习笔记(5)Python的创建型设计模式
创建型设计模式(Creational Design Patterns),主要关注对象的创建机制。这类模式可以使得系统更加独立于如何创建、组合和表示其对象。通过将这些职责分离出来,创建型设计模式有助于提高代码的灵活性和复用性。 本书的范例代码已经…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...