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

时间:2024-03-15 16:11:27

1.当场景中包含大量模型时,造成渲染效率的降低(即帧速率FPS的降低),采用遮挡剔除技术,可以使得那些被阻挡的物体不被渲染提高渲染效率

2.原理:在场景空间中创建一个遮挡区域,该遮挡区域是有单元格(Cell)组成;每个单元格是构成整个场景遮挡区域的一部分,这些单元格会把整个场景拆分成多个部分,当摄像机能够看到该单元格时,表示该单元格的物体会被渲染出来,其他的不去渲染

3.遮挡剔除步骤:

(1)场景

(2)除了主角,摄像机,直线光,地面。把层级视图中的所有游戏对象标记为“遮挡静态”(Occluder Static/Occludee Static)

(3)执行菜单命令“Windows”—>“OcclusionCulling”,弹出“遮挡剔除”面板,单击下方的“Back”按钮,开始烘焙

(4)单击“遮挡剔除”(Occlusion)窗口的“Visualizatior”,运行程序

4.若场景中存在大量的小“物件”,使用“层消隐距离”来优化场景

(1):原理:较远距离将小物件剔除,减少绘图调用的数量

(2):方法:将小物件放入一个单独的层(Separate  Layer)中,并使用Camera.main.layerCullDistances函数设置层的消隐距离

(3)例如:void Start(){

                  Float[] distances=newfloat[32];

                  //这里定义的数组下标“8”表明第8层

                  distances[8]=10;

                 Camera.main.layerCullDistances=distances;

        }

当摄像机距离这些小物件超过10m的时候,就不可见了

渲染视野内的游戏物体 视野之外的不渲染
1.选中需要遮挡剔除的游戏物体
2.点击Static里面的Occlude Static
unity 性能优化之遮挡剔除(Occlusion Culling)
3.点击Window里面的Occlusion Culling


unity 性能优化之遮挡剔除(Occlusion Culling)
4.选择Occluder Static
unity 性能优化之遮挡剔除(Occlusion Culling)
然后点击Bake生成网格是用来遮挡剔除计算的
在视野内显示视野外不显示
添加新物体需要重新烘焙
unity 性能优化之遮挡剔除(Occlusion Culling)
5.选择主相机
unity 性能优化之遮挡剔除(Occlusion Culling)

unity 性能优化之遮挡剔除(Occlusion Culling)
4.选择Occluder Static
unity 性能优化之遮挡剔除(Occlusion Culling)
然后点击Bake生成网格是用来遮挡剔除计算的
在视野内显示视野外不显示
添加新物体需要重新烘焙
unity 性能优化之遮挡剔除(Occlusion Culling)
5.选择主相机
unity 性能优化之遮挡剔除(Occlusion Culling)