3D场景PBR算法,材质,灯光,接下来我们讨论生产美术资源前需要的:软硬件正确设置,资源到引擎的高效流程,DDC和引擎验证PBR的辅助工具,最后是PBR两种资源生产流程简介,适合:技术美术,游戏关卡地编,3D场景设计师,3D角色设计师。
只有美术素材(材质),灯光信息,输入输出格式,程序算法,同时符合PBR标准的项目,才能被称之为纯粹的'PBR'项目
屏幕校准:校准是必须的,而非一个可选项
如果你在图像生成的源头过程当中不在乎颜色的准确性,那么,最终结果几乎总是糟糕的,在随后观看任何的显示设备上,无论它被校准得多好,或者完全不校准,颜色已经是不准的了,两个错误加起来永远不会负负得正,而当源头正确,观看设备颜色错误的话,结果总是能降低最终颜色损失的影响。
另外我们公司显示器大多数都是Dell U2410,作为一款经典的广色域液晶显示器被大量的行业用户所广泛使用, DataColor SpyderHD视频校色套装:2599,包含色卡,spyderCUBE,校色仪。
Photoshop设置
确保将Color Management设置为在Photoshop中使用sRGB 色域,避免出现色彩损失,只限于BaseColor,而Metallic,Roughness不能在PS中修改
sRGB和Adobe RGB是不同公司不同时间发布的色彩空间,其中sRGB(Standard Red Green Blue)在1997年惠普和微软共同开发的标准色彩空,他们的市场占有率高,因此这一标准应用范围十分广泛,许多硬件和软件开发商都使用的sRGB色彩空间作为其参评的色彩标准空间,同样采用sRGB的设备之间,可以实现互相模拟,Adobe RGB色域更大包含sRGB。
游戏引擎设置
在光照效果来说,只有要求真实光照的话,才考虑线性空间,真实光照并不是说看起来好看,而是数值上就是正确的,要求数值正确是指要求在不同的光照环境下光照结果都正确。
Gamma空间无法适应不同光照环境(不是数学上正确的结果),计算过度曝光,无法适配不同Gamma值的显示器。2D游戏推荐Gamma,3D游戏推荐线性空间。
Unreal 4默认是Linear,Unity LWRP HDRP默认liner,Built-in管线默认是Gamma需要手动改成linear,这里要提到两个底层图形API,sRGB Frame Buffer,和sRGB Sample,其中sRGB Frame Buffer是由硬件支持的,因此安卓手机只有OpenGL ES3.0才可以支持,需要注意Alpha值不做任何转换,它只支持每通道8位。
游戏引擎中贴图设置
软件内预览和保存的图片都是经过gamma校准,我们游戏引擎中使用的是liner空间,因此贴图的颜色应该是线性的,设置方法如下图,Unity和Unreal4中BaseColor的
属性sRGB应该勾选(Metallic和Roughness不需要)
上面说到的sRGB Sampler也是硬件支持的一个特性,如果勾选sRGB,硬件会认为图是sRGB编码的,在采样时会先做一次sRGB反向转换,在把结果返回,所以Shader读到的颜色是校正之前的。
线性空间半透明
主要是UI资源的制作,两种制作方式:Photoshop中设置gmma或者linear 各有优缺点,目前没有最好的解决方案。
Gmma:默认设置,PS图层和图层之间的混合每个图层都经过gamma变换,然后才做了混合,最后输出的是非线性,在游戏引擎,会与PS效果中存在一定差异,可以shader矫正,但依然有差异。
Linear:选择“用灰度系数混合RGB颜色”参数设置为1,这样图层直接线性混合的结果,因此你制作贴图流程是linear,Shader不需要任何修改,线性空间工作习惯(之前FX有差异的问题在最新版PS中已解决)
Substance Painter的效果与引擎中的差异
在游戏开发过程中美术人员制作的资源导入引擎后,表现效果存在差异,主要原因是光照不统一,Shader计算方法不一致,灯光我们很容易可以解决,Shader则需要移植引擎的计算方式到DCC软件中;在PBR工作流中,Substance 系列软件的资产与游戏引擎中存在差异,我们需要做到让引擎和DCC里的渲染效果统一(卡通渲染也是如此),即所见即所得。