2

Metalness vs Specular Workflows for PBR Shading

 2 years ago
source link: https://sanonz.github.io/2019/pbr-materials-specular-vs-metalness-workflows/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Metalness vs Specular Workflows for PBR Shading

随着计算机硬件以及渲染上的进步,我们可以更好的从物理上去模拟灯光属性,从而诞生了新的工作流程 PBR 工作流。PBR是一种着色和渲染技术,基于物理的渲染过程,用于更精确的描述光如何与物体表面互动。

PBR的优势:

  1. 方法论和算法基于精确的计算公式,免除创作表面的猜想过程。
  2. 在任何光照环境都能表现出正确的结果。
  3. 为不同的艺术家,提供统一的工作流程。

PBR 工作流分类

PBR有两种工作流:

  1. Metal Roughness Worfkow(金属性/粗超度工作流程)
  2. Specular Glossiness Worfkow(高光/光泽度工作流程)

THREE.js 使用的是第一种工作流,名字子叫做 Metallic-Roughness,对应材质为 MeshStandardMaterial

通用纹理:

Name对应 THREE.js说明
Ambient OcclusionaoMap表示有多少环境光,可以被表面上的一个点吸收。
NormalnormalMap用于视差映射,通过增加可见的深度感来提高渲染的真实性。
HeightdisplacementMap不论 PBR 还是非 PBR,NormalMap 都是用来模拟表面细节,同时还会影响 Roughness 和 Glossiness 映射。

Metal Roughness Worfkow

不易出错,省内存,但是白边现象更明显。

Base Color:(RGB-sRGB)

包含信息:绝缘体,反射颜色。金属,反射率。最亮色不应超越 240RGB,最暗色应在 30-50 RBG 之间。

不包含其他光照信息,比如 amblient occlusion。金属反射率应该在 70%-100% 之间。也就是 180-255 RGB,油漆和氧化的部分应该按照绝缘体处理。

对应 THREE.js 的 MeshStandardMaterial.colorMeshStandardMaterial.map

Matallic Map:(Grayscale-Linear)

描述哪些区域是金属,那些是绝缘体。值为 1 表示纯金属,为 0 表示绝缘体。

如果matalic map的灰度值低于235,那么对应的basecolor的反射率也应该降低一些。

对应 THREE.js 的 MeshStandardMaterial.metalnessMeshStandardMaterial.metalnessMap

Roughness Map:(Grayscale-Linear)

描述表面引起光纤漫反射的不规则程度,这将改变光纤的方向,但是不会改变光线的强度。光滑表面会有小而亮的高光,而粗糙表面将会出现大而暗淡的高光。在这个灰度图里面,值为 0 代表光滑表面,而 1 代表粗糙表面。

Roughness Map是一个“有故事”的贴图,它会告诉你这个表面经历过那些严酷(或者平和)的环境。

对应 THREE.js 的 MeshStandardMaterial.roughnessMeshStandardMaterial.roughnessMap

Specular Glossiness Worfkow

镜面反射工作流容易出错,因为 Specular 包含了全部的绝缘体 F0 信息,1.0 的 Diffuse 和 1.0 的 Specular 将会使得反射折射能量大于输入能量,这违背了能量守恒定律。也就是说在绘制贴图时,你无法预览结果。

Specular 材质在 THREE.js 中未实现,可以利用自定义 ShaderMaterial 来实现,具体实现参考 这里

Diffuse:(RGB-sRGB)

包含 Albedo Color,但是不包含任何反射率信息。纯金属为黑色,因为纯金属没有颜色,油漆和锈迹是需要带有颜色的。基础颜色应不包含光照信息,除了 micro-occlusion。黑色不应低于 30-50sRGB,亮色不应高于240sRGB。

Specular:(RGB-sRGB)

灰度值,表示非金属 F0 RGB 值,表示金属吸收的不同波长的光线。这种贴图允许使用不同的F0值来表现非金属。

Glossiness:

与 Roughness 相反,值为 0 代表粗糙表面,而 1 代表光滑表面。

Metal/Roughness 与 Specular/Glossiness 是可以相互转换的,这里推荐个 小工具 可以在线转换两种工作流。

至此结束,感谢阅读。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK