Categories
shader

BI-Planar Mapping

ArtStation – Bi-Planar mapping URP Deferred and Forward shader, JP Lee

Complete Example here

Bi-Planar Mapping GitLab | JP Lee on Patreon

Categories
devlog shader

Japanese manga style eye shader.

Categories
shader

Advanced Ambient occlusion method implementation for your look-dev

Advanced Ambient occlusion method implementation for your look-dev.

Advanced Ambient occlusion

Purpose:

AO handling of shaders When you guys usually using URP or basic mobile hardware is very simple. When using HDRP, more sophisticated specular shielding and environment reflection shielding are performed using the AO calculation formula using bent normal. A similar effect is to create a Micro Shadow with AO effect to be used on mobile hardware using the simple formula used in Uncharted2.

着色器的 AO 处理当你们通常使用 URP 或基本移动硬件时非常简单。 使用 HDRP 时,使用弯曲法线的 AO 计算公式执行更复杂的镜面反射屏蔽和环境反射屏蔽。 类似的效果是使用 Uncharted2 中使用的简单公式创建一个带有 AO 效果的微阴影,用于移动硬件。

Shader Property.

RS Lit.shader

[Header(__ SHADE PARAM __)]
[Gamma] _Metallic ("Metallic", Range(0, 1)) = 0
_Smoothness ("Smoothness", Range(0, 1)) = 0.5
_OcclusionStrength("Occlusion", Range(0,1)) = 0.75
_MicroShadowStrength("MicroShadow", Range(0,1)) = 0.8
[Space(10)]

Uniform value

RS Lit.shader

uniform half _MicroShadowStrength;

//RS_Lit.shader

//Fragment shader
half occlusion = RS_Occlusion(OcclusionMap , ndotl , _MicroShadowStrength );

Function

RsCommon.cginc

// THis code motivated from Uncharted3 Alexander Maximove Micro Shadow occlusion function.
half RS_Occlusion( half occlusionTex , half NdotL, half Strength )
{
	#if (SHADER_TARGET < 30)
	return occlusionTex;			    // SM20: instruction count limitation
	#else
	half occ = occlusionTex;
	occ = LerpOneTo (occ, _OcclusionStrength);
	float aperture = 2.0 * occ * occ;
	float microshadow = saturate(NdotL + aperture - 1.0);
	return lerp(1.0, microshadow, Strength);
	#endif
}

Need to know more?

Getting project.

Advanced Ambient occlusion method Example Project. | JP Lee on Patreon


https://www.patreon.com/posts/advanced-ambient-55940924

Categories
shader

Lut Bake for Substance Painter.

AUTHOR: JPLEE

leegoonz@163.com

Substance Painter Color Profile A to Z part 1. - 知乎

I think you will understand a little bit about Tome mapping and Post Process Stack code structure by watching the previous two lectures. 看了前面两节课,我想你会对时间映射和后处理堆栈代码结构有一点了解。

Overview.

After 2019, there were several requirements that I was received when communicating with the art team, and They wanted theirs rendering result after using post-processing in the game engine and the rendering result when working in the Substance painter to maintain the same tone as possible.

If you search the Internet, you can easily obtain UE4 ACES Tonemapping LUT, so there was no problem with basic settings.

However, there is a big problem with this, which is that only support Unreal-Engine only.

You can also get the Standard ACES Tonemapping LUT, but the problem with this is that Unity developers don’t really like using Unity’s internal ACES.

Also, it is likely related to the fact that it is not simply using tone mapping limited to HDR to LDR.

I came up with some ideas to solve these various situations, but I think the current method can be the easiest way to solve this.

2019年之后,我在和美术组沟通的时候收到了几个要求,他们希望他们在游戏引擎中使用后处理后的渲染结果和在Substance Painter中工作时的渲染结果尽可能保持相同的色调 .

网上搜一下,很容易就能得到UE4 ACES Tonemapping LUT,所以基本设置没有问题。

但是,这有一个很大的问题,那就是只支持虚幻引擎。

您还可以获得标准 ACES 色调映射 LUT,但问题在于 Unity 开发人员并不真正喜欢使用 Unity 的内部 ACES。

此外,这可能与这样一个事实有关,即它不仅仅是使用仅限于 HDR 到 LDR 的色调映射。

我想出了一些想法来解决这些各种情况,但我认为当前的方法可能是解决这个问题的最简单方法。

Wanna know more about this?
Jump to my link as notion page used below.

https://jplee.notion.site/Lut-Bake-for-Substance-Painter-389c5a02fd184023a2c0361dbc9b7ef0

Categories
shader

UE4 ACES Tone mapping port URP.


For more information, please see my notion page.

https://jplee.notion.site/UE4-ACES-Tone-mapping-port-URP-e0169b5c54dd47eba05534b13dfb6235

Categories
shader

Post Process Tone Mapping Editor Tweak.

Purpose:
This course will be given to the art department flexibility.
We will try to add parameters to Neutral Tone-mapping and use editor mode.
Depending on the nature of the project, try adding Fast Tone mapping, which focuses on faster operation, to the Post Process.
Let’s try porting Unreal Engine’s Aces tone mapping to Unity.
Exploring this course will give us a better understanding of Unity’s post-processing rendering architecture.

Adding parameters to Neutral Tone mapping.

The desired results are as below.

Eventually, as shown in the figure below, it is to change what is fixed as a constant inside the function to a parameter and to allow the artist to modify the value in this way to reach the desired result.

The above parameters are not exposed in the original Neutral Tonemapping.

Since the segment could not be modified, additional color adjustments or color curves are often added.

Unlike Unreal Engine, ACES does not expose any parameters.

Let’s add various tone mapping and expose related parameters to meet the learning purpose.

Neutral Tone mapping function.

This tone mapping method has minimal impact on color hue and saturation.
– But in my opinion that this is some impact on gamma.

Filmic Tonemapping Operators – Filmic Worlds

Neutral function is based on Uncharted 2 operator of JOHN HABLE.

Take a look Uncharted 2 operator function curve.

Desmos | 그래핑 계산기 Uncharted 2 operator function curve

Location.

At first, let’s find the tone mapping code function that needs to be modified.

Packages/com.unity.postprocessing@3.1.1/PostProcessing/Shaders/Colors.hlsl

float3 NeutralCurve(float3 x, float a, float b, float c, float d, float e, float f)
{
    return ((x * (a * x + c * b) + d * e) / (x * (a * x + b) + d * f)) - e / f;
}

float3 NeutralTonemap(float3 x)
{
    // Tonemap
    float a = 0.2;
    float b = 0.29;
    float c = 0.24;
    float d = 0.272;
    float e = 0.02;
    float f = 0.3;
    float whiteLevel = 5.3;
    float whiteClip = 1.0;
    
    float3 whiteScale = (1.0).xxx / NeutralCurve(whiteLevel, a, b, c, d, e, f);
    x = NeutralCurve(x * whiteScale, a, b, c, d, e, f);
    x *= whiteScale;

    // Post-curve white point adjustment
    x /= whiteClip.xxx;

    return x;
}

Neutral Tone mapping Original function code.

We will add parameters to the above code.

float3 NeutralTonemap(float3 x) Add parameters to the head of this function.

float3 NeutralTonemap(float3 x, float A, float B, float C, float D, float E,
      float F, float WL, float WC)

Want to know more?

Try to becomming my patreon members.

Post Process Tone Mapping Editor Tweak. | JP Lee on Patreon

Categories
shader

Stylized toon Urp update.

草稿日期。
2021년 7월 13일.

Preface

After leaving the company after a long time, I am going to research some rendering techniques and post them on Github. By writing this pages, I think I will be able to remind myself of my old memories.

So… I want to say that I didn’t want to do anything too difficult from the start. It seemed that I would get tired first if I dealt with difficult things from the beginning. 😢 Back to the main text… We try to explain each effect section as simply as possible.

As I have been paying attention to team management for several years, personally, my ability to explain in detail technical aspects seems to have decreased, so I will keep the attitude of reminding myself.

Most of the explanations are not for programmers, but for artists interested in shading.

Rather than relying entirely on rendering programmers or technical artists, if you understand the implementation aspects, artists will be able to organize their thoughts before communicating with them.

离开公司很久之后,我打算研究一些渲染技术并发布在Github上。 通过写这几页,我想我将能够提醒自己我的旧记忆。 所以……我想说,我从一开始就不想做任何太难的事情。 好像从一开始就处理困难的事情,我会先感到疲倦。 😢 回到正文… 我们尝试尽可能简单地解释每个效果部分。 由于我多年来一直关注团队管理,我个人对技术方面的详细解释能力似乎有所下降,所以我会保持提醒自己的态度。 大多数解释不是针对程序员,而是针对对着色感兴趣的艺术家。 与其完全依赖渲染程序员或技术美工,如果您了解实现方面,美工将能够在与他们交流之前组织他们的想法。

What we can learn from this content. 我们可以从这个内容中学到什么。

  • You can understand the simple Toon Shader processing method. 可以理解简单的Toon Shader处理方法。
  • You will get to know the roughness of the PBR lighting model. 您将了解 PBR 照明模型的粗糙度。
  • You can understand the use of NodtL. 可以理解NodtL的使用。
  • You can see what the vertex attribute is. 你可以看到顶点属性是什么。
  • You will also learn the spatial transformation process. 您还将学习空间转换过程。
  • You can understand a little bit of the very common HLSL shading syntax and structure. 您可以了解一些非常常见的 HLSL 着色语法和结构。
  • You can use Desmos. 您可以使用 Desmos。

Wanna know more detial?
Visiting to my notion Page~ Check it out~

Stylized Toon (WIP) (notion.so) ( Open Topic )

Stylized Toon by Unity URP. Project Source | JP Lee on Patreon ( PATERON MEMBER ONLY )

Categories
devlog shader

Toon style look-dev by ue4 [w.i.p]

This video need passcode If you watching.
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.