关于建立资产统一审查预览环境的一些说明
碰到过多次有开发人员问到我在怎么样的环境下去检查制作资产,比如灯光数值要多大,是否要符合真实物理灯光参数等等。即使没问到,但观察下来事实也没做好(或者没意识到),所以觉得有必要提出来做个说明,并附带一个工程项目供参考。
工程项目下载链接:https://share.weiyun.com/VmnYENfQ
首先我认为有个误解是把灯光数值物理真实性和材质表现准确性绑在一起,它们没啥直接关系。比方太阳光亮度100000lux和3.14lux对材质贴图定义准确性没直接影响;只要曝光合适都可以,就如同真实相机可以自动适应各种亮度环境那样,一个合适的曝光组合(光圈,快门,ISO)总能让照片最终亮度讨好人眼。所以这个环境关键一是曝光合适;另外一点是光比,光比对表现结构,纹理细节,质感等有影响。这块倒是可以借鉴自然界的光比来做,我个人建议高、中、低三种光比即可;不同光比对检查资产各有意义,后面具体论述。
下面具体来说。解决一个问题一般分三阶段:举问题,列需求,找方案;这样比较系统全面,不容易遗漏或过程中偏离方向。
举问题:比如材质照不亮,过曝,材质多,不同人或设备看到差异化,反复迭代,品质不统一等等。
列需求:
需要一个固定统一环境制作检查资产,能精确地表现美术师初衷效果(亮度,色彩,对比,质感)。资产,主要是贴图材质在任何灯光环境下都表现良好;
在不同的机器上表现一致;比如美术总监或Lead查看时和美术师(内部或外包)看到一致;
DCC环境同步;比如Sebstance Painter和UE之间的预览同步。
找方案:营造这个环境不仅仅只涉及灯光,还包括曝光,Tonemapping等。后期部分较简单,全部默认;另外为准确测光暂时关闭一些屏幕特效(具体看后面),打完光后可以再开启增加效果。
准确曝光的环境
需要曝光准确道理借鉴拍照,如果过曝或者欠曝或者曝光不稳定就无法准确评估对象亮度,色彩,对比,质感等。虽然道理显而易见,但在UE环境中经常被忽略,或者没有很好地被执行。在执行中需要实现两点,第一稳定,关闭自动曝光,启用手动曝光,并基于固定亮度曝光(EV100=0),为什么是EV0后面会提到;第二是准确,衡量准确的标准可参考摄影中灰板测光的道理,如何测光,测什么内容后面会提到。
PS:这里解释下EV100概念,为了容易理解,简单的说就是个描述场景绝对亮度的概念,值越大越亮。
具体操作设置如下:
创建测光对象及环境:灰板材质Default lit;BaseColor=0.18(中灰线性值,sRGB是0.46); Specular=0(高光关闭为了不影响测光);关闭Pre Exposure(Project Settings设置,这是为了正确还原Final Color值);材质赋给灰板模型并放置于场景中,面朝上。关闭一些影响Final Color亮度的后期(Bloom,Vignette,SSAO,SSR,这些都是为了去除后期效果对测光的影响);以上设置提供了一个标准测光对象,及稳定测光环境。
固定曝光基准(EV100=0):关闭自动曝光,并固定曝光基准为EV100=0即把相机或后期的曝光调整到适配EV100=0的状态,参数如下:
涵盖不同光比环境
有的说是否需要也准备不同亮度的环境。我认为不需要,因为绝对亮度本身没有意义。但存在有些情况,需要材质在非准确曝光的环境下呈现,通过让曝光向左或右偏移产生理想的氛围,比如高调或低调。这种需求是实在的,但这并不会影响材质的创建的准确性,也就不必作为资产预览环境来对待;可以作为一个曝光补偿的选项开放。
光比的衡量是向光和背光部分之间的亮度比值;经过对真实图片的分析,我选择了以下几种光比分别对应真实世界阴天,多云,晴朗无云三种情况。
以下为线性空间下明暗面亮度差异,图片来自HDRIHaven。
保存并共享预览环境
Preview Scene Settings Profile的创建和共享:勾选Shared Profile共享,并且记得同步项目目录下的Editor.ini。
DCC一致的预览环境
光照差别
曝光差别
Shader差别
后期差别,包括Tonemapping
贴图差别,如压缩,filter,mip等
Substance Painter:显示设置中使用和UE同样的HDRI,旋转270度(Environment Roatation 270);EV -0.45,打开Temporal AA;Shader设置中打开ACES Tonemapping;
UE里关闭Directional Light仅使用IBL,背景Environment Color 0.04;关闭Bloom,Vignette,AO,SSR;对比效果如下,两者有稍许区别,但已非常接近。
关于4.25以后自动曝光默认Exposure Compensation +1的问题:这个+1的曝光补偿个人认为在大多情况讨好在明亮观察环境下的视觉体验(比如办公室显示器),但不符合18%反射率基准测光亮度(Studio监视或影院观影环境),过曝还会降低对比及色彩饱和度。当然这个+1的默认参数可以在Project Settings里修改。
关于中灰0.18:RGB空间通常无法精确表达亮度,因此sRGB的0.5(或128.128.128)并非中灰。亮度在电脑上一般以Lab空间的L值更准确反映人眼对灰度的感受。Lab的0.5/sRGB的0.46(或119.119.199)/Linear的0.18才是通常sRGB显示器下看到的中灰。UE中的自动曝光也是以线性0.18为基准的。
HDRI的直接光源处理:直接光源部分是否需要处理掉?这取决于项目具体情况。游戏主要是手游就需要处理掉,之后用灯光对象来替代。这样做的目的是能产生阴影,并且能在不同平台的预览环境下尽量一致。虽然IBL也能在SM5下产生距离场等投影,但品质较差,并且不具有跨平台性。如果是做影视动画目的,HDRI上的直接光源可以不处理掉,完全使用HDRI照明即可。因为平台单一,追求高品质,使用实时Ray Tracing来投影,那样的投影具有半影效果,光线反射也更精准。
HDRI的默认曝光处理:就是制作时包围曝光中间那帧的亮度。这个亮度影响导入UE后作为背景贴图时的亮度以及它本身作为IBL带来的照度。目标是把这个亮度处理成作为背景亮度合适,更重要的是作为光源让测光对象区域能够保持在EV0左右。避免通过在材质或者天光intensity中调整数值来达到同样结果。目前网上下载的HDRI资源很大部分这块不是非常精准,需要后期微调一下,比如PS中通过曝光调整Bias一些即可,这是一个反复在UE和PS中调整校验的过程。
预览环境是否需要让对象look nice?比如三点光,轮廓光,各种补光创造最佳表现,甚至艺术化。个人觉得基于这个环境的初衷而言没有必要,可能还有引起困扰。
选择地图中AssetsPreview_BP Actor调整其中Lighting Scenarios参数切换不同的环境;目前有高,中,低对比三种环境。三种环境对比强度可以用Pixel Inspector工具吸取灰板光照下和阴影中的Final Color(Linear)值比较差距。
无论哪个环境EV100始终为0;AssetsPreview_BP中三种环境下直射光和天光的数值不用太在意,确定这些值的依据是确保环境EV100=0以及光比符合预期。
Exposure Compensation参数是用来检查在高调或低调环境材质表现。准确曝光保持默认0即可;+1和引擎自动曝光亮度接近。
火堆自发光材质(非PBR)使用Eye Adaption材质节点为适应在不同光照EV条件下保持人眼感受的一致性。
渐变灰贴图值为sRGB空间下38-238(为经验值),自然界绝大部分材质固有色都在这个范围内。制作资产时需要注意,超出范围易引起死黑和过曝。
灰板材质为中灰值0.46或119.119.119(sRGB)或0.18(Linear);为精确测光去除了Specular。
三种环境也被存为三个Preview Scene Settings中Profiles,方便资产编辑器中预览。
Realtime RayTracing 参数是基于项目已经打开Real Time Ray Tracing前提下的开关。
近期焦点