Cocos Creator
原生场景剔除
Creator 从 v3.4.0 开始支持原生场景剔除,包括 八叉树场景剔除 和 遮挡查询剔除,仅对原生平台生效。
八叉树场景剔除
一般情况下,引擎剔除不在视锥(摄像机的可见范围)内的模型,是通过逐个检测模型的包围盒是否在视锥内,速度较慢。若开启八叉树场景剔除,则通过八叉树可以快速剔除不在视锥内的模型。
该功能默认关闭,若需要开启,在 层级管理器 中选中场景根节点 Scene,然后在 属性检查器 中便可看到 Octree Scene Culling 项,勾选 Enabled 即可:
开启八叉树场景剔除后,在 场景编辑器 中会显示整个世界的包围盒(例如上图场景中白色边框的立方体)。
Octree Scene Culling 的属性说明如下:
属性 | 说明 |
---|---|
Enabled | 勾选该项即可开启八叉树场景剔除,仅对原生平台生效 |
World MinPos | 世界包围盒的最小顶点坐标(超出包围盒的物体不渲染) |
World MaxPos | 世界包围盒的最大顶点坐标(超出包围盒的物体不渲染) |
Depth | 八叉树深度,默认值为 8。若场景较小,该值建议不要设置太大,否则可能会耗费内存 |
遮挡查询剔除
遮挡查询剔除 默认关闭,如果开启,则 GFX 后端会通过图形 API 进行遮挡查询,若物体被遮挡,则只使用简化的包围盒及材质来渲染该物体,以提升性能。
该功能可通过代码开启:
ts
director.root.pipeline.setOcclusionQueryEnabled(true);
注意:GLES 2.0 不支持遮挡查询剔除,某些 GLES 3.0 设备如果没有
GL_EXT_occlusion_query_boolean
扩展也不支持。
性能优化建议
- 如果场景中大部分物体都可见,建议不要开启 八叉树场景剔除 和 遮挡查询剔除。
- 不同设备可能表现略有差异,可通过性能测试对比后,决定是否开启相应的剔除功能。