当前位置: 首页 > news >正文

第八课 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

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

【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息

目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉,出现新的请求结果,参数start更新,每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…...

递归算法讲解(c基础)

递归的定义 递归是指在函数的定义中使用函数自身的方法。它是一种解决问题的策略,将一个大型复杂的问题逐步分解为规模更小的、与原问题相似的子问题来解决。当子问题的规模足够小,达到一个可以直接求解的基本情况(也称为终止条件&#xff09…...

AJAX一、axios使用,url组成(协议,域名,资源路径)查询参数和化简,错误处理,请求/响应报文,状态码,接口文档,

一、AJAX是什么 概念 &#xff1a; AJAX是一种与服务器&#xff08;后端&#xff09;通信的技术 二、请求库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相关内容快速显示界面的需求&#xff0c;这时可以创建Qt Qui…...

映射vim键位,基本功能键位表(未更完)

键位映射&#xff1a;建议使用jj代替esc,毕竟esc离手那么远 linux下修改方法是&#xff1a;vim /etc/vim/vimrc 在该文件尾添加inoremap jj <Esc>该方法可以同样可以用到其他键位映射上 i&#xff1a;表示这个映射是在插入模式&#xff08;insert mode&#xff09;下有效…...

Python学习笔记(5)Python的创建型设计模式

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

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

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

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...