12 KiB
本文为《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性能消耗较大
静态烘焙灯光
场景流程
- 放入方向光(stationary)
- LightMass烘焙(GI)
- 放入天光(static)
PS.因为新版本的改动,天光已经可以进行多次反弹,并且可以发射光子了。所以我认为应该第四部,再次烘焙灯光。
Min LightMap Resolution(静态模型Detials)
控制UV块之间Padding值。良好的Padding值可以减少像素浪费以及、提高阴影效果(在固定LightMap分辨率下)。Min LightMap Resolution应该被设置为小于或者等于LightMap Resolution的值。(作者一般直接设为与LightMap Resolution相等的值)
Num Indirect Lighting Bounce(世界设置)
许多用户喜欢把这个值提高到 100 次,不过好在这个对烘焙时长影响不大,但同时对光照质量影响也不大。实际使用这个值设置为 3 - 5 次就足够了。
Static Lighting Level Scale(世界设置)
改变lightmass的级别。默认值为 1,越小细节越多,最终我们使用 0.1。
Indirect Lighting Smoothness(世界设置)
该值大于1是会对LightMap进行平滑处理(反之会进行锐化),过高的数值会导致漏光现象。对于这个属性作者建议设置为0.7~1。
Indirect Lighting Quality(世界设置)
增加进行final gathering运算时的采样光线量。提高数值可以减少间接照明时的噪点,但代价是极大地增加构建时间。
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类型,如下图所示:
另外,设置Level的加载方式为使用Blueprint加载:
接着,对不同Level设置不同的光照进行烘焙。烘焙结束后,在Persistent Level Blueprint中,添加Load Stream Level节点对Level进行加载,并设置要加载的Level名称Day,如下图所示:
动态实时灯光
场景流程
- 放入方向光(moveable)
- 放入天光(moveable)
- 开启DistanceFieldAO
- 开启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 12–14 At sunset 12 Just after sunset 9–11 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 9–10 Night sports 9 Fires and burning buildings 9 Bright street scenes 8 Night street scenes and window displays 7–8 Night vehicle traffic 5 Fairs and amusement parks 7 Christmas tree lights 4–5 Floodlit buildings, monuments, and fountains 3–5 Distant views of lighted buildings 2 Indoor, artificial light Galleries 8–11 Sports events, stage shows, and the like 8–9 Circuses, floodlit 8 Ice shows, floodlit 9 Offices and work areas 7–8 Home interiors 5–7 Christmas tree lights 4–5
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/
天光问题
有人提出了一个问题,大多数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,适当增加天光的亮度。