
反射
反射捕获
- 在指定位置捕获一张Cubemap
- 需要预计算
- 快速
- 不精确
- 只能捕获一定距离范围内的物体 如果场景中存在多个反射捕获球(Reflection Caputure),互相重叠的话,那么这些像素就要多次计算重叠的内容,浪费性能
平面反射
本质上是换了个相机视角再渲染了一遍内容
- 并不常见,也不常常使用,仅限在指定平面上
- 在某些设置下可能会有很大的性能损耗(每帧捕获)
- 适合需要精确反射的表面(例如镜子)
屏幕空间反射 SSR
- 默认开启的反射系统
- 对任何物体都有影响
- 准确
- 输出有噪声、性能损耗大
- 只反射视野范围内可见的物体
反射性能提示
- 如果未经过Cook,反射捕获会在打开关卡时进行,导致加载变慢
- 反射捕获区域如果有很多重叠,会导致多次着色从而性能变差
- 反射捕获的分辨率可以在系统设置中调节
- 天空光为整个光卡提供了低成本的反射捕获
- 必要时才使用平面反射和实时捕获和SSR
光照
光源
静态光源(Static Light)
是指再运行时不能以任何方式改变或移动的光源。它们仅在光照贴图中进行计算,一旦处理完成后,不会再有进一步的性能影响。可移动对象不能和静态光源进行交互,所以静态光源的用处是非常有限的。
可移动光源(Movable Lights)
产生完全动态的光照和阴影,可以改变光源位置、旋转度、颜色、亮度、衰减、半径等属性,几乎光源的任何属性都可以修改。它们产生的光照不会烘培到光照贴图中,也不会产生间接光照效果。
固定光源(Stationary Lights)
保持固定位置不变的光源,但可以在其他方面进行变更,例如亮度和颜色。这是它们与静态光源的主要不同之处,静态光源无法在游戏时以任何方式进行变更,然而,应该注意的是,在运行时对亮度进行修改仅会影响直接光照。间接(反射)光照由于是通过Lightmass进行预计算的,所以不会改变。
静态光照和阴影
- 与反射一样,光照和阴影在实时计算也很困难
- 部分光照、阴影的计算会在预计算阶段完成,在runtime与实时光照结合
- 虚幻引擎中有数十种不同的光照和阴影方案 静态光照主要有一张Lightmap来实现的,Lightmap是一张烘培了光照和阴影的贴图,在计算光照是与BaseColor相乘
UE4中,我们使用Lightmass工具生成Lightmap
多张Lightmap会合并到atlas中
可以逐个mesh调整Lightmap密度
Volumetric Lightmap
Lightmass会生成表面光照贴图,用于表现静态对象上的间接光照。但是,动态的对象(例如角色)也需要一种接受间接光照的方法。这种方法就是在构建时将所有点的预计算光照存储在名为体积光照贴图的空间中,然后在运行时用于动态对象的间接光照的插值。
质量
- 可以处理辐射和全局光照
- 真实的阴影效果包括软阴影
- 质量取决于Lightmap的分辨率和UV分布
- 由于UV布局的关系,光照还可能显示出接缝
- Lightmap分辨率有上限,巨大的模型可能效果不佳
- 一旦烘培完成,在运行时静态的光源和物体无法移动
性能
- 在编辑器下预先计算,并将信息存储在Lightmap中
- 计算非常高效,但占用更多内存
- 需要一定的时间去预计算
- 每次修改光照和静态物体,需要重新构建光照
- 模型需要LightmapUV,因此需要额外的步骤去处理
Lightmass
- Lightmass是一个独立程序,由引擎编辑器在烘培时调用
- 支持网格分布式渲染
- 渲染质量可以通过一些选项设置
GPU Lightmass
UE4.27及以上支持,RTX显卡及以上支持
- GPULM大大减少了计算、构建和生成复杂场景光照数据所需的时间,其速度可与基于CPU的Lightmass使用Swarm进行分布式构建时的速度相媲美。此外,GPULM提供具有交互性的新工作流,可以实时编辑场景、重新计算和构建光照。基于CPU的Lightmass系统无法使用此工作流
静态光照的性能提示
- 静态光照总是以完全相同的速度渲染
- 无论有多少静态光源,烘培之后的渲染速度是一样的
- Lightmap分辨率会影响内存,但不影响帧率
- 烘培速度会受以下几点影响
动态光照和阴影
动态阴影
- 常规动态阴影——阴影非常锐利
- 级联阴影——方向光、不同距离
- 逐对象阴影——固定光源(位置固定,颜色、光强可变)
- 距离场阴影——可以生成软阴影,不需要针对模型运行阴影pass
- 由于需要直接光照,光源需是固定或可移动光源
- 只对静态网格体有效,需离线生成Mesh Distance Field
- CSM>DFX>Traditional Shadow
- 运行实时生成Global Distance Field
- Ray Marching
其他阴影
- Contact Shadow——对于小的物体有较好的细节
- Capsule Shadow——用简化的模型来渲染阴影
动态阴影的性能提示
- 渲染阴影的性能损耗大,通常需要降低渲染质量来补偿
- 动态光照不会对大部分的内容产生辐射或全局光照
- 动态光照不会生成“真正的”软阴影
- 动态光照在场景中看起来更“真实”(闪烁等,光线非常锐利)
动态光照
光照渲染
- 使用像素着色器Pixel Shader来计算
- 点光源用一个球形模型来渲染