技术博客 | 真实物理属性的灯光环境在UE4中的应用探讨
“ 实时渲染中,对于物理属性灯光环境的实现在目前这个时间点并不是开始,而已是达到接近完善,具备比较广泛的实用性的条件点。就如同PBS的引入让材质的属性变成了明确的定量,客观代替猜测;同样灯光的确定属性让最终的渲染进一步排除了人为猜测,主观审美带来的不确定性。引入这些客观性通常不是最终目的,而是达到最终目标过程中可靠的途径。最终画面的表现还是需要艺术家们的抽象与夸张,物理精确还原是达到最终艺术化动人画面的Raw格式和起点。”
鉴于UE4引擎这方面功能的日趋完善,开发者对此越来越多的需求和疑问,这里分享一些基于UE4,我对这块内容的思考、尝试及结果供大家参考,并希望能引发探讨。
此篇技术博客大纲分为以下五个部分:
为什么我们追求创建基于真实物理属性的灯光环境? 真实和虚拟(UE4)灯光环境同步对象有哪些? 如何同步:一个灯光环境匹配的操作设置实例,包括HDRI的拍摄和制作要点分享 相关FAQ(常见疑问)及解答 列举物理灯光的四个具体应用场景
了解真实环境光比:光/影,室内/室外:做到心中有数,更好控制光比,以此为基础根据需要整体缩放以及艺术化。
规范灯光数值:从太阳和天空开始;避免整个项目灯光参数设置的随意性;即通过流程的控制来确保品质,同时加速迭代。
作为定量协助确定变量
最终效果变量多(灯光,材质,后期);要亮点,对比强些可以调材质,调灯光,或者后期,并不知道哪个是问题;如果我们能明确固定下来几个变量就为固定另外一个变量创造了环境。创建一个物理灯光环境结合Ground Truth的对比,是创建物理正确的材质贴图前提。
匹配实景和虚拟景物灯光
02—
真实和虚拟(UE4)灯光环境同步对象有哪些?
按灯光属性分:灯光方向,强度,色温,质感。
这些我们分别从真实和虚拟两面来罗列:
1、真实世界的灯光环境如何?即真实世界这些变量是多少
太阳方向:取决于太阳位置;可以根据地点,时间,时区计算得出;人造光方向记录于 IES 光源描述文件; 关于强度:真实照度参照;从摄影曝光值角度了解真实世界光照环境;人造光强度厂家也会记录到 IES 光源描述文件; 色温数值参考; 人造光色温厂家记录到 IES 光源描述文件; 质感取决于光源对对象的包裹程度以及光源的离散度(具体可参考《在 UE4 实现灯光之美》中关于灯光频率这块的描述)。 https://share.weiyun.com/5dzh0ZH 太阳的尺寸使用太阳在视口中张角来描述,在晴天的时候为 0.5357度;加大这个数值可模拟更大的太阳,或者多云天气。人造光光质感也会根据 IES 光源描述文件反应出来。
2、UE4 中目前的灯光环境如何?即哪些灯光在 UE4 中支持物理精确的还原,或则逼近模拟
强度:UE4 中直接光可使用基于物理的灯光强度参数,比如 DirectionalLight 使用 lx;Skylight 支持 HDRI;Spot/Point/Rec/lights 使用 lm 或者 cd; 方向光方向:基于地理的太阳位置; 天光强度:基于物理的大气;被 Skylight 捕捉后可作为基于物理的天光 IBL; 综合:Sun and Sky Actor : 太阳方向,色温,天光颜色,强度,大气颜色强度; GI:反弹光包括 Lightmaps 和 ILC/VLM 都基于光线跟踪计算后保存为静态灯光信息;ILC 及Lightmap 亮度支持高动态范围,VLM 动态范围比较小 Reflection 取决于反射源的亮度,颜色,动态,光质; 色温:所有灯光支持色温调整,线性空间计算。天光色温来自 HDRI,拍摄时需要 6500K; 质感:UE4 支持面光源,光源尺寸(Source Radius),光源离散度或 Diffusion(Soft Source Radius)调整,或应用相应 IES;方向光视口张角(Source Angel);
这里有个很重要但容易被忽略的概念即灯光品质(Quality of light)。在传统灯光设置中这取决于灯光对对象的包裹程度以及灯光方向的离散型;它决定了对象明暗过度的快慢,以及高光的柔和度。如下图在不同光质下对象明暗过度及高光清晰度的区别。
IES 光源描述文件应用:UE4 里可还原 IES 中对光源强度(方向)(Enable Use IES Intensity),衰减的描述;目前不支持色温和质感的描述还原;
其他光源:自发光材质作为光源在 Raytracing 或者 lightmass 下可以参与到实际的贡献中;材质亮度需要符合实际的亮度值;这个值可以通过测光得出,或者使用相应 HDRI。一般自发光光源参与灯光计算后结果品质相较于真实灯光组件低;除非自发光在背景上不建议作为光源使用。
UE4 中的摄像机在拍摄虚拟世界时会把 32bit 的虚拟线性世界通过 Tonemapping 映射到一个 LDR 的范围再呈现到显示器上;这个类似真实的照相机把真实线性世界通过 Tonemapping 后把 Raw 映射成 JPG。
UE4 中默认的曝光会把 SceneColor 高于 65504 的亮度截掉,为了更高的动态,需要对场景先做一次预曝光,把高于这个值的亮度 Remap 到 16bit 范围内,保留亮度的范围和层次信息。
Apply Pre-Exposure before writing to the scene color :对比开关前后的效果可以看到打开后对高光细节(太阳周围)的保留。一般 EV100 大于 15 开关此选项差别大。
如果需要使用引擎摄像机的自动曝光功能,对于超高动态的表现需要打开以下 Project Settings 中选项。这可以扩展自动曝光可以适应的动态范围,如果关闭大于一定数值的亮度无法被自适应而导致曝光过度,一般情况下 EV 大于 4 之后会有这种问题出现(即使 PP 中自动曝光 Max Brightness 设置为很高比如 20)。
以下两图是开关这个选项并打开 HDR Visualize 后亮度动态范围图标上的对比;可以看到关闭选项,信息超出 EV4 后出现丢失。
UE4 Tonemapping:这个视频很好地解释了 UE4 中的 Tonemapping 是如何工作的。
虚拟摄像机类似真实照相机支持白平衡调整,也是在线性空间计算。
结合实际,我们以一个阳光明媚无云的晴天作为例子来简单实践一下。
UE4 中:
Project settings:Apply Pre-Exposure before writing to the scene color;
摄像机:基于阳光 16 法则,模拟真实照相机对于这种环境的正常曝光参数 EV 固定为 13;这里可以使用光圈快门 ISO 的组合;白平衡 6500K;
太阳直射光强度 150000lux, 色温 6500K,方向使用基于地理的 Sun Position Calculator 计算得出;太阳质感通过 Source Angle=0.5(定义光源面积)设置;
天光:使用自定义的 HDRI(捕捉的要求见之后描述);根据曝光 EV13 计算出 8192(2^13)作为 Sky Light 的 Intensity;天光的色温和质感都来自 HDRI 本身;
以上太阳光,天光的方向,强度,颜色也可以通过 SunSky Actor 来得到;或者以此作为一个起点;
反射:天空球模型,附上自发光材质,贴图来自 HDRI,并且在材质中倍乘 8192(2^13);场景中放置 Reflection Capture,捕捉天空球背景(Build Reflection Capture);
曝光范围: 照相机中间曝光设置为 EV13 的组合参数,白平衡 6500K;然后进行包围曝光;一般来说 7张,正负 2EV 间隔。 12EV 的动态范围基本可以涵盖普通的环境;但有太阳的场景环境动态非常大,为逼近真实的光照需要涵盖 20+以上的 EV。 照片的张数并不是太重要,重要的是需要覆盖全动态。 最亮和最暗曝光的标准是场景最亮和最暗部分达到中灰曝光,尤其高亮区域的保留非常重要,最低曝光(最暗)的那张照片需要包含最高亮区域的所有细节,即最暗那张照片中不能有纯白,否则继续往下曝光,直到没有纯白为止;否则整个 HDRI 的照度损失大。
以下三张图片说明最高曝光(最亮)照片的中最暗的区域和最低曝光(最暗)照片中最亮的区域需要接近中灰。
以下两张图片说明动态范围不同的两张 HDRI 进入 UE4 作为照明时极大的亮度差异和失真。即使是极小的几个像素,只要亮度足够高对结果影响大。
色温:无论环境色温如何,摄像机色温固定为 6500K 拍摄。这是为了更好的匹配其他已知色温光源在 UE4 中的创建。 后期 照片中的直接光源可以去除掉,对白平衡影响比较大;除非非常精准的曝光和足够广阔的动态范围,否则 HDRI 的高亮区域的色温偏差会增大,失去准确的色彩。比如太阳可选择去掉(使用方向灯强度,色温,以及其 Angle 来模拟光源大小质感)。 后期中避免调整色温,保留原始色温(色温的偏移调整可以到 UE4 中执行)。 后期处理 Tonemapper HDRI 决定环境光质感;这里可以使用灰阶的色板来参考(灰阶色板在照片中,对比实际的灰板矫正)。 可使用 PS Merge 成 HDRI 32bit,比例为 2:1,如果图分辨率大,导入 UE4 后手动设置最大分辨率来满足尺寸需求。
04—
以上仅是一个特定光照环境(晴天)的还原,但现实的光照环境复杂多变,还有哪些更多需要注意的吗?
直接光(即在 UE4 中需要使用光源来实现的)强度和色温需要被测量(测光表,相机测光,白平衡表);间接光(HDRI)的获取在任何情况下使用 6500K 色温来拍摄 Ground Truth 和 HDRI;
我们需要一些辅助道具被拍摄入正常的照片作为 Ground Truth 以及 HDRI 中,用来作为 Tonemapping HDRI 时候的参考;Groud Truth 用来作为参考在 UE4 中 eye ball 灯光属性调整目标参考,比如:
灰球(质感);金属球(反射);灰板(色温曝光);灰阶(Gamma);色卡(综合参考);
UE4 中对照材质:金属球:Roughness=0.1; BaseColor=0.95; 灰球:Roughness=0.95;Basecolor=0.18;可利用引擎自带色彩校验资源 StaticMesh'/Engine/EditorMeshes/ColorCalibrator/SM_ColorCalibrator.SM_ColorCalibrator'。
EV 最好不要超过 15,否则由于精度关系会失真并损失细节。开 Pre-Exposure 可改善。
比如数字人,汽车。
不确定的是材质,首先要确定灯光,即匹配虚拟灯光环境到真实灯光环境;这里的匹配灯光不是最终目的,而是为了固定一个变量而确定另一个变量(材质);确定材质后最终的成品中灯光可以变化。
确定灯光的方式就是利用已知确定的材质来协助,即上面提到的那些真实和虚拟的辅助工具,灰球(质感);金属球(反射);灰板(色温曝光);灰阶(Gamma);色卡(综合参考)等通过一个lookDev的过程在虚拟环境中还原真实灯光;
同时在同样灯光环境中拍摄真实照片作为Ground Truth,作为创建虚拟材质的参考对比,最终在虚拟环境中创建出准确的虚拟材质。
比如 Virtual Projection:虚拟背景+实拍角色(影棚)。
不确定的是真实世界灯光,需要为实拍角色创建匹配虚拟背景环境的真实灯光rig;
此应用中确定灯光的方式类似于甲,但目标反向,即从虚拟同步到真实。如果虚拟环境中的灯光就是用物理灯光,那样在真实环境中更容易还原;另外也可以使用虚拟环境播放到LED墙上作为背景的同时直接作为光源(依然需要LookDev)。
比如虚拟角色+真实环境。
这里两个都是变量;首先还原真实的灯光;可以是特定的灯光环境(晴天,阴天,黄昏等),或者非特定(需要LookDev);然后在此灯光下创建虚拟的材质;然后再回到灯光艺术化灯光。
了解真实对比环境:做到心中有数,以此为基础根据需要整体缩放以及艺术化
规范灯光数值:避免灯光参数的随意性
近期焦点
虚幻引擎4.24现已发布!
Epic Games和Quixel携手赋予创造者力量
Epic MegaGrants计划发放资金达1300万美元
Build:Munich ’19 for Automotive:实时工作流程日趋成熟
恭喜2019 Epic MegaJam获奖者
网络研讨会:在UE4中利用后期处理效果实现电影级画质
《塞娜的传说:地狱之刃II》领衔:虚幻作品闪耀TGA 2019