正常情况下,如果一个障碍物A挡住了后面的物体B,虽然我们看不见物体B,但是Unity仍然会消耗性能来渲染这个物体B。这样CPU和GPU就会有一部分性能白白浪费在渲染物体B身上。
如果想在一个障碍物挡住了后面的物体后,不渲染被挡住的物体,则可以使用遮挡剔除。
启用物体遮挡剔除的方法和步骤:
1.在物体的Static里勾选 (遮挡物体)Occluder Static 和 (可被遮挡物体)Occludee Static选项
注意勾选后物体不能进行移动旋转缩放等操作
2.创建遮挡区域
打开Occlusion Culling窗口。打开方法:Window——Rendering——Occlusion Culling——Bake。打开之后,选择Object选项卡,点击Occlusion Areas,点击Create New右侧的Occlusion Area。就会在场景自动创建一个Occlusion Area物体
通过物体上Occlusion Area的size属性去设置场景中的遮挡剔除范围
在Occlusion Culling——Bake里进行烘焙遮挡剔除范围(烘焙后才会生效, 每次修改场景后需要重新进行烘焙)
烘焙范围预览(范围越大 烘焙所需时间越长)
耐心等待烘焙进度完成…
烘焙完成后 点击Visualization选项卡。选择后
可以在Scene窗口看到遮挡剔除的效果。此时在Scene窗口可以看到三个选项。
①Camera Volumes。启用后,可以在Scene窗口看到黄色区域,当摄像机在这个黄色区域内,遮挡剔除才可能会生效,摄像机离开这个区域,则遮挡剔除就会失效。我们还可以看到灰线,这些灰线指示摄像机当前位置所对应的遮挡剔除数据中的单元格以及当前单元格中的细分。Bake选项卡Smallest Hole参数设置定义了单元格内细分的最小大小,它的值越小,每个单元格产生的细分越多且越小,从而使精度提高并且文件增大。
②Visibility Lines。启用后,我们会看到绿色的区域,它表示摄像机可以看到的范围。
③Portals。启用后,我们可以看到一些线,它们代表遮挡数据中单元格之间的连接。
烘焙完成 启动Profiler 查看Rendering里的渲染情况(效果不是一般的6, 没在摄像机范围内的物体都已经剔除了 减少了不必要的消耗)
最后拓展一下Occlusion Portal组件
作用是制作一个单纯的遮挡物(这个遮挡物可以动态)
不需要勾选 (遮挡物体)Occluder Static 和 (可被遮挡物体)Occludee Static选项
在物体上直接添加这个组件 并且取消Open勾选 才会生效
(此物体可在代码里修改位置信息)