chore: sync workspace state

This commit is contained in:
2026-03-29 01:36:53 +08:00
parent eb5de3e3d4
commit e5cb79f3ce
4935 changed files with 35593 additions and 360696 deletions

View File

@@ -0,0 +1,76 @@
# RenderMaterialUtility
**命名空间**: `XCEngine::Rendering`
**类型**: `utility header`
**头文件**: `XCEngine/Rendering/RenderMaterialUtility.h`
**描述**: 把 `Material` 的渲染语义翻译成当前渲染层和 RHI 能直接消费的选择规则与状态描述。
## 概览
`RenderMaterialUtility.h` 不是一个运行时对象,而是一组内联工具函数与辅助枚举。它解决的是“材质资源层”和“实际绘制层”之间的翻译问题:
- 先决定这次绘制到底用哪份 `Material`
- 再判断这份材质是否属于当前内建 pass。
- 然后把材质里的 render state 翻译成 RHI 描述结构。
这类 utility header 在商业引擎里很常见因为材质解析、render queue 判定、RHI 状态映射本质上都是无状态规则,不值得再包成有生命周期的服务对象。
## 公开概念
### BuiltinMaterialPass
当前只定义了一个内建 pass
| 枚举值 | 说明 |
|------|------|
| `BuiltinMaterialPass::Forward` | 表示默认前向绘制通道。 |
### 当前前向 pass 识别规则
`MatchesBuiltinPass()` 当前实现,以下值会被视为前向 pass
- 空字符串
- `forward`
- `forwardbase`
- `forwardlit`
- `forwardonly`
比较前会先做 `Trim().ToLower()` 归一化,并同时检查 `GetShaderPass()``GetTag("LightMode")`
## 设计要点
- 材质选择逻辑单独抽出来,可以让 `RenderSceneExtractor` 和具体管线共用同一套规则。
- render queue 和透明度判定放在这里,可以保证排序语义不散落在多个调用点。
- RHI 状态构建函数把资源层枚举翻译成后端无关描述,这比直接在管线里读 `Material` 细节更干净。
## 当前实现边界
- 只覆盖当前引擎已有的 `MaterialRenderState` 字段,不负责 shader variant、keyword 或多 pass 编排。
- 默认值是“可用但保守”的最小实现,例如栅格化默认 `CullMode::None`、深度默认开启且比较函数为 `Less`
- `MatchesBuiltinPass(nullptr, ...)` 当前返回 `true`,这意味着“没有材质”在 pass 过滤阶段不会被拦掉。
## 公开函数
| 函数 | 说明 |
|------|------|
| [ResolveMaterial](ResolveMaterial.md) | 按当前约定解析可见物体实际使用的材质。 |
| [ResolveMaterialRenderQueue](ResolveMaterialRenderQueue.md) | 读取材质 render queue空材质时回退到 `Geometry`。 |
| [IsTransparentRenderQueue](IsTransparentRenderQueue.md) | 判断一个 queue 是否属于透明区间。 |
| [MatchesBuiltinPass](MatchesBuiltinPass.md) | 判断材质是否匹配当前内建 pass。 |
| [BuildRasterizerState](BuildRasterizerState.md) | 从材质构建栅格化状态。 |
| [BuildBlendState](BuildBlendState.md) | 从材质构建混合状态。 |
| [BuildDepthStencilState](BuildDepthStencilState.md) | 从材质构建深度模板状态。 |
| [ApplyMaterialRenderState](ApplyMaterialRenderState.md) | 一次性把材质状态写入 `GraphicsPipelineDesc`。 |
## 其他辅助函数
头文件里还提供了 `ToRHICullMode``ToRHIComparisonFunc``ToRHIBlendFactor``ToRHIBlendOp``MaterialRenderStateHash` 等内联辅助工具。它们主要服务于状态映射与缓存键构建,当前更适合被视为实现支撑件,而不是高层调用入口。
## 相关文档
- [RenderSceneExtractor](../RenderSceneExtractor/RenderSceneExtractor.md)
- [VisibleRenderObject](../VisibleRenderObject/VisibleRenderObject.md)
- [BuiltinForwardPipeline](../Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md)