• JP Lee

White color temperature calibrations of game engines

UNITY3D

检测 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.


조회 58회댓글 0개

최근 게시물

전체 보기