【UE官方培训】UE渲染管线介绍
本文最后更新于:2025年1月14日 晚上
【[官方培训]01-实时渲染基础上 | 陈拓 Epic】 https://www.bilibili.com/video/BV1Tt4y1H7kQ/?share_source=copy_web&vd_source=5d07d04eb2516df147034367e7af6fd2
渲染前准备
会有多个线程在跑,游戏线程、渲染线程和GPU线程,这样流水线的走,如果比较理想,就是稳定30帧
距离
距离阈值(Desired Max draw distance)
如果不想对每一个物体都设置这个距离,可以用Cull Distance Volume,包围的东西都会应用culling,可以设置size和distance,是一个数组,比如0-500size的东西应用一个culling,500-10000的又应用一个culling
如果想某些不被剔除可以用Never distance Cull,或者勾掉那个volume
视锥
这个很好理解,也就是在相机里面才会渲染
可以用FreezeRendering来跳出观察
ToggleDebugCamera
预计算可见性
Precomputed Visibility Volume
然后得编译一下,Compile->Precompute Static Visibility
要用这个得在Setting里面开启Precompute Visibility
遮挡剔除
几何体渲染
通过以上的步骤,可以拿到该被渲染的物体列表,但是如果直接渲染,会造成一些像素重复绘制,所以需要找出哪些模型应该先被渲染。
Early Z:GPU驱动会在执行像素着色器前先检查改点深度,提前跳过不符合条件的像素。为了利用这个特性,可以开启Prepass,提前把深度写入buffer里面,可以加快速度。
Drawcall:绘制拥有相同属性的一组多边形。
不同的材质会不同的drawcall(*2是因为有earlyz)
切换材质影响性能开销,GPU渲染时,引擎会根据材质对物体进行排序,相同材质的会在同一个批次里绘制。
stat RHI命令可以查看drawcall数量
drawcall数量比三角形数量更影响性能。
引擎有一些基础的drawcall开销
降低drawcall方法:
模型合并(Merge Actor),但是有副作用:
遮挡检测性能更差(因为合批模型会变大)
计算碰撞性能更差(合并之后更大)
占用更大内存
Modular Meshes
Instanceing(只针对相同模型 )
Level Of Detail(LOD)和HLOD
降低模型面数
合并模型假如有多个材质还是会多个drawcaal,可以考虑合并材质
调试可以用Render Doc插件,来看详细的DrawCall信息
Shader
VertexShader
1.坐标转换(局部空间->世界空间->投影空间)
2.顶点着色
3.应用世界坐标偏移(WPO):鸟、水体、飘动的草(顶点动画)
VS并不直接修改模型,只是视觉上的效果,CPU无法察觉VS的修改,所以物理和碰撞都不会发生变化。
动画越复杂、顶点越多性能越慢
对远距离的物体应该禁用顶点动画(反正也看不到)
对高精度的模型应该应用简单的VS
光栅化和G-Buffer
经过这些之后,可以得到每个顶点在屏幕上的坐标
因为硬件问题,计算一个像素还需要计算周边2*2的像素,所以会造成overShading
纹理
因为法向是归一化,所以只需要知道两个就够了
采用mipmap,会让内存变大1.3倍(一直1/4),但是会清晰很多(远处的物体也能平均取到)
像素着色器和材质
Pixel shader,实现光照、雾这些效果
UE里面会有一个连线的材质器,然后会自动转成不同平台的shader语言嵌入进去
反射
反射捕获
Reflection Capture
cubemap,预先计算,但是不太准确,而且分辨率会影响反射效果
屏幕空间反射
默认开启,准确,有噪点,只会反射能看到的物体(根据G-Buffer算出来的)
平面反射
Planar Reflection
适合需要精确反射的表面(镜子)
其实就是相机换了一个位置,重新渲染了一遍,所以比较损耗性能,但是比较精确。
Lumen
RT Reflection
光照
静态光照
UE里面生成lightmap用lightmass
动态光照
动态阴影
常规动态阴影
以光的视角作为摄像机渲染,能看到的就会被点亮
把需要渲染的物体在光源的矩阵下转换,然后计算深度,如果前面有东西挡住了,就说这里是阴影
级联阴影
因为普通的阴影只有一张map,级联阴影就是分隔了多个视锥,然后叠加
逐对象阴影
固定光源,对每个对象都生成阴影
距离场阴影
Lumen
UE5全新的全局光照,有一些新特性
Color Bleeding:物品本身颜色对周围光照的影响
Soft indirect shadow:间接软阴影,当前帧和前几帧的混合
半透明
延迟渲染难以处理半透明材质,可以考虑在前向渲染管线渲染
后期处理
自带的效果,Post Process Volume(可以设置为无限大)