Unity 性能优化之遮挡剔除(Occlusion Culling)(六)
提示:仅供参考,有误之处,麻烦大佬指出,不胜感激!
文章目录
- 前言
- 一、遮挡剔除是什么?
- 二、静态遮挡剔除的使用步骤
- 1.标记为遮挡剔除对象
- 2.创建Occlusion Area组件
- 3.烘焙
- 4.Occlusion窗口Bake的参数
- Smallest Occluder
- Smallest Hole
- Backface threshold
- 5.遮挡剔除前后的效果对比
- 没有开启遮挡剔除前:
- 开启遮挡剔除后
- 三、动态遮挡剔除的使用步骤
- 2.设置动态遮挡剔除
- 1.开启Dynamic Occlusion
- 2.挂载Occlusion Portal脚
- 3.烘培
- 四、注意点
- 总结
前言
unity在渲染时,默认只是对模型进行视椎体剔除,也就是在相机显示范围内的物体进行剔除,而遮挡剔除则是,渲染物体被整个遮挡住后,将不参与此帧的渲染,unity虽然内置,但是不默认启用,需要我们进行一些操作,才能够实现当前的操作。
一、遮挡剔除是什么?
Unity 中的遮挡剔除(Occlusion Culling)是一种性能优化技术,它可以帮助开发者减少需要渲染的场景物体数量,从而提高游戏的帧率和流畅度。
遮挡剔除的基本思路是在运行时计算场景中哪些物体被遮挡而不需要被渲染,哪些物体是可见的需要被渲染。这样可以减少渲染所需的时间和开销,提高游戏性能。
Unity 中的遮挡剔除主要有两种方式:静态遮挡剔除和动态遮挡剔除。
静态遮挡剔除(Static Occlusion Culling)是在场景构建时进行的,主要是通过 Unity 自带的预处理工具将场景物体分成一些区域,然后计算这些区域之间的遮挡关系。这种方式适用于静态场景和场景中的大部分物体都是静态的情况。静态遮挡剔除的优点是计算量小,不会对游戏运行时的性能造成太大影响。
动态遮挡剔除(Dynamic Occlusion Culling)则是在游戏运行时进行的,主要是通过摄像机视野和场景中物体之间的遮挡关系来计算需要渲染的物体。这种方式适用于动态场景和场景中有大量动态物体的情况。动态遮挡剔除的优点是可以适应动态变化的场景,但需要计算量较大,可能会对游戏运行时的性能造成一定影响。
二、静态遮挡剔除的使用步骤
1.标记为遮挡剔除对象
同时勾选Occluder Static和Occludee Static 。
Occluder Static 属于静态遮挡物体,设置后,可以遮挡其它物体。
Occludee Static 属于静态被遮挡物体,设置后,可以被其它遮挡物体遮挡。

2.创建Occlusion Area组件
1.Window --Rendering–Occlusion Culling 打开遮挡剔除面板

2.创建Occlusion Area组件
选择到Object,再选择Occlusion Areas,最后点击最下面的Occlusion Areas,创建Occlusion Areas。步骤如下图:

3.创建成功

4.当然也可以创建一个空物体,添加组件Occlusion Area,结果和上面步骤一样。

3.烘焙
选择Bake,点击下方Bake。

4.Occlusion窗口Bake的参数

Smallest Occluder
场景内最小遮挡物的尺寸,设得过大会导致剔除成功率下降,过小会导致性能问题。一般默认就好。
Smallest Hole
如果场景中有带孔的物体需要能被视线穿透(例如墙上的洞, 房间的门),那么需要将Smallest Hole设置为小于孔的直径
一般默认即可。
Backface threshold
本参数的引入是为了减少剔除数据大小,另一方面,设置不当会导致剔除错误(可见的物体被剔除了)。因此,暂时请保持默认值100不变。
工作机制是如果PVS产生的某个cell中观察到的阻挡面是backface的比例大于设定值,那么生成的剔除数据中将不会包含这个cell相关内容,从而降低了数据大小。如果运行时camera移动到该cell内,那么剔除查询结果将会是“Undefined”。
5.遮挡剔除前后的效果对比
没有开启遮挡剔除前:

开启遮挡剔除后

可以很明显看见 三个Cube没有被渲染了,相机发射的绿色范围就是渲染到的范围。
三、动态遮挡剔除的使用步骤
2.设置动态遮挡剔除
1.开启Dynamic Occlusion
对于动态或者可移动的物体,如果需要被遮挡,那么需要在其Mesh Renderer 或者 Skinned Mesh Renderer上面设置即可

2.挂载Occlusion Portal脚
动态加载的物体,要能够遮挡其它物体,需要挂载Occlusion Portal脚本进行实现,添加这个组件的物体必须取消Occluder Static和Occludee Static。
Open勾选则是不启用遮挡剔除,不勾选则是启用遮挡剔除,可以通过代码控制。

3.烘培
选择Bake,点击下方Bake。
烘培和静态剔除的步骤一样。
四、注意点
1.静态剔除的物体,无法移动
2.如果修改了场景,需要Clear,然后重新Bake,才会生效
总结
好记性不如烂笔头!
上一章:链接: Unity 性能优化之GPU Instancing(五)
下一章:Unity 性能优化之光照优化(七)
相关文章:
Unity 性能优化之遮挡剔除(Occlusion Culling)(六)
提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、遮挡剔除是什么?二、静态遮挡剔除的使用步骤1.标记为遮挡剔除对象2.创建Occlusion Area组件3.烘焙4.Occlusion窗口Bake的参数Smallest Oc…...
android——关于app性能优化篇
前言 应用性能优化是指通过各种技术手段和优化策略,提高应用程序的性能,使其能够更高效地运行和响应用户操作。 下面介绍一些常见的应用性能优化方法 一、布局优化 1、减少嵌套 嵌套层数尽量少,使用ConstaintLayout能使层级大大降低尽量使…...
单链表经典算法LeetCode--203.移除链表元素(两种方法解)
1.链接:. - 力扣(LeetCode)【点击即可跳转】 分析此题提供两种思路: 1.遍历原链表,将值为val的节点释放掉(双指针法) 定义一个pcur指针指向头节点,定义一个prev指针指向NULL 需要注…...
MySQL—子查询
目录 ▐ 子查询概述 ▐ 准备工作 ▐ 标量子查询 ▐ 列子查询 ▐ 表子查询 ▐ 多信息嵌套 ▐ 子查询概述 • 子查询也称嵌套查询,即在一个查询语句中又出现了查询语句 • 子查询可以出现在from 后面 或where后面 • 出现在 from 后称表子查询,结…...
ffmpeg 读取流报错: Non-monotonous DTS in output stream
在处理媒体文件时,我们可能会遇到各种错误,其中之一就是“Non-monotonous DTS in output stream 0:1; previous: 36963866, current: 36611997; changing to 36963867. This may result in incorrect timestamps in the output file.”这个错误通常发生在…...
yo!这里是socket网络编程相关介绍
目录 前言 基本概念 源ip&&目的ip 源端口号&&目的端口号 udp&&tcp初识 socket编程 网络字节序 socket常见接口 socket bind listen accept connect 地址转换函数 字符串转in_addr in_addr转字符串 套接字读写函数 recvfrom&&a…...
polars学习-03 数据类型转换
背景 polars学习系列文章,第3篇 数据类型转换。 该系列文章会分享到github,大家可以去下载jupyter文件 仓库地址:https://github.com/DataShare-duo/polars_learn 小编运行环境 import sysprint(python 版本:,sys.version.spli…...
IDC 权威认可!Aloudata 入选金融领域中数据管理分析服务最佳实践案例
近日,国际知名数据咨询机构 IDC 重磅发布了《IDC PeerScape:金融领域中数据管理分析服务最佳实践案例》报告,Aloudata 与招商银行联合打造的 DDH 数据研发运维一体化平台成功入选,Aloudata 的技术、产品实力,以及在金融…...
RSA与AES算法比较及应用场景推荐
摘要:在现代加密通信中,RSA算法和AES算法被广泛应用。RSA算法是一种非对称加密算法,而AES算法是一种对称加密算法。本文将对比分析这两种算法的原理、性能及适用场景,并给出相应的推荐建议。 一、RSA算法简介 RSA算法࿰…...
揭秘 HTTP 代理:增强在线活动的安全性和匿名性
HTTP 代理在保护您的在线隐私、增强安全性以及允许访问受限内容方面发挥着关键作用。了解 HTTP 代理的工作原理以及如何有效地利用它们可以让您掌控自己的在线状态和浏览体验。让我们深入研究 HTTP 代理的世界,探索它们的优势、应用程序以及最大化其效用的最佳实践。…...
【经验】mysql冷热数据分离
使用mysql存储时,为了提升数据的查询效率,降低磁盘存储压力等,我们常常使用"冷热数据分离"分离的方案。即,将数据从所谓的“热表”(即经常有写入和查询操作的活跃表)迁移到“冷表”(用…...
【机器学习-06】Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析
🎩 欢迎来到技术探索的奇幻世界👨💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...
蓝桥杯国赛每日一题:日志统计(双指针)
题目描述: 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N行。 其中每一行的格式是: ts id 表示在 ts时刻编号 id 的帖子收到一个”赞”。 现在小明想统计有哪些帖子曾经是”热帖”。 如果一个帖子曾在任意一个长…...
佛山MES公司(盈致mes系统服务商)助力企业实现智能制造
佛山是中国制造业著名的城市之一,拥有众多制造企业。随着科技的不断发展和智能制造的兴起,越来越多的企业开始意识到数字化生产管理的重要性,MES制造执行系统作为智能制造的关键技术之一,受到了越来越多企业的关注和应用。 在佛山…...
算法设计课第五周(贪心法实现活动选择问题)
目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 (1)熟悉贪心法的设计思想 (2)理解贪心法的最优解与正确性证明之间的关系 (3)比较活动选择的各种“贪心”策略,…...
Ubuntu20.04右键打不开终端
今天用virtualbox安装了ubuntu20.04 问题:右键打开终端,怎么也打开不了! 点了也没反应,或者鼠标转小圈圈,然后也没有反应… 解决方法: 1、Ctrl Alt F6 先切换到终端访问界面 mac电脑 Ctrl Alt F6 …...
XML元素
XML 元素是XML文档中的基本组成单位,它由开始标签、结束标签和内容组成,格式如下: <element>content</element>常见的XML元素包括: 根元素(Root Element):XML文档中的最外层元素&…...
融入新科技的SLM27211系列 120V, 3A/4.5A高低边高频门极驱动器兼容UCC27284,MAX15013A
SLM27211是高低边高频门极驱动器,集成了120V的自举二极管,支持高频大电流的输出,可在8V~17V的宽电压范围内驱动MOSFET,独立的高、低边驱动以方便控制,可用于半桥、全桥、双管正激和有源钳位正激等拓。有极好的开通、关…...
代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 文章目录 代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯理论基础一、常规题目二、解题步骤…...
CSS拟物按钮
<div class"btn">F</div>.btn {margin: 150px 0 0 150px;display: flex;justify-content: center;align-items: center;width: 100px;height: 100px;background-color: #fff;border-radius: 20px;font-size: 50px;color: #333;/* 禁止选中文本 */user-se…...
浏览器指纹追踪:为什么网站能一眼认出你?
很多人都有过这种经历:明明把浏览器Cookie全清了、开了无痕模式,甚至换了个新账号登录,结果广告推送还是老样子,风控验证直接弹出来。感觉自己被网站“记住”了,却又说不清是怎么回事。其实,这里面很大一部…...
Conda镜像源配置的3个高级玩法与1个常见大坑:不止是换URL那么简单
Conda镜像源配置的3个高级玩法与1个常见大坑:不止是换URL那么简单 当你在团队协作中遇到TensorFlow版本冲突,或是Docker构建时因网络问题卡在Solving environment步骤,基础镜像源切换早已不够用。真正的高手会在.condarc里埋下这些彩蛋&#…...
springboot-vue基于web框架的服装销售商城平台
目录技术栈选择系统模块划分开发流程关键代码示例(Spring Boot Vue)注意事项项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 后端采用Spring Boot框架,提供RESTful API接口&…...
5大实战技巧让你精通FDS火灾动力学模拟技术
5大实战技巧让你精通FDS火灾动力学模拟技术 【免费下载链接】fds Fire Dynamics Simulator 项目地址: https://gitcode.com/gh_mirrors/fd/fds 当一场突如其来的火灾发生时,传统的消防设计往往只能依靠经验估算,而FDS(Fire Dynamics S…...
[特殊字符] Nano-Banana效果对比:Turbo LoRA vs 原生SDXL拆解精度实测
Nano-Banana效果对比:Turbo LoRA vs 原生SDXL拆解精度实测 最近在折腾AI生成产品拆解图,发现了一个挺有意思的项目——Nano-Banana。这玩意儿号称是专门为产品拆解、平铺展示风格设计的轻量级文生图系统。 我一开始用原生的SDXL模型生成拆解图…...
技术深度:Windows任务栏透明化引擎TranslucentTB架构原理与高级配置指南
技术深度:Windows任务栏透明化引擎TranslucentTB架构原理与高级配置指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Tran…...
OptiScaler:打破显卡技术壁垒——跨平台玩家的AI超分辨率解决方案
OptiScaler:打破显卡技术壁垒——跨平台玩家的AI超分辨率解决方案 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 当你…...
高维问题如何“降维计算”:矩阵映射、卷积与拆分汇总
你在课程里提到一个很重要的工程化思想: 高维问题看起来复杂,但很多计算可以通过“拆分再计算”的方式降维处理 这篇把它整理成一条可复述的主线,重点放在: 为什么能拆拆完怎么汇总和矩阵/卷积的关系是什么 先说明一个常见误解&am…...
JC_Button按键库深度解析:嵌入式消抖与状态机设计
1. JC_Button 库深度解析:面向嵌入式工程师的按键消抖与状态机设计实践在嵌入式系统开发中,机械按键的抖动(Bounce)是硬件与软件协同设计中最基础、却极易被低估的挑战之一。一个未经处理的按键信号,在按下或释放瞬间会…...
用快马平台快速生成排序算法可视化原型,直观理解算法逻辑
用快马平台快速生成排序算法可视化原型,直观理解算法逻辑 最近在学习算法时,发现单纯看代码很难理解排序算法的具体执行过程。于是想做一个可视化工具,能够直观展示不同排序算法的执行步骤。传统方式从零开始写代码很耗时,但使用…...
