Unity 性能优化之遮挡剔除(Occlusion Culling)(六)

2024-05-06 21:28

本文主要是介绍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 打开遮挡剔除面板
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c38fe3dc8c3b4e319374eb1eae6c8fb3.png
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)(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl