2023-06-29 11:55:02 +08:00

12 KiB
Raw Permalink Blame History

本文为《Lighting with Unreal Engine Masterclass》视频的学习笔记地址为https://youtu.be/ihg4uirMcec

其中有关LightMass的笔记 http://www.tomlooman.com/lighting-with-unreal-engine-jerome/ 翻译版 https://mp.weixin.qq.com/s/CUVJ57s_qsCNzdVHw5OhNQ

首先确定你的材质是物理正确的

几个常见的错误: BaseColor太暗或者太亮 Metallic应该为0或者1。黑色或者白色Mask Specular应该为0~1范围的浮点数。不应该为颜色值。它会导致反射亮度不一致

常见材质的BaseColor数值都可以网上查询到我记得《全局光照技术》中有说。世界中没有物体是纯白、纯黑的即RGB为0或者1

PS.关于“Metallic应该为0或者1”演讲者的意思是纯材质排除混合材质情况。

因为迪士尼的渲染模型也是基于微表面的如果在金属上的一个块微表面区域有40%的区域覆盖着 3D扫描用喷漆表面完全哑光材质那这块微表面的光照该如何计算呢

而迪士尼的渲染模型里Metallic就有插值效果0-1。如果有问题那为什么不在Shader里直接判断材质属于金属还是绝缘体。

如何实现一个良好的关照场景

关闭后处理空间中干扰项

以下操作都在Post Process Volume中。用于去除对场景亮度的干扰。

禁用自动曝光

视频中的操作是在后处理空间中将最低亮度与最高亮度设为1。

目前版本已经使用物理灯光所以第一条应该改为将Lens-Exposure 中的Min Ev100与Max Ev100设为0。

禁用SSAO以及SSR空间反射

将ScreenSpaceReflection中的Intensity设为0。将Ambient Occlusion的Intensity设为0。反射球可以不用删掉。

保持默认Tone Mapping

确定Tonemapper新版本为Film中值为默认值。

关闭Vignetting与Bloom效果

将Lens-Bloom中的Intensity设为0。将Lens-Image Effect中Vignette Intensity设为0。

设置测试用球(与色卡

视频使用了Chrome球(BaseColor 1、Metallic 1、 Roughness 0)与Gray球 50%灰(BaseColor 0.18(Linear)、Roughness 1、Metallic 0)进行测试。使用亮度为3.141593(Pi)的方向光此时灰球的亮度为0.5。使用Color Picker、或者截图使用Photoshop查看

但其实引擎已经预制了颜色校准工具只需要在View Options中勾选Show Engine Content之后搜索ColorCalibrator将SM_ColorCalibrator拖到场景中即可。

动态实时灯光VS静态烘焙灯光

静态烘焙灯光优缺点

优点:

  • 拥有GI效果
  • 消耗较少的软阴影效果
  • 低GPU性能消耗较小

缺点:

  • 迭代效率低
  • 光照效果是静止的
  • 当地图较大时,会占用大量显存。

动态实时灯光优缺点

优点:

  • 所见即所得
  • 光照效果是动态的

缺点:

  • 没有GI效果
  • GPU性能消耗较大

静态烘焙灯光

场景流程

  1. 放入方向光(stationary)
  2. LightMass烘焙(GI)
  3. 放入天光(static)

PS.因为新版本的改动,天光已经可以进行多次反弹,并且可以发射光子了。所以我认为应该第四部,再次烘焙灯光。

Min LightMap Resolution(静态模型Detials)

控制UV块之间Padding值。良好的Padding值可以减少像素浪费以及、提高阴影效果在固定LightMap分辨率下。Min LightMap Resolution应该被设置为小于或者等于LightMap Resolution的值。作者一般直接设为与LightMap Resolution相等的值 image

Num Indirect Lighting Bounce(世界设置)

许多用户喜欢把这个值提高到 100 次,不过好在这个对烘焙时长影响不大,但同时对光照质量影响也不大。实际使用这个值设置为 3 - 5 次就足够了。

下面是对比数据: image image image image image

Static Lighting Level Scale(世界设置)

改变lightmass的级别。默认值为 1越小细节越多最终我们使用 0.1。

其原理是增加单位的区域的采样点的量。但这样会产生大量噪点。 image image image image

Indirect Lighting Smoothness(世界设置)

该值大于1是会对LightMap进行平滑处理反之会进行锐化过高的数值会导致漏光现象。对于这个属性作者建议设置为0.7~1。

Indirect Lighting Quality(世界设置)

增加进行final gathering运算时的采样光线量。提高数值可以减少间接照明时的噪点但代价是极大地增加构建时间。

image image image image

Lighting Build Quality(在构建下拉按钮中)

调整LightMass烘焙质量的总开关。用于整体调整烘焙质量对烘焙时长影响很大。

  • Preview耗时 2 分 16 秒)预览级
  • Medium耗时 7 分 48 秒)中级
  • High耗时 13 分 58 秒)高级
  • Production耗时 30 分 22 秒)产品级

作者的习惯:大部分的工作时间都使用预览级,有时会切换到中级进行效果预览。在周末可能会切换到高级或者产品级进行烘焙来查看效果。

Lighting Level Scale与Indirect Lighting Quality的设置技巧

保持Static Lighting Level Scale × Indirect Lighting Quality = 1。你就可以得到一个噪点较少的场景。

Volume Light Sample Scale

减少Static Lighting Level Scale会增加这些空间采样样本密度

添加LightMass Portal提高室内场景光照质量

给室内场景中的窗户添加LightMass Portal以此可以减少噪点。

其原理是模拟天光效果,向室内发射光子。但也因此会在增加发射光子阶段(渲染过程中)的时间。

Lighting Scenarios

在游戏制作过程中有时会存在同一场景使用多套Lightmap的情况模拟天气系统以及一天中不同时段的光照等。在Unreal 4引擎中可以利用Lighting Scenarios功能达到此效果。使用Lighting Scenarios时首先需要创建不同的光照Level然后在Level设置页面将其设置为Lighting Scenario类型如下图所示 image

另外设置Level的加载方式为使用Blueprint加载 image

接着对不同Level设置不同的光照进行烘焙。烘焙结束后在Persistent Level Blueprint中添加Load Stream Level节点对Level进行加载并设置要加载的Level名称Day如下图所示 image

动态实时灯光

场景流程

  1. 放入方向光(moveable)
  2. 放入天光(moveable)
  3. 开启DistanceFieldAO
  4. 开启SSAO

距离场技术

距离场因为存储了空间信息可以解决屏幕空间渲染技术的缺陷。比如SSAO。距离阴影可以产生与级联阴影不同的软阴影效果。同时你可以在材质编辑器获取距离场数值以制作一些特殊效果。

需要注意的:

  • 只有静态物体可以使用距离场
  • 避免非规整缩放
  • 巨大物体的距离场分辨率会很低(这里建议把大物体进行拆分)
  • 距离场AO的更新会分布在多个帧中所以你没有办法得到真正的实时AO。但这个通常不会引起玩家注意。
  • 你可以通过提高距离场分辨率来修复一些距离场技术渲染不正确的情况。
  • 距离场AO是可以着色的你可以使用它来模拟一些光线反弹效果。

Shadow Map

Shadow Bias

控制阴影在场景中的精确程度。默认值是0.5,这是权衡了精度与性能的值。

但是在渲染角色时,需要适当权衡这个值,以求在效果正确的基础上对性能消耗最小。

级联阴影

当在一个较大表面上投射阴影时,一个贴图的分辨率可能是不够的,而且会有大量的像素损失。于是就出现使用多个贴图拼在一起显示阴影的技术。

Lighting condition EV100 Daylight Light sand or snow in full or slightly hazy sunlight (distinct shadows)a 16 Typical scene in full or slightly hazy sunlight (distinct shadows)a, b 15 Typical scene in hazy sunlight (soft shadows) 14 Typical scene, cloudy bright (no shadows) 13 Typical scene, heavy overcast 12 Areas in open shade, clear sunlight 12 Outdoor, natural light Rainbows Clear sky background 15 Cloudy sky background 14 Sunsets and skylines Just before sunset 1214 At sunset 12 Just after sunset 911 The Moon,c altitude > 40° Full 15 Gibbous 14 Quarter 13 Crescent 12 Blood 0 to 3[6] Moonlight, Moon altitude > 40° Full 3 to 2 Gibbous 4 Quarter 6 Aurora borealis and australis Bright 4 to 3 Medium 6 to 5 Milky Way galactic center 11 to 9 Outdoor, artificial light Neon and other bright signs 910 Night sports 9 Fires and burning buildings 9 Bright street scenes 8 Night street scenes and window displays 78 Night vehicle traffic 5 Fairs and amusement parks 7 Christmas tree lights 45 Floodlit buildings, monuments, and fountains 35 Distant views of lighted buildings 2 Indoor, artificial light Galleries 811 Sports events, stage shows, and the like 89 Circuses, floodlit 8 Ice shows, floodlit 9 Offices and work areas 78 Home interiors 57 Christmas tree lights 45

https://youtu.be/t_tT7pwO_j8 对于曝光的建议是:在调整最大最小值后与偏移后(最暗与最亮处的效果匹配),把切换速度调成最高。

该视频的流程: CubeMap=》Skylight=>LightMaps=>Lightmass Protals=》LightMass Setting=》LightMass Important Volume=》Post Process=》Turn off AO=》Reflection probes

帕拉共

帕拉共因为考虑多平台部分平台可能不支持自适应所以曝光的范围比较小旧版本0.35~0.45

曝光与灯光强度

根据Daedalus51的测试及一些数据方向光强度可以达到125000Lux然后天光5000cd/m²配合16EV值那个只是为了测试场景的数值。

Daedalus51的灯光学院系列视频 https://www.youtube.com/user/51Daedalus/videos

当然这些视频也已经搬运到国内了: https://www.bilibili.com/av59548243/

物理灯光文档 https://docs.unrealengine.com/zh-CN/Engine/Rendering/LightingAndShadows/PhysicalLightUnits/index.html

天光问题

有人提出了一个问题大多数HDR文件你是不知道他用了什么曝光标准以及拍摄时的光照强度

天光转换ev100 0=》16 1=》2^16

使用天空来实现天光效果

添加一个自发光材质给球可以使用EditorSkySphere缩放到Sky Distance Threshold大小后LightMass就会把这个球当做是天空球用以烘焙天光。 https://zhuanlan.zhihu.com/p/70288801

SkySphere的问题 解决方案在材质里乘以 39808

室内保证打光均匀。

选择合理的曝光数值

黑夜曝光方案

min brightness of 0.1 and a max brightness of 1适当增加天光的亮度。