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 性能优化之光照优化(七)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速入门!学习鸿蒙App开发的终极指南!

鸿蒙(HarmonyOS)是华为推出的一款分布式操作系统,旨在为不同设备提供统一的操作体验。鸿蒙App开发可以让应用程序在多个设备上实现流畅运行。本文将介绍鸿蒙App开发的终极指南,帮助您快速入门。 开发环境搭建 鸿蒙App开发过程需要…

Linux PXE高效批量网络装机

系统初始化 systemctl disable --now firewalld.service setenforce 0 vim /etc/selinux/config 安装软件 yum install -y tftp-server xinetd dhcp vsftpd syslinux 复制 vmlinuz initrd.img pxelinux.0 到 /var/lib/tftpboot/ 目录 [rootlocalhost ~]# cd /mnt/…

遥遥领先们赚钱的路子,被香飘飘找到了……?

刚刚结束了的五一长假,中文互联网上可以说满是各种对立、冲突。 让人惋惜的胖猫及遭万人唾弃的捞女谭竹之外,曾经卖奶茶杯子绕地球几圈,如今却被多数人遗忘的香飘飘,一通操作下来,让不少吃瓜群众小刀剌屁股开了眼了……

nacos开启登录开关启动报错“Unable to start embedded Tomcat”

nacos 版本:2.3.2 2.2.2版本之前的Nacos默认控制台,无论服务端是否开启鉴权,都会存在一个登录页;在之后的版本关闭了默认登录页面,无需登录直接进入控制台操作。在这里我们可以在官网可以看到相关介绍 而我现在所用的…

Docker网络基础

简介 Docker 本身的技术依赖于近年来 Linux 内核虚拟化技术的发展,Docker 对 Linux 内核的特性有很强的依赖。Docker 使用到的与 Linux 网络有关的主要技术有:网络命名空间、veth 设备对、网桥、ipatables 、路由。 网络命名空间 为了支持网络协议栈的多个实例,Linux在网络栈…

jmeter下载及安装配置

前言 本文是在win10环境下安装使用jmeter,jmeter可以运行在多平台上Windows和Linux。 环境准备:java 1.8jmeter 5.1.1 jmeter环境 jmeter环境依赖JAVA环境,需安装JDK1.8环境,JDK环境安装网上一大堆教程,我这里就不…

如何让你的排单更快?

一般我们都喜欢做打板借用快速通道!但是目前快速通道也是共享通道,独立单元格基本不开发。 想要排单更快,想要隔夜打板,我们到底应该怎么做呢? 想要排单更快,说白了就是要提高你的交易速度!一&a…

解决python/pycharm中import导入模块时报红却能运行的问题

一、问题 导入时报红,如下 二、解决 右键单击项目,将项目Mark Directory as→Sources Root 三、效果 报红消失 学习导航:http://www.xqnav.top

虚拟化之---virtio通信

一、理解virtio的背景 我们知道虚拟化hypervisor大的类型分为两种,全虚拟化和半虚拟化。 在全虚拟化的解决方案中,guest VM 要使用底层 host 资源,需要 Hypervisor 来截获所有的请求指令,然后模拟出这些指令的行为,这样…

服务器遭受攻击后的黑洞状态应对策略及防护机制解析

引言 在网络安全领域中,当服务器遭受大规模DDoS攻击或其他恶意流量冲击时,为了保护服务的稳定性和其他正常用户的使用体验,往往会采取一种紧急防护手段——将服务器置于黑洞状态。所谓黑洞状态,即网络服务商暂时屏蔽掉对服务器的…

C语言-设置控制台信息

Win_API Win_API是Windows应用程序接口(Windows Application Programming Interface)的缩写,它是一组函数、系统服务和程序接口,允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分&#xff…

【Java基础】static关键字和静态成员

关键字:Static 只可以修饰成员。 静态成员变量/类变量 特点: 随着所属类的字节码加载,就在方法区的静态区开辟内存了,这时还不存在对象;因为随着类的加载就开辟内存了,所以既可以通过类名直接访问&…