UE5 Nanite 与传统渲染管线的深度源码对比

本文基于 UE 5.4/5.5 引擎源码,从源码层面深入对比 Nanite 渲染管线与传统网格渲染管线的差异。所有代码引用均标注了引擎内的原始路径。 1. 宏观架构概览 传统渲染管线和 Nanite 管线的最根本区别在于:几何处理的主导权从 CPU 转移到了 GPU,并且材质着色从 Pixel Shader 迁移到了 Compute Shader。 维度 传统渲染 (Traditional) Nanite 几何裁剪 CPU-driven Frustum/Occlusion Culling GPU-driven Cluster Culling + Two-Pass Occlusion LOD 离散 LOD (StaticMesh LOD0~N) 连续 LOD (Cluster Hierarchy, Runtime Streaming) 光栅化 硬件光栅化 (Fixed Function RS) 软件光栅化 (Compute) + 硬件光栅化 (Mesh/Prim Shader) 中间表示 无 (直接写 GBuffer/FrameBuffer) Visibility Buffer (VisBuffer64) 材质着色 Pixel Shader (BasePassPixelShader.usf) Compute Shader (ComputeShaderOutputCommon.ush) GBuffer 输出 SV_Target MRT UAV (ComputeShadingOutputs.OutTargetN) DrawCall FMeshDrawCommand (CPU 组装) Indirect Dispatch (GPU 驱动) 2. 渲染入口与调度 2.1 传统渲染的入口 传统渲染的顶层调度在 FDeferredShadingSceneRenderer::Render() 中,通过 RenderBasePass() 等函数发起。每个 FPrimitiveSceneProxy 会在 FMeshPassProcessor 中被转换为 FMeshDrawCommand,最终由 FParallelMeshDrawCommandPass 提交到 RHI。 ...

April 21, 2026 · 13 min · MrOptimist