前言

UE5渲染管线相较于UE4来说,更加复杂,但作为图程,总会碰到碰到其他组同学提交的bug,此时熟悉渲染管线就显得十分重要

本篇不会一股脑解析每个pass的细节,先进行总览,解析每个pass主要在干什么,每个pass的细节在后续会一章一章依次介绍

渲染管线总览


如上图所示,这是UE5目前的渲染管线,核心在于将“几何体的绘制”与“光照的计算”分离开,并引入Nanite和Lumen这两大核心技术

CPU Frame & Setup

  • 总览:在GPU开始绘制像素之前,CPU需要决定“画什么”

  • 职责

    • Game Thread:处理游戏逻辑、物理、动画、蓝图等

    • Render Thread:收集需要渲染的对象

    • Culling:剔除掉摄像机看不到的物体

    Distance Culling->Frustum Culling->Pre Computed Visibility->HIZB Culling->Nanite Culling

Pre-Pass / Early Z

  • 总览:GPU开始处理几何体,但不计算颜色
  • 职责
    • Early Z Pass:渲染场景中所有不透明物体的深度并写入Depth Buffer。这一步的目的是为了防止Overdraw(过度绘制)。在后续计算复杂颜色时,被挡住的像素就可以直接丢弃,不浪费性能
    • Nanite Rasterization:Nanite网格体在此处被评估,决定哪些三角形需要在屏幕空间被光栅化,并将数据写入可见性缓冲区(Visibility Buffer)

Base Pass

  • 总览:把所有Opaque和Masked物体的表面属性记录在屏幕空间的二维纹理上
  • 职责
    • 场景中的所有不透明物体会被渲染,它们的材质信息会被分别输出到多张屏幕大小的纹理中
    • 处理预计算光照与自发光
    • 生成速度缓冲
    • 深度与模板写入

Lighting & Shadows

  • 总览:计算屏幕空间光照
  • 职责
    • 计算阴影
    • 计算直接光照+间接光照

Reflections

  • 总览:计算反射效果
  • 职责
    • 计算反射效果,如reflect capture、planer reflect、ssr、Lumen reflect、raytracing reflect

Additional Pass & Translucency

  • 总览:计算大气、体积云、体积雾等半透明效果
  • 职责
    • 计算一些需要的半透明效果,如头发、水、折射等

Post Process

  • 总览:给照片加滤镜和进行最后的物理光学校正
  • 职责
    • 抗锯齿
    • 模拟泛光
    • 动态模糊
    • 景深
    • 色调映射

总结

UE5的渲染管线是一个高度优化的流水线:先剔除 -> 铺深度 -> 存材质(GBuffer) -> 算光影(Lumen/VSM) -> 画半透明 -> 加滤镜(后处理) -> 盖UI


他们曾如此骄傲的活过,贯彻始终