阅读目标

  • 了解 UE 渲染管线的过程,以及各部分的设计作用
  • 了解目前渲染管线的优化逻辑与局限性

模型渲染管线

传统图形 API 的绘制

比如 OpenGL,首先在 CPU 端创建资源数据,然后在 GPU 上创建与绑定数据,最后调用 API 的绘制接口

对于商业游戏引擎,由于其业务需求需要每秒数十帧渲染复杂场景,有着大量的 DrawCall,不能直接调用图形 API

在真正调用图形 API 进行绘制前,必须要经过很多调优操作,比如:

  • 遮挡剔除
  • 动态和静态合并
  • 动态 Instance
  • 缓存状态和命令
  • 生成中间指令再转译为图形 API 指令
  • 等等

UE 4.22 之后的 Pipeline

  • FPrimitiveSceneProxy
  • FMeshBatch
    • InitViews ()
    • FMeshPassProcessor:: AddMeshBatch ()
  • FMeshDrawCommand
    • RenderBasePass ()
    • SubmitMeshDrawCommands ()
  • RHICommandList
  • DrawIndexedPrimitive

从 FPrimitiveSceneProxy 到 FMeshBatch

FPrimitiveSceneProxy 是游戏线程中的 UPrimitiveComponent 在渲染线程中的代理(拷贝副本),不包含所要参加的绘制 Pass

FMeshBatch 包含了绘制 Pass 所需要的所有信息


参考链接