帮你把刚才聊到的相机渲染顺序与规则做个系统梳理,核心可以概括为:宏观定批次,微观定顺序,深度保正确,混合靠层级。
📌 一、整体渲染管线顺序(URP 典型流程)
准备阶段:设置 RenderTarget,清除颜色、深度、模板缓冲区。
阴影阶段:渲染主光源及附加光源的阴影贴图。
颜色预计算:生成 Color Grading LUT。
不透明物体:渲染所有不透明物体。
天空盒:渲染 Skybox(填补不透明物体未覆盖的区域)。
透明物体:渲染所有半透明物体。
后处理:应用 Bloom、景深、色调调整等屏幕特效。
最终输出:最后一个后处理 Pass,输出到屏幕。
📌 二、不透明物体的排序规则
核心机制:ZWrite On(开启深度写入)+ ZTest LEqual(深度测试)。
提交顺序:从近到远。
目的:让最近的物体先写入深度缓冲,后续更远的物体在深度测试中被直接丢弃,避免过度绘制,最大化性能。
视觉结果:近的永远遮挡远的,由深度缓冲保证,与提交顺序无关。
📌 三、透明物体的排序规则
核心机制:ZWrite Off(关闭深度写入)+ Alpha Blending(颜色混合)。
提交顺序:从远到近。
目的:因为透明物体需要与身后的背景做颜色混合,必须先有背景颜色,才能正确叠加。
视觉结果:远处的透明物体先画,近处的后画并混合在其上。
📌 四、排序优先级层级(从最高到最低)
优先级 控制因素 说明
1 Render Queue 决定物体属于哪个渲染批次(不透明 ≤ 2500,透明 ≥ 3000),是最高层级的宏观调控
2 Sorting Layer + Order in Layer 在同一渲染队列内强制指定先后顺序,完全无视空间距离
3 到相机的距离 仅在前两级完全相同时才生效,作为"平局决胜"使用
📌 五、两个关键澄清
Sorting Layer / Order in Layer 并非"透明专属":它们是所有 Renderer 的通用属性。只是在不透明队列中,它们的效果被深度测试完全覆盖,所以"看起来无效"。
透明队列中距离依然起作用:当两个透明物体的 Sorting Layer 和 Order 完全相同时,引擎会按从远到近的距离顺序来渲染它们。
📌 一句话记忆
不透明靠深度测试保正确、从近到远提性能;透明靠 Alpha 混合、从远到近保效果;层级和顺序是人为指挥棒,距离是最后的平局裁判。
要不要说说这些规则在实际项目里怎么用?比如怎么让UI始终浮在3D场景最前面,或者怎么控制多个透明物体的叠加顺序。