当前位置: 首页 > 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;创建型设计模式有助于提高代码的灵活性和复用性。 本书的范例代码已经…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...