# 遮挡框
## 概览
**遮挡框**是一种特殊的几何体,用于提高性能。每个完全被遮挡框遮挡的物体都会被排除在渲染之外。部分被遮挡的物体则保持原样。
如果物体的任何部分超出了遮挡框,
,它就会重新出现:请参阅[视频 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` - 启用或禁用渲染实例的遮挡。