Categories
Substance Book

CREATE A SIMPLE WOOD TILE TEXTURE.

学习目标

使用Shape(图形)构成分层形态的木头网格排列装图案。

利用 Blend node 的 Cropping Area。

合成两种不一样的材质。

本次学习分为以下两个章节。

Part1. Basic wooden tile pattern.

这里学习基本图案的构成。

Part2. Material compositing.

制作木头材质的表面,适用之前做好的叠层型图案就完成了。

Extra. 设置 Iray rendering 的 Tessellation 后渲染。

制作 Base Shape 。

生成 Shape Node 后根据上图修改选项。

Pattern : Square

Scale : 0.6

Angle : 45 Degrees

Shape 修改结果。

上图是对结果的要求值。

添加 Blend Node 并连接。

会使用 Blend Node 的 Cropping Area 。

剪掉 Shape 的左右。

为了获得上面的要求值修改 Cropping Area。

Cropping Area ( 左右的合是 1。 )

Left : 0.13

Right : 0.87

0.13 + 0.87 = 1

现在开始要做分层图案最基本的厚度。

各自添加 Bevel Node 和 Blur HQ Grayscale Node ,跟上图一样连接。 ( Height – > Grayscale)

Bevel Node 设置。

Blur HQ Grayscale Node 设置。

Intensity : 0.41
Quality : 1

各自添加一个 Blend Node , Transformation 2D , Gradient Linear1 node 。

Blend Node 设置

Gradient Linear1 设置。

Transformation 2D设置

主要是修改 Offset Y 轴 Gradient Linear 1 值做成 Shape 的分层深度值,把这个在 Blend  Node 里合成制作 Depth 。

Offset Y : -0.0341(使用任意值。)

现在制作重复图案。

添加 Tile Sampler 把最后生成的 Blend Node 连接到 Pattern Input 1 。

Tile Sampler 设置。

X Amount : 5
Y Amount : 8
Pattern : Pattern Input
Size X : 1.12
Size Y : 2.24
Scale : 1.26
Scale Random : 0.01

为了任意修改深度感,添加 Levels node 连接到 Tile Sampler 。

Level node 设置

变更成 Parameter mode 后修改值。

Level In Low : 0

Level In High : 1

Level In Mid : 0.5 ~ 0.55

Level Out Low : 0

Level Out High : 0.7

Clamp : On

请参考以上参数。

先在 PBR Shader 适用深度图。

把 Levels Node 连接到 Height Out-put node 。

把鼠标放到 Height node 上并右击执行 View in 3D view 指令。

连接到 Material 的 Height 后把 Tessellation Scale 变更成 10 。

如果不方便确认中间阶段的结果,在下方连接下载 SIMPLE OUTPUTS  utility使用就可以了。

다운로드 경로.

https://mega.nz/#!9fBV3ISQ

중국 내륙과 해외에서 모두 다운 로드 받기 용이 저장소 서비스 https://mega.nz/ 사용 했다.

下载链接。

https://mega.nz/#!9fBV3ISQ

使用了中国和海外都便于下载的储存库 https://mega.nz/

Custom Filter 에 등록을 했다면(Custom Filter 등록 방법은 다른 장에서 배우기로 하자.)

如果登记到了 Custom Filter (登记到 Custom Filter 的方法在其他章节学习下吧。)

可以看到以上图标。

点击后拖动储存到 Graph 窗口。

在3D View 适用预览。

O*uqS*PD 
巴 ed U28 
D*PD 
d*VD 
014 M 
OE pue 
Ma!Aozu!V1dV10Ma!A 
Pleoqd!lD 010 ~ - 'GOD 
M a 一 > a 」 d n d n O 
: - 5 Lu 巴 ed 250dX 亠 
saPON 」 ed 
“ uadO 
4U2LULUOD PPM 
'GOD 
巴 亠 P PV 
de 一 一 OD 
× 9 6 0

Levels 连接到 Output Preview 后,把鼠标放到 Output Preview 上面右击。

确认。

Output Preview Node 获取高度(深度) 信息后, 便于用 Normal map 和 Curvature smooth map , AO map 简单自动变换后,确认中间过程的 Height map 适用内容。

添加AO图。

叠层的边角部分会添加稍微的倒角效果。

为了实现那种操作,添加 Height to Normal World Unit Node 并连接。
 

Normal Map 会成为生成 Curvature map 的重要材料, Curvature Map 是制作最终 AO Map 的重要材料。

HEIGHT TO NORMAL WORLD UNIT NODE 设置。

Surface Size(cm) 根据平均值 300 或者想要的感觉设置成 200 左右。

Height Depth(cm) 根据叠层图层的高度设置。

因为作者把一层大概假设成是 3cm ,所以这个值设成了 3

Normal Format : OpenGL

Sampling : Sobel

NORMAL SOBEL 高度图用 sobel 算法让边缘明暗部的像素更明显,生成法线。

Sampling 类型的相关详细内容 Sobel 请参考 Basic algorithm ( 基本算法 ) 。

制作 AO MAP

通常 Height Map 直接变换成 AO MAP 。

这时通常使用的变换 NODE 是使用 Ambient Occlusion(HBAO)

因为已经做了 Height Map ,所以把 Height Map 直接连接到 Ambient Occlusion(HBAO) 。

下一步是重点。

在图案边缘稍微添加 Edge 效果。

添加 Curvature Smooth node 连接  Height to Normal World Unit Node 。

把 Curvature Smooth node 连接到 Ambient Occlusion(HBAO) 。

Curvature Smooth node 的 Normal Format 是 OpenGl。

Ambient Occlusion(HBAO) 的参数。
Use World Units : True
Surface Size : 300
Height Scale(cm) : 3
Radius : 0.02
Quality : 16 samples
Non Square : False
GPU Optimization : True

做AO Final Polishing 。

为了让边缘更自然,添加 Blur HQ Grayscale node 。

把 Ambient Occlusion(HBAO) 连接到 Blur HQ Grayscale node 。

把 Blur HQ Grayscale node 连接到 AO 最终输出的 ambientOcclusion output 。

确认中间结果。

适用 Height map 和 Normal Map 和 AO MAP 的中介阶段结果。

把 Normal Map 和连接到 AO Map 节点的部分整理为 Part1 。


Part 2.

学习目标

在 Part 1 制作的材质表面混合细节质感。

将制作混合材质。

使用 CREATE SIMPLE WOODEN FLOOR TEXTURE 过程制作的方法里的一部分,就可以很轻易把表面质感做出来。

Wood Base Material 设置。

适用 Albedo Color 和  Roughness 基本值。

制作基本材质。

制作木片基本材质。

我们将制作木头材质的表面。

添加 Directrional noise 2 。
Directrional noise 2
Scale : 1
Disorder : 0.24
Angle : Degrees – > 90

添加 BnW Spots 1 。

添加 Directional Warp 并连接。

BnW Spots 1
Scale : 2
Roughness : 0.53
Non Square Expansion : True.
Directional Warp
Intensity : 122.5
Warp Angle : 90 ~ 91

添加 Blend ,把原版 Directional Noise 2 连接到 Foreward 。

把 Directional Warp 连接到 Blend 的 Background 上。

这将成为之后改变表面造型的重要变量。

Blend
Opacity : 0.82
Blending Mode : Copy

添加表面颜色。

在程序化贴图制作里,添加表面颜色时最常用的是 Gradient Map 。

添加一个 Gradient Map 。

添加需要的颜色点,并设置颜色。

先添加靠近红色的颜色。

之后会用 HSL 调整细节色调。

添加两个 HSL 。

Gradient Map 各自连接到两个 HSL 。

上方 HSL

Hue : 0.53

Saturation 0.38

Lightness : 0.5

下方 HSL

Hue : 0.53

Saturation 0.43

Lightness : 0.45

添加 Blend 并连接两个 HSL 。

把连接到 Gradient Map 的 Blend output 连接到新做的 Blend 的 Mask Input 上。

这将用于混合两个不同 HSL 色调的权重。

把节点用 Frame 绑起来,并命名。

作者设置成了 Wood Surface Color Base 。

添加 Color Match 。

虽然是和 Replace Color 类似的节点,可以根据输入的平均颜色来变更色调。

Color Match
Source Color Mode : Average
Target Color Mode : Parameter
Target Color : RGB(130,88,64)

合并两个材质。

现在会最终混合两个材质。

Part 1 样式适用 Random grayscale 后把这个用成 Directional Warp intensity 值。

为了变化 Base Color 的色调,做个节点。

添加 Edge Detect 和 Flood Fill 。

添加 Flood Fill to Random Grayscale ,用 Blur HQ Grayscale 稍微添加 Blur 效果。

Edge Detect
Edge Width : 1
Flood Fill
Safety/Speed trade-off : Complex or big shapes
Blur HQ Grayscale
Intensity : 0.18
Quality : 1

添加 Directional Warp ,连接 Wood Surface Color Base Frame 的 Color Match 。

Directional Warp
Intensity : 196.66
Warp Angle : Degrees -> 65

Directional Warp 的 Intensity Input 连接 Blur HQ grayscale 。

生成为 Flood Fill 的值用于 Directinal Warp 的 Warp Angle 的权重(Weight)。

这是常用方法。

在各个区域适用不同的灰色调,可以在 Warp Angle 的角度以区域为单位给变化。

中间阶段预览。

添加表面质感细节。

Anisotropic noise
X Amount : 4
Y Amount : 128
Rotate : True
Smoothness : 1
Smoothness Interpolation : 0.5
Non Square Expansion : True
Directional Warp
Intensity : 3.78
Warp Angle : 58

吐过添加了 Blend ,连接 Anisotropic noise 和 Directional Warp 。

Blend
Opacity : 0.57
Blending Mode : Add(Linear Dodge)

添加 Detail Normal 。

添加 Height to Normal World Unit 节点并连接。

为了尽量维持路面的细节描写, Sampling type  直接用基本值 Standard 。

Height to Normal World Unit
Surface Size (cm) : 300
Height Depth(cm) : 0.15
Normal Format : DirectX
Sampling : Standard
Height to Normal World Unit
Surface Size(cm) : 300
Height Depth (cm) : 3
Normal Format : DirectX
Sampling : Sobel

两个 Normal 结果合并为一个。

Normal Combine
Technique : Channel Mixer (High Quality)

预览两个法线合并的结果。

确认 Base Color 和 Normal Map 阶段的材质。

在中间确认阶段应该也感觉到了,现在棱角部分的明暗不是很明显,所以要添加 Ambient Occlusion 和 Roughness 等所有 Material Propertices 。

Ambient Occlusion 要制作更明显的 Ambient Occlusion 和细腻的 Ambient Occlusion 这两种。

制作 Ambient Occlusion 和 Detail Ambient Occlusion  。

添加 Ambient Occlusion(HBAO) 连接 Part1 的 Level Output 。

Ambient Occlusion(HBAO)
Use World Units (cm): 50
Height Scale (cm): 5
Radius : 1
Quality : 8 Samples
GPU Optimization : True

因为变换的 AO 品质太锐利了,为了变得更柔和添加 Blur HQ Grayscale 并连接 Ambient Occlusion(HBAO) 。

Blur HQ Grayscale
Intensity : 0.2 ~ 0.3
Quality : 1

为了获取 Detail AmbientOcclusion ,添加 Curvature smooth 和 Ambient Occlusion (HBAO) ,连接和 Wood Surface Color Detail Frame 连接的 Normal Combine 。

Curvature smooth
Normal Format : OpenGL
Ambient Occlusion (HBAO)
Use World Units : True
Height Scale(cm) : 1
Radius : 0.02
Quality : 16 samples
GPU Optimization : True

用 Blend 混合两个 Ambient Occlusion 。

Blend
Opacity : 0.5
Blending Mode : Multiply

对比 Detail Ambient Occlusion 添加前后。

制作 Roughness 。

Wood Surface Color Base Frame 开始制作。

添加 HSL 节点,跟 Blend output 连接。

和 Wood Surface Color Detail Frame 连接的 Curvature Smooth 上再添加一个 Level 。

Level
Level In Low : 0.46
Level In High : 0.84
Level In Mid : 0.5
Level Out High : 1
Intermediary clamp : Clamp

添加 Blend ,把 HSL 全部连到 Foreground 和 Background 。

然后添加 Level ,修改的 Curvature Smooth 信息用于 Blend 里将要混合的 Maks 区域。

Blend
Opacity : 0.7
Blending Mode : Add (Linear Dodge)

输入的相同 HSL 信息混合成 Add (Linear Dodge) ,同时为了表现木纹的细节,把 Curvature Smooth 值变形输入为 Mask 就可以表现更丰富的表面粗糙效果。这种节点连接方法是很常用的。

简单的 Roughness 结果和添加几个连接得出的更写实的 Roughness 结果。

添加可以修改 Roughness 值的 Level 。

这时中间再连接 Grayscale conversion 变更为单一色彩。

Roughness 在 RGBA 中只要把 R 值储存为 Grayscale 就可以了。

Level
Level In Mid : 0.531

最后的节点整理。

最终 Output 连接。

因为基本材质属性里完全没有 Metallic , Output  的 metallic 。

在这里添加 Albedo Validate 后收尾就可以了。

baseColor Output 添加 PBR BaseColor/Metallic Validate 吧。

如果呈现上图的绿色,就表示在正常的 Albedo 色彩范围内正确的制作了 BaseColor 。

Validation Mode : Albedo
Albedo Dark Range Threshold : 30 sRGB

PBR BaseColor/Metallic Validate是什么,怎么正确使用会在另外一个章节学习。

合成材质后最终 Graph pre-view

IRAY RENDERING 基本设置。

为了表现 Tessellation 效果修改两大部分就可以了。

调高表面分割精度。

进到 3D VIEW 的 Scene ->  Edit 。

Subdivision Method 变更为 paramertic 。

这样通常会执行 UNIFORM DIVISION 。

这样所有表面就无关高度差距和长度角度,都会以一定的密度分割面。

作者调了个适当的值 5 或 6。

如果要表现更精致的表面曲率,调高就可以,但是会对电脑性能有影响。

Iray Material 设置。

进到 3D VIEW 的 Materials -> Default -> Edit 。

Height 的 Scale 修改成合适的值。

作者把叠层的图案厚度想成了 3 厘米或者 5厘米,所以设成了 5 左右。

最终渲染。

Scale 是3的时候。
Scale 是5的时候。

END

Categories
Substance Book

有效运用 Color mask 和开发 Automation material。

OVERVIEW

来了解下怎么用 SD 构成制作工程。

为了维持PBR的品质,我们美术要用 SD 的各种功能制作系统并深入理解 SD 的 Workflow。

学习目标

制作用 Color Mask 的颜色便捷又快速地把 PBR Material reference 值适用到质感上的开发工程。

通过 Automation material 开发可以更深入了解函数的显示方式和 SD 的instance功能。

SD 里制作的 Automation material 做成 SP 里用的滤镜并使用。

2015年来到中国后,在工作室发现有很多美术会用个别 Color ID。

这种不明确的 Color ID 定义规则在该美术离职或者开发 Auto Batching Tool 的时候,因为没有标准化(正规化) 所以会出现很多问题。

在想着用什么规则可以把 Color ID做成规范后,观察到了补色关系,这个变成 Gray 的时候我就想到可以做成 Gray level chart 。

现在根据这个想法我们可以做自动化滤镜。

Roughness 和 Metallic 简要  。

最终分为10个阶段吧。

制作细节的时候每个阶段间 Overlapped 的范围大概是

0.25 ,会以这个值做到最终贴图。(严格来讲是 Overlapped range ,所以可以想成在 0.125 的误差分为内决定最终值。

来区分并观察分为 10 个阶段的 Roughness 值的变化。

先观察下 Knald Technology 的 LYS 。

Lys 3d preview 里预览 Roughness(BRDFs based on n_dot_h) 的样子。

这里我们需要讲一下,为什么要把Roughness 和 Metallic的因子值分成10个阶段来使用。

如果是追求完整的 PBR Work-Flow 就需要从更专业的角度出发,为了做出相应测量系数需要很多高价的装备。

比如 2016后半年上线的 the order 1886 是比较快投入 PBR rendering 并使用的具有代表性的游戏。

表现衣服质感的时候已经制作了 Fabric scanner 并把 diffuse 值和 Specular 值从偏光镜分离储存了, Normal map 或深度图也是从现实材料中摄影后使用的。

2018年中开始到现在次时代主机游戏开发商也会用测量装备和材质扫描器把现实世界的数据加工用于游戏资源,这也是趋势。

但是跟主机游戏的开发环境不同,游戏开发商的环境里会根据美术个人见解的差距,各个材质间的 Roughness 和 Metallic 值肯定会存在偏差率。

如果开发团队内部没有定义材质的标准值,美术制作的时候 (虽然会有个人偏差) 会在调 Roughness 值上花费时间,并以自己的喜好操作。

理解 Roughness。

这本书后半部会详细说明 PBR ,现在就简单讲下,这是物体表面微弱的粗糙度产生的反射光的散射。

这个表面粗糙度可以储存为数值,可以用 parameter 形式从 0 到 1选一个值储存, 可以使用贴图以 UV 坐标空间为准 Luminence 0到 1 的值(0 到 255 之间的色彩值)储存。

INPUT VALUE : ROUGHNESS EVALUATIONS VIA CONSTANT VALUE.

Roughness Output 连上常数后观察下。

Node search 里搜索 value 很容易就能找到 Input Value node 。

适用 1 值。

适用 0.5 值。

适用 0.25 值。

适用 0 值。

几乎是完全反射。

比如跟上面一样把  Gradation Linear 值用成 Roughness 值吧。

表面的粗糙度越接近 0 值越光滑,越接近 1就越粗糙。

这是经常会弄混的部分, 0 没有粗糙度 , 1有粗糙度,这么记下来的话 Metallic Roughness Setup 形式的Shader就不会弄混了。
 

Unity引擎把粗糙度的部分用成了光滑度,是用成了 Smoothness 。这时 0 就是不光滑, 1就是光滑,所以 Roughness 相反概念的值。 也就是说, Smoothness 自然就是 Roughness 值的反转值。

Roughness 值分类为标准值。

现在内部定一个合适的值的范围吧。

这个过程中可能美术们会有不同意见,所以初期要充分沟通后定义标准。

如果不充分说明要这么区分的理由,并对这种系统美术没有产生共识的话,有可能会不理解这个系统,并制作后也有可能不使用。

做某种系统的时候要把得失说清楚,并让他们知道哪些会有利于我们的系统。

如果跟美术协商好了,就以讨论好的阶段为准。

作者当初是想定位7个阶段的,但是美术需要至少10个阶段,所以最后决定分成10个阶段。

看上图从左侧开始是  0 ,越往右侧越接近 1。

10 个阶段的 Roughness 会对应总共 10 个 Color ID 。

美术可以在内部指定 Color ID 的颜色,让我们把这个颜色可以置换成 Roughness 值使用。


 Gray 值用 Value 评测。

在 Node search 里搜索 Value Processor 并添加。

生成 RGB(1,0,0) 的 Uniform Color node 。

连接 Grayscale conversion node。

Grayscale conversion 值都变更成 0 。

把颜色变换成灰色的时候会变成任意值,所以要确认结果值是常数多少。

这时使用的就是 Value Processor ,要添加 Sample Gray 。

选择 Value Processor ,修改 Function 。 (点击 Edit 键修改。)

添加 Sample Gray 。

Sample Gray 可以取输入的值(像素) 的各个位置。

选择 Sample Gray 的状态下,右击鼠标做 Set as Output Node 。

如上图形式连接 Value Processor ,就可以用 Value 值评测输入的值。

这是根据以上方式分成10个阶段的结果。

Color ID 是任意选的。

制作滤镜的方式。

现在要评价两种处理方式。

一种是单一 Layer 上执行所有 Color ID 的变换,一种是以 Generator 形式组成在 Substance painter里让美术方便使用。

为了学习基础,来做下一张 Bitmap 的 Color ID 信息自动变换成 Roughness 的 Instance Filter。

AUTOMATIC GENERATION COLOR ID TO ROUGHNESS  INSTANCE FILTER

为了确认滤镜起不起效制作 Test color id map 。

在PS制作 Color ID 。 ( 文件名 : ColorID_EvaluationTable.tga)

单独储存原有工程。

单独储存的 Color ID 为了学习生成的 Graph 之后会用成 Instance Node 。

像上图一样整理节点后储存。

生成新的测试工程后,会再修改这个 Graph 。

生成新的测试工程。

命名为 ColorID_Generation_Eval_Graph ,生成新的工程。

工程储存为 ColorID_Generation_Eval_Graph.sbs 。

Template 选择为 metallic/Roughness 。

Color ID map 输入后经过变换过程最终成为 Gray map 。

Gray map 是记录 Roughness 数值的信息。

导入之前制作的 Color ID map 。

作者以 Link 的形式导入了 Bitmap。

确认颜色。

为了制作 Instance Node 变更了环境。

Graph 画面左右分割,各自进行了 Main Graph 和 Instance Graph 开发设置。

左侧: AutoGen_ColorID_Roughness Graph

右侧: ColorID_Generation_Eval_Graph

打开 ConversionRoughness.sbs 文件并修改。

已经做完值相关评测了,所以 Value Pixel Processor 都删掉。

Value Pixel Processor 整理好了就开始下一个阶段吧。

会把预先指定好的 Color ID 色卡和功能连接起来。

需要制作 Color ID 指定的颜色误差范围,在误差范围内让 Roughness 值也自动含有误差范围。

END.

Categories
tutorials

Document size independent texture size control.

Summary.

This example presents, creates, and practices how the artists can control the texture size of the desired texture pass category regardless of the root document size of the Substance painter.

概括。
此示例展示、创建和练习美术师如何控制所需纹理通道类别的纹理大小,而不管 Substance 画家的根文档大小。

NEED VPN IF YOU LIVE IN MAINLAND OF CHINA

Categories
tutorials

AUTO-GENERATION SURFACE CHARACTERISTIC FILTER

summary.

This example is about developing a filter that automatically generates the Roughness and Metallic values of a surface using a list of COLOR IDs.

概括。

此示例是关于开发一个过滤器,该过滤器使用 COLOR ID 列表自动生成表面的粗糙度和金属值。

NEED VPN IF YOU LIVE IN MAINLAND OF CHINA

Categories
tutorials

WORLD SPACE NORMAL USAGE INSIDE SUBSTANCE DESIGNER

Preface.

A demonstration for learning about the concept that can actively utilize the information of various information textures baked.

前言。
学习可以积极利用烘焙的各种信息纹理的信息的概念的演示。

Categories
tools

MaterialX with Substance Painter batch installer.

https://github.com/leegoonz/MaterialX_batchInstall

MaterialX Shader generation

Categories
shader

[WIP]pxrDisney for Substance Painter integration

Clear-Coat compare
Categories
Substance Book

PBR GUIDE PART 2

Written by JP.Lee
心动的 Technical Art team leader.
leegoonz@163.com
Written by Wes McDormott and contributed by JP.Lee from Allegorithmic at 2016 in years.

光和材质

制作PBR texture的实用教程

基于物理的渲染(PBR)比起一个已经定了的基准来说,更有很多的方法论。虽然有很多特定的原则和guide-line,但是没有完美的标准。所有有很多其它的执行方法。这些差异一般会在使用的贴图类型中发现。甚至虽然重命名贴图的名字方法也不一样,但是基本使用方法还是一样的。

本教程如figure 01所示,给大家展示最常用的两个工作流程,metal/roughness和specular/glossiness。以Substance Designer, Substance Painter, Bitmap2Material 3构成的Substance toolset,对于制作PBR贴图支持以上两种方法。为了Metal/roughness和specular/glossiness这两种工作流程,Substance PBR shader使用GGX BRDF,remapping roughness/glossiness的时候,不运用任何值。但是,如果需要任意的remapping的时候,可以通过Substance material简单执行。还有custom shader因为在Substancetoolset里面都是支持的,不管在怎么样的自定义pipeline下,都是可以运用Substance的。

虽然这两种工作流程有各自的优缺点,但是谁好谁坏也是区分不出来的。最重要的还是你要理解PBR背后的核心要素。Worflow其实就是帮组你准确制作PBR贴图的概念和指引。各自的工作流程虽然是用同样的资料,但是是用不同的方法来运用资料的。

在volume1的’The Comprehensive PBR Guide’里面,我们是从技术和理论的侧面来定义PBR的。在第二个volume里面,我们对于制作PBR贴图讨论实用的方法,立足于volume1里面确立的基础,提供guide-line。我们讲PBR会从美术的立场开始。然后我们以metal/roughness为原则和指导方针,来讨论。然后我们会解释和specular/glossinss有什么差别。还有对于制作PBR贴图的时候,理解这整个指导方针最好的方法就是读完这两个工作流程。

PBR是什么? 基于物理渲染的(PBR)是一种更细腻的表现光和表面作用反应的的shading&rendering技法。它又称为基于物理的rendering(PBR),或者基于物理的shading(PBS)根据pipeline讨论部分的不同,PBS就是一般shading的概念,PBR主要集中于rendering和Lighting。但两种方式都描绘得是标记基于物理的正确的观点的过程。

PBR的优点是什么? 关于PBR的优点,我们可以从以下美学部分(artistic)和效率两方面来考虑。 1. 因为制作方法和运算法则是基于物理准确的运算,所以不用考虑specularity之类的表面特性,可以简单的计算出更写实的asset 。 2. asset在所有照明环境里面都能精确地看到。 3. 给各位美术提供一贯的工作流程。(即使是不同的美术,也用同样的工作流程工作)

对美术有意义的 我们美术有必要把描绘表面特性的贴图想得不一样。有根据规则和guide line德尔新的贴图类型。 贴图是作为材质和光反应的的近似值的第二选项。电脑硬件和渲染的发展,使我们能够更加详细地模拟光的物理法则。 在PBR里面,shader在我们制作基于物理法则的贴图的同时,很重的物理 lifting是通过能量守恒和BRDF来控制的。因为任意推算材质值的事情,不通过PBR也是可以的,所以我们美术可以把精力集中在贴图制作。虽然,按照guide-line正确地制作贴图是很重要的,但并不是就意味着不考虑我们美术的直观性了。事实上,给角色赋予材质这件事本身就是一个艺术的侧面。不要一味地抓着物理不放。即使我们在基于物理学的基础环境里面工作,并不就代表我们无法用优秀的美术风格来进行了。举个例子,Disney基于物理的反射模型是立足于原则(principled)来设计的。意思就是比起严谨的物理模型来说,设计更符合与美术。虽然现在我们知道要活动原理和guide line,但是也不能成为它们的奴隶。

Metal/Roughness Workflow metal/roughness工作流程可以定义在PBR shader里面,向取样器供给通道的设置。Metal/roughness里面比较特别的贴图如figure02中所示,是base color, metallic,roughness。这几个在下面都会说。 PBRshader,或者如figure03所示,为了ambient occlusion, normal还有parallax mapping,运用possibleheight。这些贴图的类型在所有工作流程中(roughness/metal, specular/glossiness)都是共通的,在’Maps common to both workflows’里面会讲。 在Metal/roughness工作流程中,金属的反射值是在控制电介质的反射值和BRDF的平面角度里面的反射一样,在base color map里面控制的。金属贴图用在特殊的金属(被埋藏或者腐蚀的…?)的遮罩和base color贴图中的非导体数据。电介质F0值因为是shader直接控制的,不能手动操作。如果shader在metal map找到黑色部分的话,在base color贴图相应部分,自动会识别电介质(非金属),如figure04中所示,使用4%的反射率。

第一,4%的值几乎可以适用于所有的电介质材质。电介质F0,金属反射率,albedocolor的亮度范围等所有的这些值,都是根据实际测定的数据里面类推出来的。这点非常重要。我们讨论过在volume1里面,表面光反射的地方的光的强度,不可能比反射之前光的强度要强,这是能量守恒定律。Substance在用的时候,shader能专门控制能量守恒。在Metal/roughness里面也不可能违背能量守恒。

在metallic里面黑色的部分(==base color里面红色的部分),是在低反射率的状态下渲染的。

利用Height图和Ambient Occlusion,能表现高低和阴影。

电介质(Dielectric) F0

执行有些metal/roughness的时候,如同在Substance Toolset和 Unreal Engine 4里面能看到的一样,有specular control。这个选项就能让艺术家可以改变电介质F0的值。在Substance里面,这个output被叫作’specularLevel’,根据PBR的metal/roughness texture sampler来供给。如Figure 05中所示,具有0.0 – 0.08的范围。

如果你需要手动设置电介质F0的值的话,如figure 06所示,用Substance Designer的Substance graph的’specularLevel’ output。我们对于电介质的F0,我们再specular/glossiness里面会深入讲解。

Base Color (RGB – sRGB) Base color贴图如figure 07所示,是可以有两种类型的数据(电介质的反射色,金属里面的反射率值)的RGB贴图。表现电介质的颜色,表现反射的波长,在volume1里面控制。在Metallic map里面,相关部分如果用metal标记的话,反射率的值是存在的。

生成Guidelines) base color贴图从色调来看,可能看起来很平常。即比传统的diffuse贴图拥有更低的对比度。因为各位不想颜色太亮或者太暗。物体其实比我们想象中的颜色更亮。我们把这样的范围视觉化的过程就是把最暗的物质当做石炭,把最亮的部分当做眼睛。举个例子,石炭虽然非常暗,但不是0.0的black。我们选择的颜色值,得在亮的范围里面选择。我一般参考的是非导体的反射色。如Figure 08所示,dirt value可能在correct brightness值范围的最低。关于暗的值,我们不应该设置在30-59以下。暗的值,比30 sRGB宽大,比50 sRGB严格。关于亮的值的话,不应使用240 sRGB以上的值。

base color从电介质物质的立场来看,包含被反射的光的数据,因此,我们主张它缺少像ao一样的光的信息。如果用shader有的ambient occlusion通道不能充分的表现细节的时候,可以放入细微的occlusion,有这种特例。在贴图里面,表现金属的反射率的值,得用实际生活中测定的值。这些值有70-100%的specular,在sRGB里面,是180-255。在Substance PBR Utilities章节,我们为了共同的材质,会对预设F0值进行讨论。而且,Sébastien Lagarde提供的meta/roughness chart也是很不错的资料。

http://seblagarde.wordpress.com/2014/04/14/dontnodphysically- based-rendering-chart-for-unreal-engine-4/

1.颜色表现非金属材质的albedo和金属材质的反射率值。 2. Base color除了micro-occlusion等例外,不应该有光的信息。 3.暗的值不应该低于30 sRGB(允许范围) – 50 sRGB(strict range) 4.亮的值不应该比240 sRGB高。 5.纯粹金属的反射率,有70-100%的specular值,这和180-255 sRGB一样。

虽然大家会读到下面的Metallic章节,会包含base color,或者金属反射率值。万一要把污渍或者氧化添加到base color的话,不能把它当做纯粹的金属来看待,金属反射率范围得更低。添加污渍或者氧化(腐蚀之类),在metallic map里面另外说明。为了不再把这些部分当做金属看待,得降低metallic的值。

Metallic (Grayscale – Linear) Metallic贴图主要用于定义哪部分是纯粹的金属部分。Metallic贴图是灰色调的。这就是告诉shader怎样解释base color的数据的类似遮罩一样的功能。Metallic贴图的数据不包含现实世界的数据。这个仅告知base color的哪个部分是用reflected color(dielectric)来解释的,哪部分是现实金属反射率值的。Metallic贴图里面,0.0(black – 0 sRGB)是非基金属部分,1.0(white – 255 sRGB)是纯粹的金属部分。区别纯粹金属和非金属的话,Metallic贴图是二进法,(black,white =非金属,金属)。实际上,shader看到金属贴图,白色的时候,base color map的相关部分适用于figure 11里面出现的金属的反射率值。

被腐蚀或者非导体(Corroded or dielectric layer) 表面风化的时候,金属生锈或者其它环境,得用污物或者脏的图层来补充。被氧化的金属是非导体,举个例子,得看做是被腐蚀的金属。涂漆的时候,metal也是一样的。举个例子,paingting的时候,如果金属哪一部分被划,或者掉下来的话,那部分还是纯粹的金属材质(metallic map里面是白色)。还有,涂的部分看做是非导体图层(metallic map里面是黑色)。这个在figure 13里面能确认。

Metallic map是金属和非金属状态的混合,在贴图里面可以表现为gray value。如果metallic map比235 sRGB具有更低的值的话,各位有必要降低base color的纯粹金属部分的反射率值。举个例子,在figure 14里面,试想dirt layer模糊地遮住了部分纯粹金属的部分。Dirt是非导体,万一各位把metallic map完全让它是白色的话,base color的dirt的部分也是,和纯粹的金属有一样的反射率。可以通过降低有dirt的相关部分的Metallic map值来做出非导体和金属的适合的反射率值。 Dirt layer的透明度可以成为告诉大家base color的反射率值要降低多少的指标。这边难或者就是没有快速的规则。大家要做的事情就是把高反射率值降低为低反射率值。但是,这个变化的程度本身又是多种多样的。 Substance toolset通过支持多重通道,能轻松地调节weathering效果,工作和效果是怎样给通道传播的。Substance Designer和Substance Painter根据Substance effect,大家能直接调节调节通道的Substance effect介质变量。 举个例子,在Substance Designer里面,为了能让Material Color Blend node,dirt效果在多个通道能一同适用而使用。Material Color Blend节点里面,金属的dirt layer效果,如figure 15一样,可以通过调节metallic value slider来控制。

1.黑色(0.0)是非金属,白色(1.0)是金属。有针对氧化或者dirt的变化的gray scale值。 2.如果金属贴图比235 sRGB的值更低的话,base color的反射率值也要降低点

Roughness (Grayscale – Linear) Roughness贴图如figure 16所示,指的是引起光的散射的表面的不规则性。如volume1中一样,被反射的方向根据表面的粗糙程度的不同,也不一样。虽然光的方向改变了,但是光的强度是不变的。表面更粗糙的话,会具有更大更暗的highlight。细腻的表面的话,即使相同量的光被反射了,specular反射会更明显的维持。

在这个贴图里面,黑色(0.0)是细腻的表面,白色(1.0)是粗糙的表面。因为由Roughness贴图来决定表面的性质,所以是最具有创意的贴图。从本质来看,大家就可以说表面的状态相关的事了。这个环境是什么?这是仔细做的还是无意的?是否曝光在风雨中?表面的状态和环境,还有大家想制作的整体的asset和关于世界的设计为止都是有关系的。Roughness来说没有对错。艺术家具有完美的控制权。和Roughness一起开始制作的时候法线贴图是很好的。法线贴图常常要在roughness map里面出现,具有重要的表面信息。

Guidelines生成(Creation Guidelines) 1. 要有创意,要说的是关于表面的visual story.

分辨率和纹理密度(Resolution and Texel Density) 关于使用metal/roughness工作流程的副作用是,如figure 17所示,会生成白色的边。我们虽然对metallic workflow进行了讨论,这问题在specular/glossiness里面也出现了。 但是,这个因为特效是反的,所以几乎看不见。即,在figure 18所示,边缘比起白色来说,黑色更明显。这个现象如figure 19所示,因为贴图interpolation现象,在电介质里面,变成金属的部分会很明确得生成。

在Metal/roughness里面,金属部分的base color比非金属的diffuse color拥有更亮的颜色,所以有了白色的轮廓。在Specular/glossiness里面因为纯粹的金属没有diffuse颜色的,所以和非金属interpolation的过程中,生成了黑色的轮廓。贴图的分辨率和纹理密度和边缘的人工构造(变白或者变黑的现象)有着直接的关系。如果大家用刷子在刚分离的边缘制作金属和非金属的interpolation区域的话,低分辨率会把边缘处理得很细腻,结果的话,边缘的问题会更严重。这个低分辨率问题可能是根据UV发生的。UV没有适合纹理密度得分辨率的话,会有这种现象发生。为UV提供好的纹理密度的就如figure20所示,是能使边缘变得最小的方法。Figure 20里面两种贴图分辨率都是2048.但是,右侧照片展示的是具有低纹理密度的惨不忍睹的UV展开。

Guidelines生成(Creation Guidelines) 1. 纹理密度和分辨率对在metal/roughness里面出现的白色边缘起影响。为了使这种现象降得最低,需要确定UV是否具有合适的密度和正确的分辨率。

Specular 所有电介质的F0典型的都在metal/roughness里面设定为0.04(linear) 4%反射率。如之前说提到的,有一些工具给大家提供这样的再设置的specular channel。在Substance里面把它叫作specularLevel channel.电介质F0在贴图生成的Guideline的立场来看的话,更复杂,在普通的metal/roughness里面,因为是以0.04值来的,所以我在我们进行specular/glossiness前,暂且把Guideline放下了。

Metal/Roughness 优缺点(Pros and Cons of the Metal/Roughness Worflow) 优点 1.制作简单,对于输入不正确的电介质的F0而导致的错误很小。 2. metallic和 roughness贴图都是 grayscale贴图,所以贴图的内存运用很小。(不是rgb,而是仅用一个通道的贴图)

缺点 1.对于贴图生成,不能调节关于电介质的F0。但是,几乎所有工具都有能调节基本的4%值的specular control。 2. Edge artifacts(材质interpolation的部分发生的边缘白色现象)在低分辨率很明显。

Specular/Glossiness Workflow

像metal/roughness一样,specular/glossiness是通过给PBR shader以sampler提供贴图(textures)的设置来定义的。Specular/glossiness里面特殊的贴图就是如figure 21所示,diffuse, specular , glossiness。虽然specular/glossiness用像diffuse和 specular一样更加熟悉的名字,但是区分这些题图的传统用法是很重要的。Substance虽然也用diffuse这个用语,在有些工具里面也用albedo这个词, PBR shader而且又运用ambient occlusion。在两个工作流程里面都用的贴图我们会在下一章节看的。

在这个工作流程理面,把金属和非金属材质的F0反射率值保持到specular贴图。在Specular/glossiness里面大家具有两个RGB贴图。一个是diffuse color(albedo),另一个是反射率值(specular)。在Specular map里面,大家能控制贴图本身内的电介质F0值。

在Metal/roughness里面看的一样,Substance的PBR SHADER使用能量守恒。这给specularmap提供电介质的F0的控制,意思就是对结果不正确的值会变得脆弱,在specular/glossiness里面变得更加重要。举个例子,白色(1.0)diffuse和白色(1.0)specular值,从比开始reflect/refract值开始的时候接受的光的量,要更大,能破坏能量守恒。这就是制作贴图的时候,大家对于贴图数据,看不到基础的实际结果的意思。

大家应该也看到了,贴图出现的数据和metal/roughness一样。因为我们遵循的是一样的guide-line。不同就在怎么制作贴图。虽然数据是保存到其它的贴图的,但是是遵循一样的原理原则的。就之前所说,电介质的F0,金属折射率,albedo color的亮度范围之类的所有值都是从实际测定的数据中由来的。我们看到的各自的贴图类型,都是基于实际测定的guide-line。在这里就不反复讲metal/roughness里面出现过的信息了。但是要集中在差别和哪里有差别。

Diffuse (RGB – sRGB) 像metal/roughness一样,diffuse map是包含albedo color的。但是,不包含反射率值。

生成Guidelines(Creation Guidelines) Diffuse贴图仅仅只是albedo color。仅仅指纯粹金属部分是黑色(0.0)。因为金属如同figure 22所示,没有颜色。被氧化的部分的金属不再当做纯粹的金属,可以有颜色。什么物质或者纯粹的金属上面能添加电介质的图层,制作其它效果。 关于Diffuse贴图的Guidelines和base color贴图一样。但是差别是如果是纯粹的金属的话,0.0(黑色)的值是允许的,不受对于暗的程度的范围的Guidelines的控制。

1.颜色意思就是非金属材质的albedo,黑色(0.0)是纯粹的金属。 2. Base Color除去和micro-occlusion一样的特例外,不包含光的信息。 3.暗的值不能比30 sRGB – 50 sRGB低。纯粹的金属除外。 4.亮的值,不比240 sRGB高。

Specular (RGB- sRGB)

Specular贴图如figure23所示,定义金属的反射率值。制作这个RGB贴图的时候,允许电介质材质有不同的值。这和给电介质固定4%反射率和通过specularLevel channel才能修正的metal/roughness的不同点。在Metal/roughness里面操作的一样,F0值一定是从实际测定的值中由来的。电介质的F0可以是grayscale值,金属反射率可以是有些金属,根据吸收不同波长的不同,产生颜色。

生成Guidelines(Creation Guidelines)

Specular贴图因为包含了金属和非金属的F0值,所以我们把金属种类区分开来来看。

Raw Metal

F0值得以实际的数据为基础。就像我们在metallic贴图中处理的一样,如果有指的是纯粹的金属的反射率的氧化或者非金属的图层的话,得降低。Specular/glossiness的情况,污物和氧化如figure 24所示,把有diffuse贴图的纯粹的金属的diffuse color提高,降低specular map的反射率值。Figure 24是纯粹的金属中有异物图层的例子。Specular贴图的异物,包含电介质的合适的F0值。这种情况的话,我不是0.04就是用4%的值。

电介质(Dielectric) 电介质材质的F0值也是在specular map里面调整。大家能完美得调节整体的F0值。但是,用正确的数据比较重要。在volume1里面处理的一样,非金属(非导体,电介质)等是不通电的。被折射的光被散射或者吸收(偶尔再次回到表面),因此它们比金属反射更少量的光。一般的电介质,根据index of refraction(IOR)计算,在F0里面,拥有2-5%值。除去宝石之外,和figure 25一样,一般的电介质F0,具有0.02-0.05(linear)值。

如果大家对于特定的材质的IOR值没有找到的话,用4%的值(0.04 – plastic)也好。除去宝石原石之外,它们如图figure 21所示(原本错误,figure21和相关内容没有关系),具有0.05 – 0.17(linear)值。Shader在0.0 – 0.08的范围内mapping,出现空气的时候,一定是0.

1. Specular图包含电介质的F0和纯粹的金属的反射率值。 2.电介质比金属反射的量要少。电介质的共同的值是2 – 5%,从sRGB的立场来看,是属于0.02 – 0.05范围的sRGB 40 – 75之间。 3.一般的宝石原石是0.04 – 0.17(linear)范围。 4.共同的液体是0.02 – 0.04(linear)范围。 5. 纯粹的金属的反射率值是70 – 100% specular,在sRGB里面是180 – 255 sRGB。 6.如果没有找到特定材质的IOR值的话,就用4%的值把(0.04 – plastic)

Glossiness (Grayscale – Linear) Glossiness贴图在figure 26里面看到的一样,描写的是造成光的扩散的表面的不规则。在这个贴图里面,黑色(0.0)意味着粗糙表面,白色(1.0)意味着细腻的表面。和Metal/roughness的roughness贴图相反。具有我们在roughness章节处理的一样拥有艺术性的guide-line。

Guidelines生成(Creation Guidelines) yproduct of using the metal/roughness workflow is 1.要有创意,要说的是关于表面的visual story.

分辨率和纹理密度(Resolution and Texel Density)

我们处理怎样edge artifacts(边缘变黑或者变白)在两个工作流程中能出现。我们在metal/roughness一节对这问题已经详细的处理过了。这在specular/glossiness里面也提过。纯粹的金属没有diffuse色,所以diffuse贴图包含黑色。还有黑色和非金属的diffuse色interpolation的时候,如figure 27所示,能看见这个黑色的边缘。

我再次说明下文件分辨率和纹理密度对这些edge artifacts很强烈,起直接的影响。举个例子,即使你用锋利的刷子表现棱角的接缝,低分辨率会把边缘处理的细腻,所以把edge artifact处理得更严重一点。这个低分辨率问题,相比于分辨率来说不大,在不能提供核实的texel密度的UVs里面也有发生。在UVs里面能提供好的texel密度的话,是如figure 28所示,解决这个问题很好的方法。

生成Guidelines(Creation Guidelines) yproduct of using the metal/roughness workflow is 1. texel密度和分辨率对在specular/glossiness里面出来的黑色的边起影响。UVs按照分辨率提供核 率提供核实的密度。

Specular/Glossiness 优缺点 (Pros and Cons of the Specular/Glossiness Worflow) 优点 1. 不容易看到。 2. 图中导电体F0的值可以调节。 缺点 Specular 贴图中导电体F0值因为提供调节,所以写出的错误的值更脆弱。这是 shader 中无法准确处理的情况下,可以打破能量守恒定律。 1. 根据RGB贴图的追加,使用更多的纹理内存。 2. 虽然使用与传统的workflow相似的用语,要求其他的数据,会更加混乱。并且,这需要更加准确的物理基础导向。例如,准确的电导体F0值,纯金属的diffuse color是黑色,在shader中无法处理的情况下,遵守能量守恒定律。

Maps common to both workflows

Ambient Occlusion ambient occlusion(AO)贴图是周围照明环境接近表面多少的定义。这仅仅对 diffuse contribution影响的同时,specular contribution 无法遮挡。与Unreal 4相同的引擎为了模拟部分的 reflection,拥有着screen space reflection配置。最好的组合是 与AO的 screen space reflection一起使用。 Substance PBR shader里的 ambient lighting(依据环境贴图生成的)是依据AO相乘的。 AO贴图是 PBR shader的 依据etxture sampler提供的。这是如29中显示的选择性通道。

AO无法进入texture贴图。本身的频道由shader供应。 制作Ambient Occlusion (Creating Ambient Occlusion) Substance Designer中的AO是通过mash(网)?或者通过综合baking toolset的 nomal贴图开始变换。并且,像图30中一样,用height由AO替换 ambient occlusion的节点也存在。 Bitmap2Material是从源图像开始生成AO才可使用的。(figure 31)

高度Height Height贴图经常是为了表现displacement的时候使用,在PBR里面,也用于添加分明的高度,法线贴图和bump mapping赋予更写实的parallax(视差)mapping上也使用。(figure 32) Substance Designer使用relief mapping parallax运算。(也叫作Steep parallax mapping,把raytrace以heightfield射出,求出各自的交叉点,把最近的交叉点,以visible的heightfield来识别的法则)

Height根据PBE shader的texture sampler来供给,而且还有option channel。在SubstanceDesigner里面,效果如Figure 32所示,通过shader的relief parameter来调节。

Creating Height

和AO类似的,在Substance Designer里面,把integrated baking toolset通过网格,来导出高度。如figure 33中所示,还有在法线贴图里面导出height的normal to height节点。Bitmap2Material如figure 34所示,从素材照片开始,生成height。甚至你可以用Substance Designer的vector/bitmap painting tools来生成height data。但是,最好的放法是如figure 35所示,用Substance Painter在3d mesh上面直接仔细的画。

法线(Normal) 法线贴图用在模拟表面的细致的部分,在PBR里面也是用同样的词。 制作法线(Creating Normal)

法线贴图在Substance Designer里面,运用integrated baking toolset,从网格能得到。再加上如figure 36所示,有把height用法线制作的normal节点。Bitmap2Material如figure 37所示,能从素材照片生成法线。大家运用Substance Designer的vector/bitmap painting tools,能生成height data,通过normal节点,能把它们转化为法线。在Substance painter里面,涂上的height data也是,能导出法线贴图,大家能直接涂法线。

Substance PBR Utilities

本章节中,我们制作PBR纹理,看下帮助设置反射率值的几种Substanceutilities。Utilities分为材质,correction and values。这些节点们,是立足于本教程中的原理和概念而做的。

Materials Bitmap2Material 3 B2M 3是给metal/roughness 或者 specular/glossiness,制作要使用的PBR贴图的独立的软件(Indie/Pro),或者Substance material的一部分(Pro的情况)。它给制作可以反复的贴图,albedo(使用它的light cancelation functions),法线,height贴图等,制作这些贴图也十分优秀。如Figure 38所示,对于制作材质的基本纹理是很好的Utilities。

PBR Base Material 这个节点是制作full base material时用的工具。Filters>PBR Utilities下面的SubstanceDesigner Library里面能看到。(figure 39) 对于metal/roughness 和 specular/glossiness都支持。对于纯粹的金属,提供共同的预设,对于非金属材质,可以设置电介质albedo。根据不同的工作流程,可以控制拥有grunge amount option的roughness和 glossiness。如果不这样的话,导入Substance Painter里面制作的base maps的可以选择添加自定义贴图Input。选择此方法的话,各位可以快速的生成和其它材质混合的material node。

PBR Substance Materials Substnace Designer和 Substance Painter,和PBR calibrated materials一起提供。他们是以Substanceformat,compile的,手画和用照片生成的材质的程序纹理组合。作为Substance materials,他们拥有控制纹理的其它侧面的各种媒介变量的优点。他们最开始没有制作贴图的过程,提供和PBR contents工作的快速效率的方法。

在Substance Designer里面,Substances能在PBR Materials下面的Library里面发现。在http://Gametextures.com里面还有手工画的PBR材质的套装。大家的http://Gametextures.com PBR Substances可以通过你的Allegorithmic账号来下载。

在Substance Painter里面,Substances可以在Shelf的 Material tab里面找到。那里还有http://Gametextures.com的材质套。http://Gametextures.com材质可以通过Allegorithmic账户下载,也可以保存到Material tab。

除了Substance Designer和 Substance Painter,Substance Database还拥有大量的计算好的PBR材质。

Reflectance Values 电介质 F0(Dielectric F0)

如figure 40所示,这个节点导出一般的电介质的F0值,大家可以选择预设值。它还有接收IOR和F0值的IOR input field。这是为了电介质材质设计的,可以跟specular/glossiness和metal/roughness的specularLevel channel一起用。

金属反射率(Metal Reflectance)

这个节点是对于一般的纯粹的金属导出反射率值用的,Filters>PBR的 Substance Designer Library里面能找到。如figure 41所示,可以选择多种金属预设值。

修改(Correction) PBR Metal/Roughness 检查(PBR Metal/Roughness Validate)

这个节点是为了在metal/roughness里面使用而设计的。它是检验base color和 metal贴图的值是否正确有利的工具。Filters>PBR下面的Substance Designer Library里面能够找到。节点的话,按照heat贴图赤色->黄色->绿色的顺序放出,红色是不准确的值,草绿 /黄色是正确的值。在金属里面,把metallic贴图里面指定为金属的部分(比235 sRGB大的值)代入到basecolor里面,检查。Heat贴图标记的是F0可能是范围有点小了。在albedo里面,检查电介质的亮度值是否正确。

PBR Safe Color 本节点如figure 43所示,能修正base color或者diffuse贴图的值。能确认电介质的亮度值是否正确。在PBR Utilities下面的Substance Designer’s Libraryl里面能找到。

转换(Conversion) BaseColor_metallic_roughness_to_diffuse_specular_glossiness 这个节点是把metal/roughness的贴图转换成specular/glossiness贴图的转换软件。 (figure 44)这个在PBR Utilities下面的Substance Designer’s Library里面能够找到。

附录 – chart(Appendix – Charts) 表面是金属吗?(Is the surface metal?) 可以帮助表面使之金属或非金属类别化。进行贴图开始时,首先我做出的表面,首先自问自己是否是金属。通过这个提问你可以对“我们在这个音量的处理、图45,46中处理贴图的标准”做出引导。 图45是metal/roughness工作流程,图46是specular/glossiness的流程。 反射率值(Reflectance Values) 图47展示了导体的F0范围。导体是反射比金属少的光。一般道题的反射值为2-5%,sRGB的观点中的值是 0.02-0.05(linear),sRGB40-75.图48中,导体F0和金属反射率值均可见。金属的specular范围70 –100%,sRGB的值是180 – 255。

准确与不准确的比较(Correct/Incorrect Comparisons) 图49中可以看到metal/roughness流程准确生成的贴图和不准确生成的贴图的使用事例。 此物质附着的涂漆的图层 albedo值非常低,此物质metallic贴图中表现为纯金属。并且,金属反射值为70 –100% specular范围设定的非常低无法反射。 图50的specluar/glossiness流程中准确生成的贴图和不准确生成的贴图使用事例。所有纯金属的diffuse贴图有着非常亮的值。这里需要形成黑色的。导体涂漆和次物质的图层的diffuse贴图的值非常暗。此物质图层的specular贴图中很亮有F0。与此物质F0的导体值不一致。(figure 50的下侧incorrect 图可能不对,不是base color应该是diffuse)

Allegorithmic develops the new generation of 3D texturing software: Substance Painter, Substance Designer and Bitmap2Material. With most AAA game studios using these tools, Substance has become the standard for creating next-generation PBR (Physically Based Rendering) assets. For more information on Substance, please visit our website at http://www.allegorithmic.com The comprehensive PBR Guide by Allegorithmic – vol. 2 written by Wes McDermott with JP.Lee at 2016 in years from Allegorithmic.

Categories
Substance Book

PBR GUIDE PART 1.

Written by JP.Lee
心动的 Technical Art team leader.
leegoonz@163.com
Written by Wes McDormott and contributed by JP.Lee from Allegorithmic at 2016 in years.

光和材质

关于基于物理渲染&着色处理(Shading)的理论

光本身就是很复杂的现象,因为它是由波长和粒子的现象一起呈现出来的。

从结果来看,很多模型都是为了解释光的行动而做出来的。作为 Texture artist,

我们对于解释光和材质间的相互作用的Light Ray Model 很感兴趣。对我们来说,

理解光线和表面材质是怎样反应的尤为重要。因为我们的工作就是做描写表面的

纹理。我们要理解我们创造的假想世界里面,纹理和材质是怎样反应的,光是怎

么行动的,纹理看起来是怎么样的。在本教程中,我们将会解释基于物理渲染的

模型,物理学背后理论。我们将从定义光线和 PBR 里面一些重要的要素开始。

光线(Light Rays)

光线模型主张的是光线在和空气同种透明的媒质里面拥有直线轨道。光线模

型也主张光线和不透明的物体发生冲突,或者像从空气到水这样,转移到不同的

媒质时,能预测动向。跟着光线的出发点开始,到转换为热相同的其它形态的能

量为止,使这个过程能用肉眼能够看到。和表面相碰的光线叫作incident Ray,

incident Ray的角度,被称作Incidence of Angle(入射角),在figure 01里

面有。

光线碰到表面的时候,会发生两种现象。

1. 光从表面被反射,改变传播方向又返回原物质。此时,入射角等于反射

角,遵循反射法则。(光被反射)

2. 光从一个媒质,以直线通过另一个媒质。(光被折射)

从这个观点我们可以说光线分为反射和折射两种。在表面光线是被反射或者

被折射。根据不同的媒质也有被吸收的可能。但是吸收不会发生在表面。

The comprehensive PBR Guide by Allegorithmic – vol. 1 written by Wes McDermott | 翻译 vich

吸收和扩散(透明和半透明)

经过不同的介质或者经过半透明介质时,光被吸收或者扩散。

1. 吸收的情况,随着光转换成其它形态的能量(几乎是热),光的强

度也会减少。还有随着颜色,或者波长的不同,吸收的量不同。但是光线的方

向是不发生变化的。

2. 扩散的情况,光线的方向随着材质的偏差的量的不同,任意改变。扩散

的话,虽然任意改变光线的方向,但是不改变强度。耳朵就是很好的例子。耳

朵因为很薄(吸收很少),耳朵背部的光被扩散出来。如果没有扩散,吸收很

少的话,光线就和玻璃类材质一样,能笔直通过。举个例子,你在非常干净的

游泳池里面,那么睁开眼睛就能看得很清楚。但是如果水很脏的话,脏的粒子

会让光发生扩散,这样水就变得不透明了。光在这样的材质,或者介质里面,

运动得越厉害,扩散或者吸收就越厉害。所以物体的厚度对于光的扩散或者吸

收起着很重要的作用。Thickness 贴图,如 figure 02 里面看到的,在 Shader

里面用来表现物体的厚度。

漫反射和正反射(Diffuse and Specular Reflection)

Specular Reflection 是我们上面所说的光线主题中提到的在表面发生的反

射。光线在表面被发射,往其它方向出去。这个完全遵循在平面上,入射角和反

射角相同的反射法则。但是,几乎所有的材质都是不规则的,反射的方向取决于

表现的粗糙程度。光的方向虽然发生了改变,但是强度不变。表面越粗糙,生成

的 highlight 就越大越暗。表现越光滑,在一定角度看的时候,看起来更亮,或

者更强。即,specular 是比较集中的。

两者光的总量如 figure03 所示被反射。Diffuse reflection,光被折射。

光线从一个介质去另一个介质时,在物体里面发生多次扩散。如 figure04 中所

示,从光第一次通过介质,然后又往原介质方向发生折射。

Diffuse 材质具有较强的吸收力。这给被折射的光线在 Diffuse 材质里面,

长时间逗留能被完全吸收提供了很好的条件。意思就是光从这些材质往外出来的

话,可能从入口开始,不需要太多的移动。这就是为什么入口和出口点可以无视

了。用于表现传统的 Diffuse 反射的 lambert model,计算的时候是不考虑表面

的粗糙程度的。但是也有像 Oren-Nayar 一样,考虑表面粗糙程度的 Diffuse 反

射 model。

同时拥有高分散和低吸收的材质,有时说的可能是’participating media’

或者 ‘translucent material’。这些材质有烟、牛奶、皮肤、玉、大理石等。

渲染后面三个材质(皮肤、玉、大理石)时,可以通过不忽视光线入射点和出射

点的subsurface scattering(SSS)的modeling来进行。如果想正确得渲染具有各

种扩散和很低的扩散和吸收的媒介(烟、雾等)的话,就需要如Monte Carlo

simulation一样更贵的方法了。

微面元理论(Microfacet Theory)

在该理论中,diffuse和specular reflection在所有光线交叉表面是不规则

和独立的。通过练习,我们知道diffuse reflection的粗糙程度的效果因为材质

内部发生的扩散而看起来要更少。结果就是,光线的出射点,和入射方向还有表

面的粗糙程度是相对独立的。我们经常使用的Rambert model就很好的说明了这

一点。

其实这种现象叫法很多,有 roughness, smothness, glossiness,或者

micro-surface。但这些描绘的都是表面的同一个侧面(sub-texel geometric

detail)。这些表面的不规则,用大家在使用的 roughness 或者 glossiness 贴图

就能做出来。基于物理的 BRDF,表面被称作 microfacet 的小的 planner 是基于

微面元理论(Microfacet Theory 用多种多样的角度来表现表面的细节部分。这样

的小的平面,如 figure 05 中看到的所示,用物体的法线来反射光。

表面法线光的方向和看的方向的中间方向的微面元,使 visible light 发生

反射。Microsurface 法线和 half 法线不会对同等的所有微面元用作用。如 Figure

05 所示,几个是根据 shadowing(light direction) 来 遮 盖 , 几 个 是 被

masking(view direction)。微细水准的表面不规则性会导致 diffusion。举个例

子,模糊的反射是因为光线的漫反射。因为光线不能平线地被反射,所以看起来

如 figure 06 所示,就会有模糊的 specular reflection。

颜色(Color)

表现的颜色(我们看到的颜色)是因为各自的波长从光开始被散发出来所以

呈现出颜色的。有些光线被吸收,有些光线被反射。剩下的那些被反射的波长就

是我们看到的颜色。举个例子,苹果的表面几乎只有红色被反射。只有红色的波

长在苹果表面被漫反射,其它的如 figure 07 所示,被吸收。

它同时具有和光一样颜色的亮的 specular high light.因为苹果皮不是导体。

(意思是电不流通的物质)Specular reflection 几乎是从波长中独立出来的。

正因如此,这种物质的 specular reflection,是绝对没有颜色的。我们队材质

的其它种类以后再看。

BRDF

双向反射分布函数(BRDF)是描写表面的反射率特性的。电脑画面中有很多其

它的BRDF模型,有些从物理上是非近似的。BRDF如果要做到在物理上可以的话,

它的energy保存和展示要是相互的(exhibit reciprocity)。关于相互,我就要

说到主张光线的入射点和出射点不对BRDF的结果起影响,还可以相反的

helmholtz 互易原理(Helmholts Reciprocity principle).

在 Substance 的 PBR Shader 里面使用的 BRDF,是立足于 Disney 的 GGX 微

面元分布最基础的规则的反射模型。GGX 对于 specular 漫反射提供了一个最准确

的解决方法。如 Figure 08 所示,跟写实,更短的 highlight 和在更长的 fall off

中的 tail。(得看图才能理解)

能量守恒(Energy Conservation)

能量守恒在 PBR rendering solution 里面发挥着重要的作用。它主张表面

反射的光的总量比吸收的光的总量要少。换句话说,在表面被反射的光,绝对不

会比在和表面碰撞之前的光来得强烈。作为 artist,对于控制能量守恒不用担心。

能量守恒根据 Shader 会自动守恒的,这是 PBR 的一个很好的方面。这是基于物

理的模型的一部分,对我们来说,比起物理来说,可以更集中于美术创作。

菲涅尔现象(Fresnel Effect)

菲涅尔反射对于作为基于物理的Shader的BRDF的系数来说,有非常重要的作

用。根据法国物理学家ugustin-Jean Fresnel所观测的菲涅尔效果是表面被反射

的光的量,受你看它的角度的影响。举个例子,想象一下水坑。如果是笔直的往

下看的话,可以看到池底。

这样看的时候,你看的法线和表面的法线是一样的。现在,平行地看水的表

面,你能感觉到水表面的specular反射增强了,完全看不到水的底面。在PBR里

面处理菲涅尔,不能像之前传统shading方式一样处理了。换句话说,这是PBR

shader里面自动管理的物理要素。如果以90度的入射角来看的话,表面几乎是百

分之百反射的。

虽然在粗糙的表面反射率会变得更specular,但是我们并不是100%能控制反

射率的。问题不是因为macrosurface和光的角度,而是因为各自的微面元的法线

角度和光的角度。因为光线向其它方向漫反射,反射变得细腻或者模糊了。你在

macroscopic level上能得到,和在所有微面元上得到的菲涅尔效果的平均值一

样。

F0 (Fresnel Reflectance at 0 Degrees)

光和表面以0的角度碰撞的时候,光存在以specular反射的概率。如果用

Index of Refraction(IOR)的话,可以传导被反射回来的光的量,这个如figure

09所示,叫作F0。表面被折射的光的亮叫作1-F0。

最常见的电介质的F0范围是0.02 – 0.05,导体的范围是0.5 – 1.0。表面

的反射率,如同在figure 10里面见到的,是根据Sebastien Lagarde的“Feeding

a Physicially-based Shading Model”里面展示的方程式来的。这个F0是我们

在制作贴图的时候要考虑的反射率值。非金属(电介质/非导体)具有灰色色调

值,金属(导体)具有彩色值。PBR和反射率美术上的解释就是我们在一般的细

腻的非导体表面上,F0是反射2%到5%程度的光,如果接近水平的话,100%的光被

反射。非导体的反射率值,其实变化得没有那么急剧。非金属的反射率范围也不

是变化得很激烈。宝石的原石具有很高的值,是例外。关于联系导体和非导体的

F0,我们一会儿再看。

导体和非导体(Metals and Non-Metals)

我为PBR做材质的时候,会事先想是金属还是非金属。我会先问自己是金属

还是非金属。如果正确的话,会按照一条guideline 来,如果不是的话,按照

其它来。这和准金属类似,哪些东西不属于这个范畴,以此为前提的话,就更接

近了。制作材质的时候,从整体上看,区分哪些是金属哪些是非金属,已经很接

近了,准金属是例外。设置关于材质的guideline的时候,我们首先要理解的是,

我们要理解我们要做的是什么东西。如PBR,我们对于金属和非金属的特性,可

以通过guideline理解。

折射的光被吸收。金属的色泽是被反射的光。所以对于我们的贴图来说,对

于METAL,我们不添加diffuse颜色。

金属(Metals)

金属是导热和导电的导体。简单的说,导体金属的electric field电场是0,

电和磁场表面接触的时候,生成的入射光的波长,部分被反射,所有折射的光都

被吸收。被磨得很光的金属的反射率,如figure 12所示,高达70-100%左右。

有些金属从其它波长里面吸收光。举个例子,金因为在visible spectrum(可

见光谱)的高频率端吸收的蓝光,所以结果看起来很黄。但是,因为折射光是被

吸收的,金属的颜色是从反射光中来的,我们不给金属添加diffuse color值。

举个例子,在specular/gloss流程上,完全得金属的话,diffuse给它黑色

的,折射率值,是specular map的颜色值。金属里面,折射率值可以成为RGB,

也可以成为颜色。因为我们的模型是基于物理的,所以我们对于我们的贴图有必

要使用金属的现实中计算的折射率值。

在给金属做texturing的时候,还有一点很重要,就是金属是要被腐蚀的。

所以这个腐蚀(风化)要素在金属的反射状态下占据了重要的作用。如果举例金

属被腐蚀了,就要变化金属的折射率,如figure 13所示,被腐蚀的部分要使用

非导体材质。

而且,被着上色的金属和非导体一样,不当做金属处理。Paint的作用就是

在金属表面添加了图层的作用。仅仅是没有染色的纯金属当做金属来处理。沾在

金属材质上面的灰尘或者遮住金属的一些东西也是同样(不当金属看待)

我个人主张要时常问自己,材质是金属还是非金属。但是,如果再详细点的

话,就是是否染色,是否被腐蚀,是否沾有灰尘等,包含金属的状态如何。材质

不是纯金属,或者根据腐蚀来看,在金属和非金属之间还夹杂着什么东西的时候,

当做非导体来看待。

非金属(Non-Metals)

非金属(非导体)几乎不导电。被折射的光线被扩散或者吸收。正是因此,

他们比金属更能反射小的光线,具有反射率的颜色(albedocolor)。我们之前把

非导体的平均值当做从F0开始2-5%程度。这些值如figure 14所示,包含了0.017

– 0.067的linear range。除了宝石,几乎所有非导体的值不超过4%。

如果金属一样,我们得使用在现实中测定的值。但是,要找出不透明的物体

的IOR值是很困难的。但是,很常见的非导体材质的值,不是经常变化的。因此,

关于折射率,我们运用volume2里面使用的少数的guide-line。

Linear Space Rendering

Linear space rendering的话,比起本文中介绍的来说,还可以控制很多的

量。所以我们就讲得不这么深入了。但重要的是,是以linear space来计算的。

简单的说,linear space rendering对于光计算,给提供准确的数学。这给

为光在现实中拥有相同的运动提供了环境。在Linear space里面,伽马是1.0。

但是,为了能让我们眼里能正确的看到,得修正linear gamma。

Gamma-encodedspace(sRGB)修改标记在电脑上的照片。照片的值为了标记,需要

修改。

运行计算机运算色值和颜色相关功能的时候,所有计算都用linear space执

行。看这个简单的方法是,万一照片看起来是基本颜色或者diffues的话,那么

要把这些贴图设置成为sRGB。照片设置成为sRGB的时候,Substance为了计算照

片,会转换成linear,为了再次标记,会变化成sRGB。但是,如果你为了在texture

上面表现表面粗糙或者金属属性的话,如果想保存数学值的话,这些贴图一定要

设置成linear。(意思是非颜色的,拥有0~1值的grey-scale的贴图)

Substance的话,不仅能处理linear/sRGB space之间的变化,还能自动处理

rendering-viewport计算结果的伽马修正。作为美术,就没有必要担心在

linear-space计算和substace pipelinel里面发生的变化。通过Substance合并

插件,如果使用Substance材质的话,为了linear space,会自动处理变换。

但是,把Substance贴图导出后当bitmap来用,所以不再是Substance

material的时候,理解这个过程很重要。各位可能得会根据你用的渲染器来进行

手动变换。base color/difuse maps这些是sRGB,剩下的linear这些得知道。

重要要素(Key Factors)、

我们刚刚看了物理学的基本理论,现在可以导出PBR的核心要素了。

1. 能量守恒,被反射的光线绝对不能比第一次撞击表面的时候要亮。

能量守恒是在Shader里面处理的。

2. Fresnel。BRDF是根据shader处理的。F0反射率值几乎在所有非导体

上面,只能看到小的变化,范围在2%-5%。金属的F0值是70-100%

3. Specular值通过BRDF来调整。会受到Roughness or glossiness贴图,

还有反射率值的影响。

4. 光的计算是在linear space里面计算的。所有贴图具有伽马值,base

color或者diffuse这些,一般都在shader里面变换。但是,大家把照片导入到

引擎或者渲染器里面的时候,选项要勾选正确,要确认结果是否正确。描写表

面的roughness, glossiness, metallic还有height这些必须是linear。

References

1. Physically-Based Shading at Disney Brent Burley, Walt Disney Animation Studios. https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf 2. Microfacet Models for Refraction through Rough Surfaces http://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.pdf 3. Feeding a Physically-Based Shading Model by Sebastien Lagarde http://seblagarde.wordpress.com/2011/08/17/feeding-a-physical-based-lighting-mode/

4. An Introduction to BRDF Models by Dani雔 Jimenez Kwast

http://hmi.ewi.utwente.nl/verslagen/capita-selecta/CS-Jimenez-Kwast-Daniel.pdf

Categories
Substance Book

Concept of Lighting Node:Substance Designer

Baked lighting.

First approached since by 2016 in years at Netease.

This basic idea is to use the light source extraction system by my implement.自2016年以来首次接近网易。 这个基本思想是通过我的工具使用光源提取系统。

天谕角色texturing流程中使用的3dsmax baked lighting有两个缺点:

一、运算速度很慢。有时候等想要的品质等上几个小时。

二、最终品质和如同不能及时反应一样不太好。

Substance painter Baked lighting

在韩国Substance研究小组(负责人JP)中提出的Baked Lighting技法被Allegorithmic Adobe 本公司采纳,搭载于最新版本。

使用这个技法能提高现在流程的产量,同时提高品质。产品能提高5倍以上,品质也是通过快速的反馈和内部算法(模仿GI lighting),能达到类似于离线渲染的品质。

左侧是处于全区域照明非激活状态,仅仅是用Baked lighting滤镜往Base Color加入照明值的结果。虽然,原则上是往Base Color不能加任何的照明值,但是游戏里面处理的PBR精度比较低的的时候,立体感的表现有时候比较Flat。

为了加强这部分,除AO外,使用Top Down照明,整体立体感通过灰色调来生成,混合到Base Color的一种技法。

很多公司虽然都在用PBR,但是也在用此方法。

Global lighting是用bake from Sky light来设定的状态。这样生成Gray Pass,合成到最终贴图。

Basic Idea is here.