UE4学习笔记:实时渲染原理(四)

193 阅读14分钟

光照和阴影(Lighting And Shadows)

和反射一样,光照和阴影在实时渲染中也很难计算,计算光照和阴影需要大量硬件性能,并且计算速度很慢,因此我们会将光照的部分计算量分流到 预计算预渲染 阶段,也就是我们常说的静态光照。静态光照是指所有预先计算而非实时渲染的光照。值得注意的是,虽然在讨论过程中经常讲 静态光照 和 动态光照 放到一起讲,但是从渲染流程上来看静态光照和动态并不是在同一时间进行计算的,而是静态光照会在第 0 步,也就是预计算阶段,甚至是在渲染之前

静态光照和静态阴影

流程的优缺点

  • 静态光照会在编辑器中进行预计算,并将大部分结果存储在光照贴图中,它在性能方面非常快速,但会增加内存占用量。
  • 预先计算光照需要花费很长时间,每当模型有变化时,都需要重新渲染光照。
  • 模型还必须有光照贴图 UV,关于如何在 UE4 编辑器里生成光照贴图 UV 的知识可以在这里的第三点查询到。

质量的优缺点

  • 静态光照可以处理辐射和全局光照。你可以获得真实且高质量的软阴影。
  • 可以获得比实时光照更好的质量,拥有更丰富更精确的效果。
  • 我们看到的画面质量实际上取决于光照贴图分辨率和 UV 布局,因为光照被烘焙进了纹理,是纹理大小和 UV 布局的质量决定了画面质量实际有多好。
  • 由于 UV 布局的关系,光照中还可能出现接缝。
  • 光照贴图分辨率会有一个上限(4096,如果你希望的话也可以是 8192),因此巨型模型会缺乏足够的光照贴图 UV 空间,空间不足会导致光照质量变低,只能采用更低分辨率的光照贴图。
  • 一旦光照贴图计算完毕,我们就无法改变光照和阴影,除非我们重新计算整个模型。

光照贴图(Lightmaps)

光照贴图本质上就是一张纹理,是一张烘焙有 光照和阴影信息 的图片,然后纹理会和底色相乘,因此它看起来就像是会被照亮一样,但实际上没有。

模型需要有 UV 光照贴图坐标才能使用光照贴图。

在 UE4 中,光照贴图在光照重建过程中由称为Lightmass的系统流程生成。

引擎里实际上是把许多光照贴图打包到一起,并不会单独创建图像。

Lightmass

Lightmass是一个独立的应用,用于处理光源渲染和光照贴图烘焙,是编辑器之外的渲染器。

Lightmass 支持网络分布式渲染。

烘焙质量取决于光源构建质量以及 Lightmass各 个选项级别。

Lightmass 可以有一个或多个 Lightmass 重要体积(Lightmass Importance Volume),任何位于该体积内部的东西都可 以获得更高质量的光照。

放置 Lightmass 重要体积可以让引擎在计算光照的时候着重计算体积内的东西,而不需要着重计算体积外的东西,如果一个场景里面没有放置 Lightmass 重要体积,引擎会在整个场景范围内进行无差别光照计算,这样会提升性能损耗。

间接光照缓存(Indirect Lighting Cache,ILC,官网说这个方法已经被体积光照贴图取代了)

ILC 用来解决动态模型上的预计算光照。

通过启用 显示(Show)->可视化(Visualize)->体积光照贴图(Volumetric Lightmaps) 来显示场景中的光照缓存。

UE4 会在动态对象所在的位置,查找最接近该对象的光照缓存(即体积光照贴图可视化中的球形体),查询它的亮度,然后将其与动态对象 插值 混合,以此实现光照在动态的对象上的间接反射。

(在 UE4.27 中该属性是默认关闭的) 所有可移动对象都有被称为 “间接光照缓存质量(Indirect Lighting Cache Quality)” 的属性,默认 “ILCQ Point” 会选取动态物体最近的一个点查询颜色,“ILCQ Volume”会选取附近 555 个点并从所有这些点中计算出颜色,“ILCQ Off” 可以关闭间接光照缓存以提升性能。

由于 ILC 大部分时候仅能计算平面上的光照缓存,在一间大房子里接近房顶的部分就不会计算缓存,所以可以使用 Lightmass 角色间接细节体积(Lightmass Character Indirect Detail Volume)覆盖需要生成光照缓存的区域,来 迫使 这些区域强制生成间接光照缓存。随笔作者注:该功能应该一并与间接光照缓存被体积光照贴图取代了,因为体积光照贴图现在可以在全部对象周围(而不仅仅是地面位置)生成光照缓存。

可以在 世界设置(World Settings)->Lightmass->Lightmass设置(Lightmass Settings) 里设置这些间接光照缓存的密度,从而获取到更加平滑的动态间接光照效果。体积光照贴图的密度设置也是在这个地方


  • 静态光照总会以完全相同的速度渲染(指烘焙后的),无论你有一个光源,没有光源,还是有五万个灯源,这些都没有区别,你都会获得完全相同的性能。
  • 光照贴图分辨率会影响内存和文件大小,而不是帧率,这个和纹理大小是一样的。
  • 烘焙时间会随着光照贴图分辨率、模型和光源数量以及质量设置的提升而增加。
  • 衰减半径很大或者是源半径很大的光源会降低重新构建的时间。

动态光照和动态阴影

当我们在讨论动态光照和实时光照的时候,它们其实是同一个概念。

流程的优缺点

  • 动态光照借助 G 缓冲实现实时渲染。我们使用来自 G 缓冲的图像来计算如何将光照混合上去。
  • 因为光照是全动态的,因此不需要像静态光照那样对模型或对象进行限制,只需要添加一个动态光源即可产生效果。
  • 然而阴影对于性能的影响非常大。
  • 渲染动态阴影有很多种方法,这意味着需要时间和实践才能找到合适的方法和混合方案。

质量的优缺点

  • 阴影的性能损耗很大,通常需要降低渲染质量来补偿动态阴影巨大的性能损耗。
  • 动态光照不会对大部分内容产生辐射或全局光照,只能得到相当直接的基本光照和阴影。
  • 动态光照很难生成软阴影,即使生成了动态软阴影,该阴影也往往不及静态软阴影那样真实。
  • 动态光照通常比静态光照看上去更清晰更具“现场感”。感觉被照射物体更像是处在场景中,更加鲜活.
  • 动态阴影对模型的尺寸没有要求(静态阴影有要求是因为存在光照贴图大小的限制)。

阴影

阴影极度消耗性能,关闭一些光源的阴影投射会有很大的帮助。

动态阴影主要有四种类型:

常规动态阴影(Regular Dynamic Shadows)

最常用并且最重要的一种动态阴影类型。

常规动态阴影源(Regular Dynamic Shadows Source)是指那些移动性被设置为可移动(Movable)、并且正在投射动态阴影的光源,这些光源投射地阴影被称为 “常规动态阴影”。当这类光源被移动了的时候,由该光源投射的所有阴影都会实时地移动。

逐个对象阴影(Per Object Shadows)或称为固定光源阴影(Stationary Light Shadows)

那些移动性被设置为固定(Stationary)的光源所投射的阴影被称为 “逐个对象阴影” 或 “固定光源阴影”。

固定阴影会混合使用完全依赖光照贴图的静态光源以及完全动态光源,两者兼而有之。

级联阴影贴图(Cascaded Shadow Maps,CSM)

级联阴影贴图会根据距离(指阴影到摄像机的距离)渲染不同的 动态阴影

因为 CSM 的特性(阴影随着与摄像机的距离增加而逐级质量下降),因此 不适用 于渲染大型室外场景,因为远距离的阴影已经消退到不存在了。

距离场阴影(Distance Field Shadows)

对于级联阴影贴图来说,因为其特性所以会造成不能够渲染远距离模型的阴影,为了 弥补这个不足,我们需要一个新方案来实现能够远距离渲染阴影的同时还不会造成过多性能损耗的方法,这个方法就是距离场阴影。

百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度 百度