(原)Unreal 渲染模块 渲染流程

@author:白袍小道

浏览分享随缘,评论不喷亦可。

   

扯淡部分

在temp中,乱七八糟的说了下大致的UE过程。下面我们还是稍微别那么任性,一步步来吧。

   

UE渲染模块牵扯到场景遍历、查询、渲染的具体执行,而UE有是多平台,还在牵扯到上层View,ViewPort,Client等,其中肯定又牵扯到其他系统。(这里就值得我们学习和分析的,如何去管理如此多的模块,如何去平衡,内联下,还能保证有可扩展。此处就不具体扯淡了,后面会具体把相关图和说明在其他二级目录给到)

   

提前说包含的:

1、ModuleManager, World,

2、ViewClient, ViewFamily, SceneRender, viewInfo,

3、GlobalShader

4、Material

5、ShaderCore, Shader,ShaderParameters

6、RHI(DX,OPGL)

   

下面开始就直接跳到渲染执行部分了。

   

正文部分

注:以下基本是在源码,RenderDoc, 调试堆栈下、其他作者分析,结合而来(怕看错)。

表格走走

Pass

内容

备注

源码及其位置

PrePass

利用DepthDrawingPolicy绘制Depth的深度缓存

减少后续中像素填充

  

BasePass_A

绘制Opa和mask属性的集合体,将其Material属性填入G-Buffer

计算了光照填图和天光的贡献量(这个词来源于其他,挺好)给到SceneColorBuffer

  

  

BasePass_B: Compute Light Grid

灯光【点光源,聚光灯,反射截取按照屏幕空间划分空间格子(Gird),

  

  

Occlusion

Queries/Test

遮挡查询和测试(这是物体级别),为NextFrame做好数据)

在根据深度计算query之后数据会传回cpu,就可以计算每个物体有多少像素可见。这样我们就能知道物体最终是否会被渲染。

在不透明物体的query pass之后。Unreal 还有一些其他的query pass,例如灯光(点光源)会有一个ShadowFrustumQUeries(一般是画一个球体)反射则有 PlanarReflection queries(一般是画一个 Cube)/

  

利用集合体的包围盒走z-depth测试(可以看龙书,游戏引擎架构对这部分理论说明)

  

Hierarchical Z

(这个那啥也不好扯,分层Zbuffer,大体是对Zbuffer做连续downSample.后续细说)

https://www.nickdarnell.com/hierarchical-z-buffer-occlusion-culling/

  

  

ShaderMap

   

   

  

实时阴影的计算:按照灯光类型(静固动)做不同处理,

固:StaticMesh Bake到 Static ShadowMap,

动:所有物体投射Shadow

静:非实时

(注意: 对于移动的点光源,用了CubeMap ShadowMap,在CubeShadow

Map的第一个Pass,直接Copy了静态物体的ShadowMap缓存,GeoShader来选择画)

  

  

  

G-prepass

  

  

  

Velocity rendering

  

  

  

Pre-Lighting

AO走起

  

  

Lighting

光照计算:预处理组合型光照(这个也有书嘿嘿),延时贴花,SSAO,RenderLights

  

  

ImageBased lighting

一些光照效果,SSR,ReflectionProbe等

  

  

Draw atmosphere

  

deferred shading 中需要的G-buffers:

  

  

Draw Fog

非透明表面逐像素的算

  

  

Draw Tanslucency

透明(注意下切了底层DX 状态[DX的状态这里不扯],RHICmdList)

  

  

Post

后期

  

  

   

   

细细来说:

(。。。。。待续)

猜你喜欢

转载自www.cnblogs.com/BaiPao-XD/p/9775977.html