查看原文
其他

技术博客 | 真实物理属性的灯光环境在UE4中的应用探讨

李文磊 虚幻引擎 2020-09-06


注:为了更好的帮助读者理解和学习,本文有大量辅助资料和外部链接,建议点击文末“阅读原文”查看完整文章。


“ 实时渲染中,对于物理属性灯光环境的实现在目前这个时间点并不是开始,而已是达到接近完善,具备比较广泛的实用性的条件点。就如同PBS的引入让材质的属性变成了明确的定量,客观代替猜测;同样灯光的确定属性让最终的渲染进一步排除了人为猜测,主观审美带来的不确定性。引入这些客观性通常不是最终目的,而是达到最终目标过程中可靠的途径。最终画面的表现还是需要艺术家们的抽象与夸张,物理精确还原是达到最终艺术化动人画面的Raw格式和起点。”


鉴于UE4引擎这方面功能的日趋完善,开发者对此越来越多的需求和疑问,这里分享一些基于UE4,我对这块内容的思考、尝试及结果供大家参考,并希望能引发探讨。
此篇技术博客大纲分为以下五个部分:
  • 为什么我们追求创建基于真实物理属性的灯光环境?
  • 真实和虚拟(UE4)灯光环境同步对象有哪些?
  • 如何同步:一个灯光环境匹配的操作设置实例,包括HDRI的拍摄和制作要点分享
  • 相关FAQ(常见疑问)及解答
  • 列举物理灯光的四个具体应用场景

01
为什么我们追求创建基于真实物理属性的灯光环境?
当然是希望创建更加真实的环境喽!但目的不止于此并可细化,通过模拟真实灯光数值我认为目的可以涉及但不局限于以下方面:
  • 了解真实环境光比:光/影,室内/室外:做到心中有数,更好控制光比,以此为基础根据需要整体缩放以及艺术化。


虚拟创作时太阳要多强,天光要多亮,局部的点光亮度,色温是多少,面积多大等等,传统方式基于艺术家的眼睛自由设定。这并不是说有问题,但要表现真实每个艺术家对真实的看法不一,不可靠。如果有一个真实光比信息的参考,或者作为起点,在此基础上再做艺术化很多时候会带来意想不到的效果。
  • 规范灯光数值:从太阳和天空开始;避免整个项目灯光参数设置的随意性;即通过流程的控制来确保品质,同时加速迭代。


同样有多位艺术家在一个项目上工作时,由于审美差异,决定最终效果的变量多样(灯光,材质,后期等),为达到一个视觉目标会出现五花八门的组合设置,不利于统一资源,修改迭代效率以及 Debug。规范统一的数值范围可以有效缓解这些问题。
  • 作为定量协助确定变量


最终效果变量多(灯光,材质,后期);要亮点,对比强些可以调材质,调灯光,或者后期,并不知道哪个是问题;如果我们能明确固定下来几个变量就为固定另外一个变量创造了环境。创建一个物理灯光环境结合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。一般自发光光源参与灯光计算后结果品质相较于真实灯光组件低;除非自发光在背景上不建议作为光源使用。

不仅仅是灯光还有一个因素必须考虑就是摄像机明确我们两边对比的对象不是一边是人眼看真实世界,另一边是人眼看显示器上渲染结果;而是都是基于摄像机,而且都是在显示器上观看,即 3D 渲染图片和照相机拍摄图片,两者在显示器上的对比因此就不得不涉及到摄像机的曝光,色温,以及 Tonemapping。真实虚拟摄像机都有以上三个因素。真实摄像机看到的是真实线性世界;虚拟摄像机看到的是虚拟线性世界;这里聊下 UE4 中摄像机这几个因素:
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 是如何工作的。

  • 虚拟摄像机类似真实照相机支持白平衡调整,也是在线性空间计算。



03
如何同步:一个灯光环境匹配的操作设置实例


结合实际,我们以一个阳光明媚无云的晴天作为例子来简单实践一下。

UE4 中:

  • Project settingsApply 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);

HDRI 的这里得到准确的天光环境的 HDRI 图是关键;以下是我在拍摄和制作中的一点体会
  • 曝光范围:
    • 照相机中间曝光设置为 EV13 的组合参数,白平衡 6500K;然后进行包围曝光;一般来说 7张,正负 2EV 间隔。
    • 12EV 的动态范围基本可以涵盖普通的环境;但有太阳的场景环境动态非常大,为逼近真实的光照需要涵盖 20+以上的 EV。
    • 照片的张数并不是太重要,重要的是需要覆盖全动态。
    • 最亮和最暗曝光的标准是场景最亮和最暗部分达到中灰曝光,尤其高亮区域的保留非常重要,最低曝光(最暗)的那张照片需要包含最高亮区域的所有细节,即最暗那张照片中不能有纯白,否则继续往下曝光,直到没有纯白为止;否则整个 HDRI 的照度损失大。


以下三张图片说明最高曝光(最亮)照片的中最暗的区域和最低曝光(最暗)照片中最亮的区域需要接近中灰。




以下三张图说明第一张图在降低 8 档 EV 后的结果,可以看到保留的高动态的 HDRI(中间)在太阳位置依旧保留亮度信息;没有保留足够高动态的 HDRI(第三张)在太阳位置已经没有信息。

以下两张图片说明动态范围不同的两张 HDRI 进入 UE4 作为照明时极大的亮度差异和失真。即使是极小的几个像素,只要亮度足够高对结果影响大。


  • 色温:无论环境色温如何,摄像机色温固定为 6500K 拍摄。这是为了更好的匹配其他已知色温光源在 UE4 中的创建。


  • 后期
    • 照片中的直接光源可以去除掉,对白平衡影响比较大;除非非常精准的曝光和足够广阔的动态范围,否则 HDRI 的高亮区域的色温偏差会增大,失去准确的色彩。比如太阳可选择去掉(使用方向灯强度,色温,以及其 Angle 来模拟光源大小质感)。
    • 后期中避免调整色温,保留原始色温(色温的偏移调整可以到 UE4 中执行)。
    • 后期处理 Tonemapper HDRI 决定环境光质感;这里可以使用灰阶的色板来参考(灰阶色板在照片中,对比实际的灰板矫正)。
    • 可使用 PS Merge 成 HDRI 32bit,比例为 2:1,如果图分辨率大,导入 UE4 后手动设置最大分辨率来满足尺寸需求。

最后进入 UE4 后如图:


04
一些常见的疑问


虚拟摄像机为什么要 EV 值和拍摄的时候相机 EV 值同步?

可以不同步,使用默认的 EV100=0,这种情况下天光及自发光天空盒子材质都不需要倍乘 2^13,视窗中看到的亮度是一样的。但是太阳的亮度就不好控制,无法使用基于现实 150000lux 的值,而需要极大的减小(除以 2^13);人造光源同样也无法直接映射厂家提供的照度值,需要相应减小;这样不同光源光比无法精准设置。当然我们可以符合真实物理参数设置好后统一按比例缩小,最终效果和缩放前是一致的。UE 里使用的 EV 值其实可以根据视觉需要随意的,同步到照相机中间曝光的 EV 的目的仅仅是需要一个曝光的起点,在这个起点的 EV 下,UE 里的视窗看到的亮度等同于照相机拍摄的中间曝光的亮度;然后以这个起点还原灯光的物理值,然后再做美术上的偏移修改。
以下展示了整体缩放所有光源亮度值为 1/1000,并相应调整摄像机 EV 后的对比;结果看上去是一致的。



最终的图片(上图)看上去并不好看啊,对比这么强烈,这是我们想要的吗?

这就回到文章第一个问题,为什么要使用物理灯光?我个人认为最终还是需要为视觉效果服务。第一个目的是了解光比,真实世界光比在以上这个光线环境下是非常高的,但通常我们的显示器并不具备这样的还原能力。我们需要艺术化,这里减小光比,比如增强人造光源的亮度平衡光比;这也是传统电影实景打光的技巧。那为什么搞这么复杂,直接一开始就让美术根据需求结合显示效果自由调整就可以了?这就回到之前说的目的二:规范灯光数值:从太阳和天空开始;避免全地图,或全项目灯光参数的随意性;另外如果没有从真实的光比开始有时无法想象到这种真实光比的夸张性,会被局限在感性理解的思维中。



以上仅是一个特定光照环境(晴天)的还原,但现实的光照环境复杂多变,还有哪些更多需要注意的吗?


特定环境照度,白平衡等为已知,但现实环境光线复杂,需要做 LookDev 来尽可能的还原灯光环境;


  • 直接光(即在 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'。


以下为辅助工具
以下为 UE4 中 Ground Truth(照片)和 CG 之间对比


第三方 UE4 LookDev 工作流程分享参考
https://www.youtube.com/watch?v=70uNXZbUJVE&t=945s
  • EV 最好不要超过 15,否则由于精度关系会失真并损失细节。开 Pre-Exposure 可改善。


05
具体应用场景


甲:创建准确的虚拟材质  虚拟材质
比如数字人,汽车。

不确定的是材质,首先要确定灯光,即匹配虚拟灯光环境到真实灯光环境;这里的匹配灯光不是最终目的,而是为了固定一个变量而确定另一个变量(材质);确定材质后最终的成品中灯光可以变化。

确定灯光的方式就是利用已知确定的材质来协助,即上面提到的那些真实和虚拟的辅助工具,灰球(质感);金属球(反射);灰板(色温曝光);灰阶(Gamma);色卡(综合参考)等通过一个lookDev的过程在虚拟环境中还原真实灯光;


同时在同样灯光环境中拍摄真实照片作为Ground Truth,作为创建虚拟材质的参考对比,最终在虚拟环境中创建出准确的虚拟材质。






乙:创建准确的灯光(真实世界灯光)真实灯光
比如 Virtual Projection:虚拟背景+实拍角色(影棚)。

不确定的是真实世界灯光,需要为实拍角色创建匹配虚拟背景环境的真实灯光rig;


此应用中确定灯光的方式类似于甲,但目标反向,即从虚拟同步到真实。如果虚拟环境中的灯光就是用物理灯光,那样在真实环境中更容易还原;另外也可以使用虚拟环境播放到LED墙上作为背景的同时直接作为光源(依然需要LookDev)




丙:创建准确的灯光(虚拟世界灯光)虚拟灯光
比如虚拟角色+真实环境。
不确定是对虚拟角色照明的虚拟灯光,需要在虚拟世界还原真实的灯光。这里类似甲应用,但这里匹配灯光是最终的目的;虚拟角色或环境的材质需要是定量,即材质属性是确定物理精确的,比如扫描的材质。


丁:创建虚拟灯光和材质 虚拟灯光 虚拟材质
这里两个都是变量;首先还原真实的灯光;可以是特定的灯光环境(晴天,阴天,黄昏等),或者非特定(需要LookDev);然后在此灯光下创建虚拟的材质;然后再回到灯光艺术化灯光。
这和直接在虚拟世界中同时调整灯光和材质有什么区别呢?目的是什么呢?这又回到了我们最开始的第一个问题的答案。
  • 了解真实对比环境:做到心中有数,以此为基础根据需要整体缩放以及艺术化

  • 规范灯光数值:避免灯光参数的随意性



点击文末“阅读原文”查看完整文章。
近期焦点

虚幻引擎4.24现已发布!

Epic Games和Quixel携手赋予创造者力量

Epic MegaGrants计划发放资金达1300万美元

全新建筑可视化内饰渲染示例项目现已推出!
[预告]虚幻引擎技术开放日2020 颁奖典礼奖项预告

Build:Munich ’19 for Automotive:实时工作流程日趋成熟

恭喜2019 Epic MegaJam获奖者

网络研讨会:在UE4中利用后期处理效果实现电影级画质

《塞娜的传说:地狱之刃II》领衔:虚幻作品闪耀TGA 2019

[活动回顾]Unreal Circle:影视动画专场杭州站圆满落幕

Twinmotion社区挑战赛第二季:“最佳秋季现代建筑”

虚幻引擎Epic MegaGrant:教育工作者须知

面向中学教师的“交互式3D教学”竞赛启动




如需获得更多虚幻引擎4的授权合作方式和技术支持,请发送邮件至
EGC-Business@epicgames.com咨询;
如果你想来 Epic 工作,扫描下方二维码关注我们后点击菜单栏按钮“更多”并选择“招聘”,即可了解我们的最新招聘信息。Epic Games 欢迎你的加入!
长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是 Epic Games 旗下 Unreal Engine 的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存