White color temperature calibrations of game engines

检测 Substance painter 和 Unity3D Engine Viewport rendering 结果并调整。

Overview

SP 和Unity引擎或者虚幻引擎等多数引擎之间都有显示上的差异。

现在我们需要了解两个方面。

这本书的后面也会讲到,就算是通用的pbr渲染,内部也会有软件上的差异。

差距明显的例子有,随着 Sampling 次数的不同,渲染的品质也有很大的差距。

[SP 的 shader 部分结构]

在计算层面, PBR 的 BRDF( Bidirectional Reflectance Distribution Function : 双向反射分布函数) 的 Irradiance (入射) envIrradiance ()算法, 为了 Radiance (发光) 和 Micro Facets Specular reflection 使用的 ‘importanceSampleGGX’ 等算法,或者根据垂直反射率 F0 的图形近似式会稍微有差距(包含品质上的差距)。

游戏的开发工程里,以我参与过的多数项目经验来讲,大部分美术首先提的需求或者疑惑的部分就是这些Schlick近似式。 用于Fresnel 方程式的图形方面的近似式。 用Half-Vector 求 Fresnel 方程式中反射系数近似值的算法。

学习目标。

观察渲染引擎的特征,试着去理解各种PBR渲染和相关技术。

为了测量窗口并调整需要做的准备。

要确认的 Resource 大致分为两部分。

1. 没有修改过的 Panorama.hdr 文件

2. Skybox-Cube-SP.shader

Skybox-Cube-SP.shader 在 vielbooks 官网的 GIT 里可以下载。

(例题的 GIT 储存地址和安装方式请参考前面的 下载案例文件部分 )

调整。

为了测量并调整 SP 和Unity的窗口,我们会检查两种材质。

需要做的是,最重要的白色分布检查,然后是 Metal metrial 效果和 Specular reflection 。

观察下面两张图,会发现反光上稍微又不一样。

左侧是 SP ,右侧是Unity引擎。

SP
Unity

Unity引擎里使用的PBR shader 在作者当时参与的项目计算 Specular highlight 不是用的GGX 而是用的PhongBlinn ,所以会有所差距。 这里的例题用的是Unity标准 PBR shader。 为了调整并检查,开发团队最好亲自开发SP 内部的shader 来用,而不是直接用 GGX 。

SP Shading 参数。

1. SP 渲染精度的参数。

为了调成跟Unity标准shader相似的品质,需要确认 SP shading参数。

Pbr-metal-rough 是基本参数。

AO Intensity 的基本值是 0.75,作者会修改成 1.0 来使用。

以 1.0 为基本参数,所有引擎里都要统一并避免误差。

用 AO 来讲的话, Texture Baker 生成的贴图的初始参数是 0.75 ,在Unity里通常初始参数是 1.0 ,所以比起把 Unity 的 AO 修改成 0.75 来用,把 SP 的值修改成 1.0 后添加 AO 图层,修改最后导出的 mixed ambient occlusion texture 用在Unity上就可以维持整个 pipe line 的 1.0 这个值。Environment Map 用 panorama 设置。panorama.hdr 在 SP 或者SD安装目录的resources 里可以查到,这样Unity里面就可以使用。panorama.hdr 在 “C:\Program Files\Allegorithmic\Substance Painter\resources\shelf\allegorithmic\environments\Exterior”里面。

为了改善画质,在 Post Effect 里激活 Antialiasing 和 Tone Mapping 。勾上选择框。

之后设置场景的时候会使用 Antialiasing 和 Tone Mapping 。

2. 在Unity设置 panorama hdr map 。

第一阶段完成后把 panorama.hdr 文件复制到Unity工程。

导入好 Hdr 文件后,在Unity工程选择并确认 Inspector 。

Mapping 设置为 Auto , Convolution Type 是 none , 不激活 sRGB function 。

为了让 SP 的选项参数一样,修改UnITY SkyCube shader。

先删除 Tint 值。

跟 SP 一样,让0成为 Exposure 的基本值,在shader内部修改。

把 Directional light 值修改成 0.3 左右。根据情况在 0.3 和 0.7 中间调整体亮度。

SP 的 IBL 光照使用的技术是 Importance Sampling ,Unity 用的是 SH9(Spherical Harmonic) ,在亮的部分有点差距。所以根据hdr图片里的光照方向,找一个类似的 Directional light 方向,一起用亮度(intensity)会有利于得出更好的结果。

建议在BLBOOKS网站下载案例再整体分析下。

\Example\PBR Texture Test\WhiteCalibrationScene.unity

3. 设置 Unity 场景。

要制作 PBR 校准场景。

先在 https://share.allegorithmic.com/libraries/2026 下载 Mesh 。

制作Unity工程。

场景里要用到的mesh是从上面下载的,现在我们在 SP 里打开 example scene 。

首先为了 ‘白平衡(White Balance)’ 变更 Material 。

先把例题的原有 Smart Material Layer 关掉。

在这上面添加一层 Fill Layer 。(之前空着的图层是 Paint Layer – 把这个删掉,添加 Fill Layer 。)

Base Color 变为 White 后 Roughness 是 0.9 , metallic 设成 0.1 。

Environment Opacity 修改成 100 。

Environments Blur 修改成 0 。

AO Intensity 修改成 1。

Quality(Important Sampling Quality)修改成 Low(16 spp)。

Horizon Fading修改成 0, Environment Map修改成 Panorama后就完成了。

Shader Ball 显示成以上效果就是正常的。

导出贴图。

为了做Unity场景,导出 Texture。

因为要在Unity使用 Standard(Roughness setup),需要做个 Custom export texture template。

制作基本场景。

设置shader。

Unity 从 2018 开始提供了 Standard(Roughness setup)。

为了让大家理解内容,作者会使用 Standard(Roughness setup) 。

You have to use to configuation of export texture set from substance painter export menu like above images. I was some organized to export option like that.

If you have question plese freely touch me directly.

My contact point have page on top.

Categories: tutorials

Tagged as:

1 reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s