# 遮挡框 ## 概览 **遮挡框**是一种特殊的几何体,用于提高性能。每个完全被遮挡框遮挡的物体都会被排除在渲染之外。部分被遮挡的物体则保持原样。 如果物体的任何部分超出了遮挡框, ,它就会重新出现:请参阅[视频 1](https://drive.google.com/file/d/1JOlqzVnGlJNNe9yyexRqOIjiz75PWi74/view?usp=sharing)和[视频 2](https://drive.google.com/file/d/1B6ZvtDnbLyorXTSYhPW4ooVFcv0oTCC_/view?usp=sharing)。 ## 创建遮挡框 为对象创建遮挡框的步骤如下 1. 创建一个方框对象。 2. 将该对象命名为 `occluder_box`. 3. 使用 **Dagor Dagorrat Material 2** 着色器创建一个材质。
4. 将着色器类别设置为 `gi_black`(为获得更好的可见度,建议选择与物体形成鲜明对比的材质颜色,如鲜红色)。 --- 5. 将材质分配给名为 `occluder_box` 的对象。 6. 打开对象的属性,取消选中**Renderable**选项(这将防止以后出现潜在问题)。 --- 7. 在**User Defined**选项卡中,输入以下内容: ``` renderable:b=no cast_shadows:b=no occluder:b=yes collidable:b=no ``` **User Defined Properties:** - `renderable:b=no` - 禁止渲染对象。 - `cast_shadows:b=no` - 阻止对象投射阴影。 - `occluder:b=yes` - 将对象指定为遮挡器。 - `collidable:b=no` - 禁用碰撞生成。
```{important} 取消选中Dagor对象属性中的**collidable**选项并不能达到同样的效果! 要验证这一点,请在 [*Asset Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md) 中检查资产。如果碰撞数据中可见遮挡框,则说明设置不正确。 碰撞不应该包括一个 `occluder_box` 节点。 ``` 8. 将 `occluder_box` 对象转换为 `Editable Poly` 或应用 `Edit Poly` 修改器。 9. 调整大小以适合要遮挡的对象。具体尺寸要求详见下文。 ## 编辑包围盒 **occluder ** 这个名字很贴切,因为只有它的边界框才是最重要的,而与它的方向无关。因此,在创建遮挡框时应遵循以下规则: 1. 遮挡框绝对不能超出对象的几何尺寸。 --- 2. 它应尽可能填满对象的内部空间,类似于 UV 贴图,但不应超出对象的边界。
3. 不建议旋转遮挡盒。 下面是一个未旋转遮挡框的示例:
这是旋转后的效果: --- 4. **不要**将对象命名为 `occluder_box` 以外的名称。 5. 应将遮蔽盒放置在 `LOD00` 图层中。 ```{tip} 如果需要删除遮挡框,请删除其多边形,同时保留所述对象及其属性。 ``` ## 验证遮挡框的设置 有几种方法可以验证遮挡框的设置是否正确: 1. 在 [*Asset Viewer*](../../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md)中,遮挡框显示为白色矩形。 如果不可见,请确保启用了适当的设置。如果遮挡框出现错位(如图所示),则需要在 **3ds Max** 中进行修正。
2. 在游戏内测试时,您可以通过按下 `F3` 键显示线框来观察遮挡框的运行情况,请参见 [视频](https://drive.google.com/file/d/1JOlqzVnGlJNNe9yyexRqOIjiz75PWi74/view?usp=sharing) 以供参考。 如果遮挡框后面的物体没有消失、消失过早、过晚或根本没有消失,请根据上述指南重新检查设置。如果遮挡框配置不正确,很可能会遇到类似 [视频 1](https://drive.google.com/file/d/11DACcju6HsO-XCd0W82-qG-AouQRvGN-/view?usp=sharing) 和 [视频 2](https://drive.google.com/file/d/15J1qdlZV3IpcrAudYAyTK4kJU-DoYdTB/view?usp=sharing)中显示的问题。 ## 配置良好的遮挡框示例 下面是几个正确设置遮挡框的示例图片。 ### 显示遮挡框的命令 - `render.debug occlusion occluded` - 显示遮挡物及其统计信息。 - `render.debug occlusion occluded` - 显示遮挡物体的边界框。 切换命令: - `render.debug occlusion boxes` - `render.debug occlusion stats` - `render.debug occlusion occludedv` - `render.debug occlusion not_occluded` 此外,您还可以使用 - `occlusion.enabled` - 完全启用或禁用遮挡渲染。 - `rendinst.check_occlusion` - 启用或禁用渲染实例的遮挡。