Unity3d遮挡剔除(Occlusion Culling)优化【2019】

本文介绍了Unity3d中的遮挡剔除(Occlusion Culling)技术,这是一种重要的场景优化方法,用于提高游戏性能。通过理解遮挡剔除概念、视锥剔除原理,以及如何设置模型和优化参数,可以显著降低渲染负担,提升游戏流畅性。文章还强调了正确设置物体的Occluder Static和Occludee Static属性,以及考虑物体大小与单元格细分尺寸的平衡,以实现最佳的遮挡剔除效果。
摘要由CSDN通过智能技术生成

遮挡剔除的概念

  很多童鞋的Unity作品完成后,发现场景卡的要死,尽管在模型阶段采用了很多优化建模方法,但还是卡顿。电脑端都这么卡,发布到移动端就更不用说了。遇到这种情况,很多童鞋急得团团转,不知如何是好。此时,就必须对场景进行深度优化,当然了,Unity深度优化的方法很多,本文小姐姐将和大家一起探讨Unity3d最重要也是最有效的场景优化方法-遮挡剔除(Occlusion culling),希望对遇到场景卡顿的童鞋有所帮助。当然,对于机器配置高的童鞋,虽然暂时没遇到卡顿,可别忘了,你的作品最终不是在你自己的机器上运行,而是要在配置不高的用户机或移动端运行的,所以,场景的深度优化是每个人绕不过的一道坎。

  那么什么是“遮挡剔除Occlusion culling”呢?通俗地讲,就是将距离相机当前位置最近的一组非透明物体完全遮挡(看不到)的物体,动态地禁用渲染(禁用渲染一些物体,游戏视图的渲染负担就会减轻,作品跑起来就会流畅一些),这就是“遮挡剔除”。简单地说,就是把被遮挡住的物体剔除掉。都被挡住看不见了,还不剔掉,留着这些物体,除了因增加系统渲染负担而导致场景卡顿外,没有任何意义。这只是对遮挡剔除的文字描述,为了让童鞋们直观地理解,下面我们用图解诠释。

  在认识“遮挡剔除”之前,得先了解什么是“视锥剔除( Frustum Culling)”。大家都知道,摄相机视野的空间形态是一个四棱锥,Unity称之为“视锥(Frustum)”,默认情况下,Unity会和人的眼睛一样,自动将视锥以外的物体动态地禁止渲染,也就是只渲染视锥以内的物体,这就是“视锥剔除”。一般情况下我们是看不到“视锥剔除”现象的,但“视锥剔除”在运行时会自动启用。

  下图左上角几条线封围的部分就是相机的视锥(俯视),因为未使用遮挡剔除,所以场景中的所有物体均可见。


在这里插入图片描述

   下图为添加遮挡剔除并使用其可视化预览功能的情况。在右下角弹出的可视化预览面板中,激活“Camera Volumes(相机体积)”,取消“Occlusion Culling(遮挡剔除)”复选框的勾选,目的是先禁用遮挡剔除,只预览“视锥剔除”效果。说到这里,有些童鞋肯定有些晕,不是说添加了遮挡剔除,怎么有禁用了呢?因为小姐姐是想先给大家直观地展示一下视锥剔除的效果,可一般情况下大家是看不到的,而遮挡剔除使用后,视锥剔除和遮挡剔除的效果都可以用可视化预览&#x
  • 17
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: Unity实时遮挡剔除是一种用于性能优化的技术,通过在渲染场景时动态地检测和移除被其他物体遮挡的不可见物体,提高渲染效率和帧率。 实时遮挡剔除的原理是通过摄像机的视锥体来确定被剔除的物体,只有在视锥体内的物体才会被渲染,而视锥体外的物体则会被剔除。这样可以避免不可见物体的渲染,减少对GPU、CPU和带宽的压力,提高游戏的性能和流畅度。 Unity实时遮挡剔除的步骤主要包括: 1. 确定摄像机的视锥体,即摄像机能够看到的范围。 2. 对于每个物体,判断其是否在视锥体内。如果在视锥体外,就剔除它。 3. 如果物体在视锥体内,继续检测是否被其他物体遮挡。如果被遮挡,也将其剔除。 4. 对剩下的可见物体进行渲染。 Unity实时遮挡剔除有助于提高游戏的渲染性能,尤其是在大型场景或者复杂的游戏世界中。它可以减少渲染物体的数量,加快渲染速度,使游戏更加流畅。此外,通过合理的遮挡剔除设置,还可以减少GPU和CPU的负担,让游戏在更低的硬件要求下运行。 总之,Unity实时遮挡剔除是一种重要的性能优化技术,能够提高游戏的渲染效率和帧率,为玩家提供更好的游戏体验。 ### 回答2: Unity实时遮挡剔除(Real-time Occlusion Culling)是一种用于提高游戏性能的技术,旨在减少对不可见物体的绘制。在游戏场景中,有些物体可能被其他物体遮挡,这些被遮挡的物体在渲染时不需要显示,因此可以将其剔除,从而节约计算资源。 Unity实时遮挡剔除的实现原理是通过预先计算场景中不同物体的可见性。首先,进行场景的静态分析,生成一张场景中所有物体的可见性图(Occlusion Map),记录每个点是否可见。接下来,通过相机的视锥体(视野范围),对于视锥体内的物体,通过检查其在可见性图中的位置来判断其可见性。如果物体被视锥体外的其他物体遮挡,那么它将被剔除,否则将进行渲染。 通过使用Unity实时遮挡剔除,我们可以提高游戏的渲染效率,减少不必要的绘制操作,从而改善游戏的性能和流畅度。这对于那些需要处理大量复杂场景的游戏特别有用,因为它可以在运行时动态地确定哪些物体需要渲染,减轻了GPU和CPU的负担,使游戏更加流畅。 Unity实时遮挡剔除虽然对场景的可见性进行了优化,但也有一些限制。例如,在动态物体或需要频繁更新的场景中,无法准确地预计可见性,因此需要使用其他技术进行补充,如级别细化(LOD)和动态批处理等。 综上所述,Unity实时遮挡剔除是一种采用预先计算可见性的技术,旨在提高游戏性能。通过剔除不可见的对象,减少了对它们的渲染,使游戏在复杂场景下运行更加流畅。 ### 回答3: Unity的实时遮挡剔除是一种技术,可以在场景中动态隐藏不可见的物体,从而提高渲染的效率。这个技术可以有效地避免不必要的渲染,减少GPU的负担,从而提高游戏性能。 在Unity中,实时遮挡剔除是通过一个叫做视锥裁剪器(Frustum Culling)的技术来实现的。视锥裁剪器实际上是一个虚拟的摄像机,它只渲染在视锥体内的物体。通过将在视锥体外的物体从渲染队列中剔除掉,可以减少不必要的渲染操作,提高渲染效率。 Unity的实时遮挡剔除还使用了一种叫做遮挡剔除Occlusion Culling)的技术。遮挡剔除是通过判断一个物体是否被其他物体遮挡住来进行的。当一个物体被其他物体遮挡住时,该物体的渲染操作就会被剔除掉,从而减少不必要的渲染。 Unity的实时遮挡剔除在编辑器中可以通过配置设置来应用。通过在场景中添加遮挡剔除区域,可以指定哪些物体应该被剔除。而且,Unity还提供了一些调试工具,可以帮助开发者进行优化,如场景的可视化遮挡剔除图和性能分析器。 总之,Unity的实时遮挡剔除是一种有效的渲染优化技术,可以提高游戏性能,减少不必要的渲染。通过视锥裁剪器和遮挡剔除的配合使用,可以在保证画面质量的同时提高游戏的帧率和流畅度。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值