UE5 游戏物理灯光渲染与照片级灯光渲染思路笔记
物理光照前言:物理真实渲染:物理灯光 物理材质 物理相机三个组成,对于物理灯光在UE火车站面世之前,我还没有真正去研究物理灯光,想使用现实中拍照来计算光照强度,曝光值来计算引擎中接近于真实的光照,使用真实的相机成像思路来还原真实的光感,并量化灯光参数,让灯光设计更有 依据,不同时段,不同季节,不同场景,不同天气都有对应的物理灯光模板。
游戏物理灯光渲染
为什么要使用物理灯光呢?
[*]一个真实写实的场景,想使用现实中拍照来计算光照强度 曝光值来计算引擎中接近于真实的光照,使用真实的相机成像思路来还原真实的光感,并量化灯光参数,让灯光设计更有依据,不同时段,不同季节,不同场景,不同天气都有对应的物理灯光模板
PBR物理渲染
[*]在游戏引擎渲染框架中寒霜引擎在SIGGRAPH 2014 PBR的基础构架中,寒霜引擎怎么转向基于物理的渲染,提出了组成PBR的三个部分:Materials,Lighting,Camera。光照占据了1/3的因素,在寒霜引擎图程的博客中也阐述了物理光照对于整个PBR架构的重要性。
[*]在PBR渲染中材料需要定义常见的物理材料来指定标准,定义物理世界中常见的物理材料
[*]在PBR渲染中物理相机需要定义去减少很多的变量,参考摄影中相机设置来优化相机参数和控制
[*]在PBR渲染中物理灯光需要参考物理世界灯光来量化参数,让每一个参数变量都是具有依据,让艺术家每个环境灯光都有正确的比例
物理灯光基础含义
[*]光强:每单位立体角在给定方向上由光源发射的发光功率或可见光的量
[*]光通量:灯每秒在所有方向上发出的光量
[*]光照度:流明的光通量均匀分布在1平方米表面上所产生的光照度,接收面上一平方表面的光照强度,指的是光到达这个表面时候的强度。
[*]亮度:单位光源面积在法线方向 上,单位立体角内所发出的光流;接收面上一平方表面的光反射的强度,指的是物体反射出来的强度。(引用说明:感谢日天大佬的图)
光影摄影大师
[*]哈苏官方摄影大师:Ali Rajabi(“在明与暗之间,存在着不可置否的博弈,我在这其中探索平衡、静默、孤独和希望。”)
[*]哈苏官方摄影大师:Maria Svarbova(一个清新脱俗的世界:柔和的色彩和过曝的色调)
上述两位哈苏摄影大师的摄影作品,画面从相机厂商设定来说是相对过曝和过暗,所以物理是相对物理而言
相机基础知识充电站:
相机的成像三要素:
相机三要素知识点:
这三个要素分别控制成像中的一部分,严格来说每个要素控制一个一个影响成像的条件, 光圈控制进光量,从而控制照片的景深关系,快门速度有时候也可以是曝光时间,控制有 照片移动,感光度控制噪点和提亮画面的。
光圈大小影响因素:进光量
光圈大小影响因素:景深
快门(曝光时间)影响因素:进光量
快门(曝光时间)影响因素:物体形态
ISO(感光度)影响因素:曝光
ISO(感光度)影响因素:质感
曝光补偿相关知识:
在摄影中,曝光值( EV ) 是表示相机快门速度和 f 值组合的数字,因此产生相同曝光的所有组合 都具有相同的 EV(对于任何固定的场景亮度)
曝光值是由 ( Ray 2000, 318 ) 定义的以 2 为底的对数刻度:
[*]N是光圈值
[*]t 是以秒为单位的曝光时间(“快门速度”)
物理摄影中EV 与光圈 曝光时间的关系
EV 与照明条件的关系
当 f 值和曝光时间与给定照明条件和 ISO 速度的“推荐”值相匹配时,获得“正确”曝光;该关系由 ISO 2720:1974 规定的曝光方程式给出:
[*]N是相对孔径(f 数)
[*]t 是以秒为单位的曝光时间(“快门速度”)
[*]L是平均场景亮度
[*]S为 ISO 算术感光度
[*]K 是反射光计校准常数
光圈大小与曝光时间对应“正确”的查找表:
EV 与 EV100 的关系
EV 的概念上面也提到了,是曝光值的缩写,那 EV100 是什么呢,EV100 简单来理解就是在固 定 ISO100 的基础上用来计算光圈和曝光时间的 EV 值(这个是由于摄影初期使用胶片来拍 照,单胶片的感光度是不一致的,所以固定 iso100 的胶片来做 EV 值的规律) 各种条件下的曝光值(ISO100)
ISO 与 EV 的关系
ISO 与 EV 是什么关系呢,这个在拍照中法线 ISO 增大照片也在变亮,这是因为 ISO 增加一 级,EV 值也会增加一档,降低反之,那问题就来了,ISO400 比 ISO100 高出多少档?这里我 们也使用更是来计算:
计算 ISO400 提升了多少个 EV,我们把数字带入公式中
我们这里需要计算的是 ISO400 比 ISO100 高出多少档 EV,那 EV100 的值具体是指什么呢? 这里分成两种情况,假设是自己拍照的话根据 EV 值公式计算得来,或者查表得来,或者参考相近环境提供的表得来。
阳光 16 法则
在摄影中,晴天 16 法则(也称为晴天 f /16 法则)是一种无需测光表即可估算正确日光曝光 的方法。 这里有复杂根据焦距 孔径来计算光圈数,f 是焦距 D 是入射光瞳的直径(有效孔径)。通常在 f 数前写上“ f /”,它构成了入瞳直径的数学表达式 f 和 N。例如,如果镜头的焦距为 10 毫 米,入射光瞳直径为 5 毫米,则光圈值将为 2。 但是这里我们不用去纠结计算里面的公式,我们只用知道摄影中晴天的最大 EV 值是 16
曝光补偿的基础知识
当前的相机都允许曝光补偿,并且通常以 EV 表示(Ray 2000、316)。在这种情况下,EV 指的是 指示曝光和设定曝光之间的差异。 曝光补偿的感觉与 EV 标尺本身的感觉相反。曝光量的增加对应于 EV 的减少,因此 +1 EV 的曝光补偿会导致更小的 EV;相反,-1 EV 的曝光补偿会导致更大的 EV。例如,如果比正常对象更 亮的仪表读数指示 EV 16,并且应用 +1 EV 的曝光补偿以适当渲染对象,则最终相机设置将对应于 EV 15。
EV 不是亮度或照度的量度;相反,EV 对应于具有给定 ISO 速度的相机将使用指示的 EV 获得标称正确曝光的亮度(或照度)
Exposure value vs. luminance (ISO 100, K = 12.5) and illuminance (ISO 100, C = 250)Physics World Lighting
还原光照思路
有照片
[*]在拍完照片后的是携带照片大量信息的,在照片中光圈曝光时间 ISO 分别贡献了多 少光亮,简单来理解就是三者分分别为照片贡献了多少个 EV,照片拍摄者拍摄的并不 一定是正确的曝光,曝光补偿不一定是 0,有可能出现了过曝,过暗等情况,
[*]需要计算出拍照的时候总的是多少个 EV,并使用 UE5 的曝光公式来计算拍照时候光 照强度是多少,色温是多少,天气是什么,室内或是室外,并参照正确的曝光表来在引擎中设置曝光区间,使用曲线来控制曝光快慢。
[*]照片 EV = 光圈 EV + 曝光时间 EV + ISOEV
无照片
[*]在无照片的情况下直接使用 ISO100 下测试的 EV 值来调整就好了
测光仪
[*]后续添加
分析照片信息
[*]照片信息中有明确的光圈信息 曝光时间信息 ISO 信息 曝光补偿信息 分析上述照片信息,我知道光圈:3.5 曝光时间:1/1000 ISO:2500 曝光补偿: 0.3
计算照片光照
[*]优先计算光圈和曝光时间的 EV 值:EV = log2 光圈值的平方除以曝光时间。然后计算得到 EV = 13.58(取小数点后两位) 计算 ISO 贡献了多少个 EV,log2ISO 的值除以 100,然后计算得到 EV = 4.64(取小数点后两位)
[*]最后在照片中曝光补偿增加了 0.3 个补偿
[*]最后得出 EV = 13.58 + 4.64 + 0.3 = 18.52(由此也得出该照片过曝了)
计算需要的光照信息
上面根据照片计算得出 EV = 18.52,把 EV 值放到转换公式列表中,计算得到光照强度值:1180334由于查表得到 ISO100 时,超出“正确”EV=13.58 值,超出了 EV=4.94 个值,得到 Unreal Engine Post EVMin:-4.94 EVMax:14(阳光 16 法则)
Unreal Engine物理光照
照度与 EV 转换公式
上述是 UE5 中用来计算 EV 和照度之间的公式,这个我们只用知道转换使用就好了,可以创建一个表格来计算照度和EV值
Unity光照开尔文色温表
色温表现参考图
Unreal Engine人工光源EV和照度参考值
[*]UE5 灯光类型及单位,在 UE5 中不同类型的灯光单位是不一样的,单每种灯源类型都可以 换算
[*]计算光照度公式:Lux=Lumens/m²=cd*sr/m² 例如:1cd 在 1m 距离为 1Lux, 2m 处为 1/4Lux,3m 处为 1/9Lux。
[*]常见的人造光源照度参考:
[*]常见场景照度参考:
灯光 EV 合理映射问题
为什么要把 EV 映射:
在现实物理世界中 EV 的值很大,很多 EV 区间都超出了人眼的范围,所以照相机硬件厂商规定了合理的 EV 区间(-6EV --- 21EV),在摄影中为了更好的照片画面呈现,摄影协会中整理 了常见场景中摄影画面的 EV 区间(-6EV --- 16EV),但是就算已经缩小了这个 EV 区间在游戏 引擎画面中并不需要这么大的区间,对于游戏画面还是有过曝过暗的现象,为了保证游戏画面 完美呈现,同时兼顾显示器亮度参差不齐需要再一次合理规划适合游戏画面的 EV 区间。
环境 Lighting EV&照度:
环境EV 补偿思路:
环境EV 在物理灯光下取值(-5EV -- 9EV)的照度区间(0.1Lux ---1600Lux),在 PostProcessVolume 属性中 EV100 的区间在 ES 选定的区间内,去过区间不够使用曲线来来 增加灯光补偿,例如:照片信息算出来依旧是 14EV,那我 Post 区间和 DirectonalLighting都是最大的 9EV,那我就需要在曲线中增加 5EV 的补偿。
环境EV 补偿计算公式:画面 EV = 区间 EV + 曲线 EV + 自动补偿 EV(一般定义为 0)
计算示例:14EV = 9EV + 5EV(曲线补偿) + 0EV(自动补偿) DirectonalLighting:1600Lux
引擎中数值设置
DirectonalLighting
[*]EV = 13.58 + 4.64 + 0.3 = 18.52使用EV转照度公式:在表格中插入计算函数,最后得到1180334.681,但是这个值远远超出了物理灯管参考值,合理映射后得到1600的照度,然后在Post中增加9EV。
Sky Lighting
[*]直接使用物理大气组件,那么SkyLight只用1的强度,采集平行光照即可
PostProcessVolume
[*]PostProcess Volume需要在物理灯光中确定Min EV100和Max EV100,并在曝光曲线中控制EV的变化曲线
[*]Exposure Compensation Curve中更能精确准确的控制曝光变化(没有复杂的人工光源影响下)
场景验证结果
照片与引擎无光环境对比
照片与引擎光照环境对比
参考链接:
页:
[1]