(如何使用物质设计器将一块Bitmap纹理源作为PBR纹理。)

Overview

学习不使用Procedural(程序化) Texture ,而是用 Photo texture 等快速并简单生成 PBR Texture 的方法。
大约从 2001年 ~ 2003年开始,很多开发商开始在游戏里应用 Normal texture(也叫 Normal Map ) 。
国内正式开始引进的游戏里具有代表性的是 Huxley(国内最初引进虚幻3 ) 。
之后天堂2 卡麦尔和 其他更多的游戏公司也开始引入 Normal texture 技法,正式开始制作角色和场景。
严格来说 T&L(Texture and Lighting) 技法从 DirectX8.0 换成 9.0 后硬件光效不是工作站,而是 Home PC 普遍化后 Normal texture 成了必要因素。

这本书的后面会详细说明 Normal texture 怎么计算 Shading ,怎么计算 Mesh 信息。

当时的角色整体大块儿是用 3Dmax 或 Maya 等工具制作,细节用 Crazy Bump 等工具再合成 Detail normal texture 来使用。

但当时大部分美术和程序员都不知道该怎么用 Normal texture ,都是缺乏经验的状态。
场景开发的时间跟以前手绘的方法比多了2倍的制作时间,这就成了增加开发费用的很大一个原因。

这种 Normal texture 工程增加了整个开发费用,为了解决这种问题,图形软件公司开始转向改善生产管线并提高效率的工作。

具有代表性的是 Knald technology 和 Allegorithmic 改善的算法和功能对此有很大的贡献。
2011年以后,以北美主机游戏开发商为头,PBR 正式成为了游戏产业的主要 Shading 技法。

下一个要学习的例题是,尽量删除照片贴图里的影子和部分高光后,利用Sd的node 使它可以成为 Tiling texture 。
而且还要确认 pbr texture 里用于 albedo 贴图的 safety color 。

PBR safety color 会更详细说明这本书前半部分的 PBR rendering。

用NODE编辑PHOTO TEXTURE

学习目标
1. 改善照片影子区域。
2. 改善照片里的部分 highlight 。
3. 处理反复 Tiling 。
4. 理解 PBR albedo safety。

可以在 https://pxhere.com 下载免费的照片贴图。
如果想要更高品质的照片贴图,可以在 https://www.textures.com 下载贴图资源或者亲自用照相机准备照片贴图。

会根据照片贴图资源制作 PBR Texture set 。
需要在 Textures.com 里购买使用权或者使用免费贴图。

这里就不细说 PBR 了。
这本书的前半部分会充分说明 PBR。


制作新的 Substance Graph (Ctrl + N) ,选择 Physically Based (Metallic/Roughness) 后把 Graph 名称变更为 'PhototexturePBR '点击OK键。
但有点特别,Physically Based (Metallic/Roughness) 里没有 Ambient Occlusion Output。
新建 Graph 后会直接添加 Ambient Occlusion Output。

制作用户 Template 并储存的部分在这本书的’ Essential’ 里的 ‘Preferences’ 部分,请参考。

在正式学习前,对 node tree 进行 reviewing 会对不熟悉 SD 的读者有帮助的。

跟着做之前先看下整个结构,是使用一个照片贴图 input。
最核心的部分是,,,
1. 在照片贴图里尽量删除影子的暗部,做出 Albedo 贴图。
2. 生成合适的高度图
3. 生成不会太过的 Ambient Occlusion map
4. 生成合适的 normal map
可以简单整理成以上四点。

需要的 Node列表

经常用到的通用 Node 就不另做说明了。


改成适合 PBR 工程的 Albedo colour。


PBR BaseColor / Metallic Validate
把改成适合 PBR 工程的 Albedo colour 结果做 Debugging。
超出修改误差时会显示为红色。

Make It Tile Photo.
没有处理成 Tiling 的原版照片贴图处理成合适的 Tiling 。


Lighting Cancel Low Frequency.
用于从照片贴图里删除部分影子和高光。

Height Map Frequencies mapper.
跟高度图一起生成类似于 High pass 的 Relief map

Relief map 是什么? 总体来看属于视差贴图(Parallax mapping )的范围。 但是从几何(Geometry)
结构不会变为出发点的话 Parallax mapping 和 Relife mapping 是在相同的范围里。 Relife
mapping 对 Parallax mapping 有一种缺点,就是镜头在特定斜角拍摄时越往斜面的尾部 (离镜头远的方向)
越没有立体感, 而且自身的阻断现象也会崩溃。而且 Parallax mapping 不会进行几何变形不能表现自身的影子。 Relife
mapping 有个优点, 就是 Self-occlusion 和 Self -Shadow 可以从 Raytrace
实现,但是演算量过多,游戏开发中几乎不能使用。 2016年以后开始积极研究 Displacement 的盲点 Subdivision
算法后 (Desney 主导在做) 最新硬件是使用 Distance based displacement mapping 的趋势,实际上
Relife mapping 也不会经常使用。


Normal Sobel.
在高度图用 sobel 算法让边缘明暗部的像素更明显,生成法线。

Sobel algorithm 是什么?

Height Normal Blender
从导进的高度图生成 normal map 后混合导入的 normal map 。

现在用有代表性的上图滤镜构成整个节点吧。

您已经完成了新的 Graph 。
已经说过,没有 Ambient Occlusion output 。
自己做下。
把鼠标放到 Graph canvas 上点击 Space 键,搜索 Output 后添加。

或者跟上图一样在菜单图标上点击 Out 添加新的 Output 。


新做的 Output 要根据 Shader 结构修改。
把 Identifier 修改成 ‘ambientOcclusion’ ,把 Label 修改成 ‘AmbientOcclusion’。
Group 修改成 ‘Material’ 。
用 Add Item 旁边的 + 按钮添加 Usage 。
只选择 R 通道,把数值修改成 ‘ambientOcclusion’。
这是重点,请熟知。

确认整体 Output list 。
由 ase Color , Normal , Metallic , Roughness , Height , AmbientOcclusion 构成。

第一个节点。


把照片贴图添加到 Canvas ,再添加 Frame 命名为 Input 后,第一步为了处理反复 Tiling 贴图添加 Make It Tile Photo 节点。

Make It Tile Photo

参数。
Mask Warping H : -41.91
Mask Warping V : -18
Mask Size H : 0.01
Mask Size V : 0.01
Mask Precision H : 0.06
Mask Precision V : 0.09
以上参数只适合修改例题里的照片贴图。

各个参数说明。
Mask Warping H :
Mask Warping V :
Mask Size H :
Mask Size V :
Mask Precision H :
Mask Precision V :

适用节点前后比较

Make It Tile Photo 适用前


Make It Tile Photo 适用后。
如果数值太高图片边界会变得模糊,或者事物会变得模糊,所以要微调。

请不要只在2D环境确认,一定要在3D环境确认找一个合适的参数。

第二个节点。

Lighting Cancel Low Frequency.
是吧原来的照片贴图做 HighPass 处理的滤镜。

可以用这个参数,利用下一个要添加的 Blending 把照片阴影区域的一部分和高光部分去除掉。

参数。
Cancellation Radius : 1.8

High-pass 状态。

虽然不是完整的 Grayscale 但不妨碍制作。
如果要换成 Grayscale ,使用 Grayscale conversion filter 就可以了。

添加 Blend 节点。
把照片贴图连接到 Blend 的 background。
Lighting Cancel Low Frequency 出来的部分再连到 Blend 的 Foreground。


Blending Mode : Max(Lighten)
Blend 的参数。
Opacity : 0.85 ~ 1.0 以内的值。
Blending Mode : Max(Lighten)


适用前。


适用后。

去除了部分 Highlight 和阴影。

PBR 的 Albedo 跟以往的 Diffuse 方式不一样,是稍微有 Flat 感觉的 Colour 的贴图。
细节要从 normal map 和 height map 还有 roughness 上表现。

去除阴影时 Albedo 里暗的 Colour 也可能被一起删除,要加节点尽量保持它,例题的后面会讲。
现在根据修改的照片贴图制作 Normal map , Height map 和 AO map 。

Colour Repair workflow(色彩恢复工程)

为了从照片获取 Albedo ,删除 Shadow 或 Highlight 信息时贴图内的部分颜色也会不受控制被修改.
可以做一个修复Albedo Colour 的区间。
重点
1. Colour 的修复。
2. 确认 PBR Albedo 的 Safety colour 。

Colour 的修复。


添加一个 Blend Node 。添加一个 Comment 后把 Text 换成 Repair of Color 。
把 Make It Tile Photo filter output 连到 Blend Node 的 Backgroung Input ,然后把 High-light and Shadow Cancel Frame 里的 Blend Node
的 Output 连接到刚添加的 Blend Node 的 Foreground Input 。

1. 添加 Gradient Map filter 。
2. 添加 Histogram Range filter 。
3. 添加 Level filter 。

跟着添加顺序都连接后,把 High-light and Shadow Cancel Frame 的 Blend Output 连接到 Gradient Map 。(会自动 Grayscale conversion 。)
Level filter 的 Output 连接到 Blend Node(Repair of Color) 。

各个 Filter 的细节参数。
Gradient Map

Gradient Map 是强大的 Color Remap 工具。
以 Gray gradient table 为准,用户以 Replace 的方式把 Color 执行 Color Remapping 。
在 Gradient 添加 Point 让阴影更明显区分。

Histogram Range

Histogram Range 会修改导入图片的 Histogram 信息。


参数。
Range : 1
Position : 0.75

Histogram 信息对比。

原图导入信息的 Histogram 。


修改的 Histogram。

Image Histogram 是什么? 在从 0 到 255 的
256个像素范围内横轴表现像素的值,竖轴表现像素的数量,用曲线图表现分布在图片的像素里亮部和暗部是怎么分布的。

Level

越靠近黑色的部分会成为修复成原色的 Blending 区域。
Level histogram 做了 Invert。 基本值是下方白色调节条右边黑色调节条是左边。
翻转图片的颜色时左右换一下就可以了。


添加 Frame 命名变更为 Color Blending 。

确认PBR Albedo Safety colour 。

现在检查修改的 Albedo 跟 PBR 合不合适,连到最终 Base Color Output 。
首先来了解下两种滤镜。

  1. PBR BaseColor / Metallic Validate

    PBR BaseColor / Metallic Validate 的 Debugging 案例。
    Albedo 从数据上来看,包含全黑色和全白色是不好的。所以一定要跟上图一样做颜色的 Debugging 。


用 Gradient Map 矫正的案例。

2. PBR Albedo Safe Color

把 Gradient Map 矫正成 PBR Albedo Safe Color 的案例。


参数。
PBR Workflow : Base Color - Metallic ( Base Color - Specular 选项做 Menu Dropdown 就可以变更。)
Tolerance : 误差率,保持 0.5 的基本值。


分别添加以上两个 PBR Workflow 的 filter,把 Color Repair Workflow Frame 的 Blend Node 的 Output 连接到 PBR Albedo Safe Color Input ,
PBR BaseColor / Metallic Validate 的 Input 连接 PBR Albedo Safe Color 的 Output 。
做一个 Frame ,命名变更为 PBR Workflow Validate 。


最后 Albedo Safe Color 的 Output 再连一次 Base Color Output 的 Input 就可以了。

色彩恢复前。

色彩恢复后。

制作 Height map 。

Height map 通常是记录高度的 texture 。
这个高度差距(等高)在 Shader 技术里会使用 Real-time Displacement 技法,这时会实时使用把 Mesh 的三角形做 Sub-division 的技术 Real-time Tessellation 。

为了表现 Displace mapping ,把做了 Tessellation 的 Mesh 做 Wire frame.

为了适用 Height map 先变更 Shader 后再变更 Material 环境。
变更 Shader 。

在 3DView 上端的菜单里换成 ‘Default/Definition/physically_metallic_roughness[Default]/Tesselation’。


选择 Materials/Edit 表现细节参数 Inspector 。


参数
Tessellation Factor : 40 ~ 70
Scale : 2
DirectX Normal : False
Tiling : 1
UV Scale Enabled : False
以上参数调好后,就可以看到在 Mesh 上有正常的等高变形。

添加 Height Map Frequencies mapper ,把 Blending 的 Output 连到 Height Map Frequencies mapper 的 Input 。


Relief 值变更为 1.56 左右。
Height Map Frequencies mapper 提供两个 Output ,是 Displacement map 和 Relief 。

生成的 Displacement pass

生成的 Relief pass。

作者加了一点 Detail 。


Displacement map 表现的是大的体块儿感(高度的表现),如果添加更细节的 Bump 效果, 用 Blending node 稍微加点一起生成的 Relief map 也可以的。
添加一个 Blend node , Displacement output 连接到 Background input , Relief output 连到 Foreground input 。


Blend node 参数。
Opacity : 0.27
Blending Mode : Multiply

合成的结果。


Height Output 前面再加一个 Blend node 和 Uniform Color 。
把刚刚设的 Blend node 的 Output 连到之后做的 Blend node 的 Foreground input 。
Uniform color output (Color 值是 White 。) 也连到之后做的 Blend node 的 Background input 。


Blend node 的参数不用特意去调,就用基本值。
选择 Blend node 添加 Comment 后连到了叫 Height Scale 的 Node commenting 。
这会完成 Shader 的 Displacement scale 功能。

Blend node 的 Opacity 值是 0.45 的时候。

Blend node 的 Opacity 值是1的时候。

太精致的高度反而会让 Height map 的结果很突兀。实际游戏引擎里使用的 Distance based real-time displacement 里的 Tessellation 密度不足以表现 detail displacement ,所以 Tessellated 的 Segments 的单位面积上不足以表现 Pixel Density (像素密度)的时候 Height 不能完整得表现出来。我们会通过算法理解 Pixel density 在游戏引擎里每个单位面积(为了表现出一个面分布的三个点形成的三角形平均面积比例)可以有多少 Pixel 的Density 。我们不能把软件渲染上的密集的 Displace mesh 应用到实时渲染游戏引擎里。
比如软件渲染表现皮肤的毛孔时都要用 Displacement mapping 。

制作 Normal Map。

为了把一些光用 Height map 表现不出来的精细的体积质感表现出来,我们会用 Normal map 。
1. 添加 Normal Sobel 滤镜。
2. 添加 Height Normal Blender 滤镜。

Normalize 是什么? 就是 Vector 的方向不变,把 Vector 的长度(尺寸)用1正规化。 用 1正规化的 Vector
就叫单位 Vector 。要做正规化的理由是在3D游戏里求内积或者展开一些公式的时候不是单位 Vector
的话计算结果是错误的,为了防止这些错误会用单位 Vector 做正规化后再计算。这本书后面讲 SD / SP 专用 GLSL SHADER
制作的时候会通过更详细的代码再仔细理解下。。


连到添加了 Height map frequencies mapper 的 Relief output 的 Normal Sobel input 。


Normal Sobel 参数。
Intensity : 0.87
Normal Format : OpenGL ( 以后我们在 Unity3D 里会做 Preview 。)


添加 Height Normal Blender 后把 Normal Sobel output 连接到 Height Normal Blender 的 Normal Input ,把 Height map frequencies mapper 的 Displacement output 连接到 Height Normal Blender 的 Height input 。


Height Normal Blender 的参数。
Normal Intensity : 9.97
Normal Format : OpenGL


制作 Frame 后名称变更为 Normal Adjust 。
Height Normal Blender 的 Output 连到最终 Normal Output 。

Normal map 适用前。

Normal map 适用后。

制作 Metallic 和 Roughness map 。

适用 Normal Map 后可以看到受到光源后的质感维持着部分 Specular 等效果。
现在开始做下 PBR 的重点之一 - 质感。
我们简单看下质感是从哪开始形成的。
后面会再详细说明,简单来说就是根据表面的粗糙度和分子的结构来表现最终质感。
在更深入了解 PBR 的话,根据某些分子的结构 BRDF 都是不一样的, IOR 的差别也很大。
但是实时渲染上很难完全掌握和表现。
以 BRDF 光为准,表示入射量和放射量的比例,是 PBR 的基础。
1970年前已经定义过相关理论,最近几年内没有出实时渲染相关内容。
PBR 里事物的表面属性大致定为以上两种。
最重要的两点是,是否是金属和表面的粗糙度。 金属性体现在传导性上,传导性是构成事物的分子结构形态和成分的混合形态来决定的。

严格来讲,现有所有用实时处理解决的 PBR 都是错误的,只是模仿它的样子使它看起来像而已,这样理解PBR会更容易。


新生成一个 Blur filter 后把 Removing Shadow Frame 的 Lighting Cancel Low Frequencies 的 Output 连接到它的 Blur filter Input 上。


Blur filter 参数。
Intensity : 0.45


添加新的 Level filter 。
让石头表面和石头缝隙的土的 Roughness 值更明显一点。
把 Blur filter Output 连接到 Level filter Input 上。


参数。

添加 Blend filter 和 Uniform Color filter 。
把 Level Output 连接到 Blend filter 的 Foreground Input 上, Uniform Color 连接到 Blend filter Background Input 上。

Uniform Color 参数。
Gray color value : 190
这个参数在例题的 Roughness 上就是表面最平滑的值。


Blend filter 参数。
用默认值。
可以用 Opacity 值用 Uniform Color 和 Linear 做 Blending 。


Metallic 会用 Roughness 值。
再加一个 Blend filter。
再加一个 Uniform Color。


Uniform Color 参数。
在 Uniform Color : Gray 状态下设成接近黑色的 15 ~ 20 。


Blend filter 参数。
Blending Mode : Divide
剩下的都是默认值。


把制作的两个 Blend filter 最终连到 Roughness 和 metallic 。

制作 AO map 。

Ambient Occlusion map 简称 AO map 。
是一种表现写实影子的手法,会在全局光照的过程中计算一个点的遮罩量。
这本书上就简单用 AO 来表现。


新增 Ambient Occlusion(HBAO) 节点。
制作 Height map 时使用的 Height map frequencies mapper 的 Displacement output


参数。
Use World Units : False
Height Depth : 0.03
Radius : 0.55 (数值越接近1,表面的遮挡区域是最大距离,这样上面就会很暗。)
Quality : 16 samples
Non Square : True
GPU Optimization : False ( 只在 CPU 演算。 )

选择 Ambient Occlusion(HBAO) Node 添加 Label 后变更为 ‘Generating HBAO’ 。


添加 Blur HQ Grayscale Filter ,把 Ambient Occlusion(HBAO) Node 的 Output 连接到 Blur HQ Grayscale Filter 的 Input 。
添加一个 Sharpen filter ,把 Blur HQ Grayscale Filter output 连接到 Sharpen filter input 。
添加一个 Frame ,名字变更为 AO 。
Sharpen filter output 最后连接到 AO Output 。
因为用 Ambient Occlusion(HBAO) 生成的 AO 锯齿现象较严重,这样就能使它变柔和。
适用一次 Blur 后再用 Sharpen 让他更明显就可以了。

I Notice very important stuff of artifact Which is Should be use to 16 bit data not to 8 bit Otherwise after generation result seems very artifact.

看下它们的参数。
Blur HQ Grayscale Filter


参数。
Intensity : 1.0 ~ 1.12
Quality : 1


参数。
Intensity : 20 ( 直接输入数值可以设到20。 )

来看下用 Blur 和 Sharpen 改善后的前后效果。


改善前。

改善后。

AO 适用后

整个 Node Preview.


所有的 Map 都没问题。
就这样,用一张照片贴图制作了 PBR Tiled Texture Set 。

演示最终效果。
Substance designer 2017.2 Preview (OpenGL)

结果演示 1. (Tiling = 1)


结果演示2. (Tiling =2)

Substance designer 2017.2 Preview (Iray Renderer)

About JP

链接: Website.
在这里插入图片描述

出生在韩国的TA。
1997年开始从事电脑图形视觉化工作后,在这个行业已经有21年经验了。
在多个网络游戏公司引领过美术团队,之前在allegorithmic担任TA负责人,在中国网易盘古工作室担任TA总监,现在是巨人网络TA部门的总负责人。
懒惰的人才有创意”是他坚信并执行的哲学道理。

Bitmap 贴图加工成 PBR 贴图相关推荐

  1. Bitmap 贴图加工成 PBR 贴图 Part2 - SETTING UP TO PIXAR RENDERMANTM RENDERING FOR MAYA.

    设置[PIXAR RENDERMAN]渲染Maya. 学习目标 RenderMan 的历史. 安装 RenderMan. RenderMan 基本设置. 在SD导出 Texture . RenderM ...

  2. 大数据可视化技术——平行坐标图、成对关系图、高级折线图

    一.平行坐标图 平行坐标图是对于具有多个属性问题的一种可视化方法,下图为平行坐标图的基本样式,数据集的一行数据在平行坐标图中用一条折线表示,纵向是属性值,横向是属性类别(用索引表示). pandas. ...

  3. Knald - 1.2.1 烘培贴图,利用贴图转换成其他贴图   笔记

    1 转换贴图 注意:导入贴图的路径必须是英文或者数字,不能有中文不然会导不进去 2 烘培  点击Load Baker  在Baker面板里,1High poly 导入高模(可以导入很多高模),2Low ...

  4. 如何将三维图转化成二维图

    下面以某一构件为例,讲解三维图转换二维图的步骤 1.先打开要转换的三维图,再点击新建,选择工程图,确定.选择图纸格式的时候你可以随便选,或者是取消 2.在左侧就出现了那个三维图形的名称,你可以双击这个 ...

  5. 将多张连续的静态图转成gif动态图

    convert -delay 10 -loop 0 *.png keras_class_boundaries.gif

  6. mask图转成cityscapes格式

    自定义数据的读取是快速验证模型的最重要的一步.模型结构可以复用,但自己的数据集和公开的citysacpes,coco数据集标注格式还是有差异.以下是针对三通道彩色或单通道白色mask图转成citysc ...

  7. 将Gif图转换成Unity Texture2D

    最近项目里要从网上拉取玩家的头像,可玩家的头像可以用gif图但unity不支持gif图,这样就会出现拉取失败会显示问号的图,那是Unity内转换Texture2D图失败是给的默认图.于是在网上查找解决 ...

  8. 用ffmpeg把gif动图分离成多张图片和ffmpeg多张图片合成gif动图

    用ffmpeg把gif动图分离成多张图片和ffmpeg多张图片合成gif动图(20190214) 文章目录: 一.ffmpeg把gif动图分离成多张图片 二.ffmpeg多张图片合成gif动图 三.把 ...

  9. Intel Realsense D435 opencv 为什么将color图转换成灰度图后,再与depth图水平堆叠,其结果一片黑色?(数据未map到0-255)

    相关代码 # -*- coding: utf-8 -*- """ @File : obstacle_detection.py @Time : 2019/12/11 10: ...

最新文章

  1. yii2-basic后台管理功能开发之四:图片上传FileInput
  2. python知识:*args 和**kwargs
  3. 10.原码 反码 补码
  4. 【转】文本格式导入物料凭证模板
  5. 操作目录下的文件或目录
  6. 华为p20支持手机云闪付吗_余承东:明年华为智能手机全面支持鸿蒙系统
  7. 特种作业操作电工作业2021年电力电缆考试题库
  8. 控制台接收信息转发_微信多群转播能够起到什么作用?微信群聊录制课程语音转发多群怎么操作?...
  9. Ubuntu下vsftpd - 虚拟账户配置
  10. 《黑客与画家》读后感之一
  11. “D语言风采不再”的说法言过其实
  12. 蝴蝶效应、青蛙现象、鳄鱼法则
  13. 游戏行业面貌不断变化,打破长久以来刻板印象
  14. c++2048小游戏编写
  15. 哈佛体系结构 哈佛体系结构
  16. C# int uint long ulong byte sbyte float double decimal 范围,及类型!
  17. python操作ipv6_python ipv6计算SQLAlchemy复杂查询
  18. 数字IC设计工程师成长四阶段
  19. HDU2550 百步穿杨【打印图案】
  20. 小说 · 凉生,我们可不可以不忧伤

热门文章

  1. Java+SSM网上订餐系统点餐餐厅系统(含源码+论文+答辩PPT等)
  2. Meta Connect汇总:Quest Pro发布,主打生产力场景
  3. NXP RT1064学习笔记(六)— RTC
  4. Hadoop3.2.1 【 YARN 】源码分析 : ApplicationMasterService 源码浅析 [ 一 ]
  5. 构建人工智能评测平台(体系)
  6. 罗克韦尔自动化通过收购ASEM加强控制和可视化产品组合
  7. 简单工厂/工厂方法/抽象工厂
  8. 硬实力 | 观成科技加密流量人工智能安全检测类产品荣获新技术新产品证书
  9. [Darktable]dt源码分析(未完)
  10. vue element-ui elementUi 邮箱自动补全 邮箱自动填充