Render Queue
作用与原理
- 渲染顺序控制:决定物体在GPU上的绘制顺序
- 核心渲染原则:
- 不透明物体(Queue<2500):从前向后渲染(深度优化)
- 透明物体(Queue≥2500):从后向前渲染(正确混合)
- 深度测试关系:
ZWrite On(不透明) vsZWrite Off(透明)
默认队列分层
| 队列值 | 内置名称 | 用途描述 |
|---|---|---|
| 1000 | Background | 天空盒、背景元素 |
| 2000 | Geometry | 标准不透明物体(默认) |
| 2450 | AlphaTest | 需AlphaTest的物体(树叶) |
| 3000 | Transparent | 半透明物体(玻璃/粒子) |
| 4000 | Overlay | UI/屏幕空间特效 |
C#中修改排序
material.renderQueue = (int)RenderQueue.Transparent + 10; // 3010URP特有优化与限制
| 特性 | 说明 |
|---|---|
| 单Pass前向渲染 | 所有光源单次计算,队列分组很关键 |
| SRP Batcher | 同Shader不同Queue值会打断批处理 |
| 深度纹理生成 | 仅对Queue≤2500的物体生成深度纹理 |
| 法线纹理生成 | 需要显式声明DepthNormals Pass |
URP的RenderType
这东西实际上只是个标识,不会影响渲染队列
| RenderType值 | Queue队列范围 | URP处理阶段 | 深度纹理 |
|---|---|---|---|
| Opaque | ≤2500 | 不透明物体阶段 | ✓ |
| Transparent | >2500 | 透明物体阶段 | ✗ |
| Overlay | ≥4000 | 后处理之后 | ✗ |
例子
// 不透明物体
Tags {
"RenderPipeline"="UniversalPipeline"
"RenderType"="Opaque"
"Queue"="Geometry" // 2000
}
// 透明物体
Tags {
"RenderPipeline"="UniversalPipeline"
"RenderType"="Transparent"
"Queue"="Transparent+100" // 3100
}