Files
XCEngine/docs/api/XCEngine/Rendering/RenderMaterialUtility/MatchesBuiltinPass.md

62 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MatchesBuiltinPass
**命名空间**: `XCEngine::Rendering`
**类型**: `function`
**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h`
## 签名
```cpp
bool MatchesBuiltinPass(const Resources::Material* material, BuiltinMaterialPass pass);
```
## 作用
判断一份材质是否应当进入某个 builtin pass。
## 当前实现行为
当前判断顺序是:
1. 如果 `material == nullptr`,只有 `pass == BuiltinMaterialPass::ForwardLit` 时返回 `true`
2. 读取材质自身的 `GetShaderPass()``GetTag("LightMode")`
3. 只要材质自己写了显式 pass 元数据,就要求这些元数据都匹配目标 builtin pass。
4. 如果材质自己没写显式元数据,再检查材质引用的 shader
- 逐个遍历 shader pass
- 只要某个 shader pass 的名称或 `LightMode` 能匹配目标 builtin pass就返回 `true`
- 如果 shader 里存在显式 builtin metadata但没有任何一个匹配则返回 `false`
5. 如果材质和 shader 都没有显式 builtin metadata则把它隐式视为 `ForwardLit`
## 当前识别的 builtin pass 名称
`MatchesBuiltinPassName()` 当前规则:
- `ForwardLit` / `Forward`:接受空字符串、`forward``forwardbase``forwardlit``forwardonly`
- `Unlit`:接受 `unlit``forwardunlit``srpdefaultunlit`
- `DepthOnly`:接受 `depthonly``depth`
- `ShadowCaster`:接受 `shadowcaster``shadow`
- `ObjectId`:接受 `objectid``editorobjectid`
所有比较都会先做 `Trim().ToLower()` 归一化。
## 真实语义
- 材质级元数据优先级高于 shader 级元数据。
- shader 里如果显式声明了其它 builtin pass就会关闭“隐式 ForwardLit 回退”。
- 这使得 object-id、unlit、depth-only 一类材质可以通过 `shaderPass``LightMode` 明确进入对应路径,而不是被默认前向通道误收。
## 测试覆盖
`tests/Rendering/unit/test_render_scene_extractor.cpp` 当前验证了:
- `ForwardLit``Unlit``DepthOnly``ObjectId` 的匹配结果
- shader pass 名称也能驱动 builtin pass 匹配
- 显式 shader metadata 会关闭隐式 forward fallback
## 相关文档
- [RenderMaterialUtility](RenderMaterialUtility.md)
- [ResolveMaterial](ResolveMaterial.md)