惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Know Your Adversary
Know Your Adversary
C
CERT Recently Published Vulnerability Notes
V
Vulnerabilities – Threatpost
N
News | PayPal Newsroom
O
OpenAI News
A
About on SuperTechFans
月光博客
月光博客
Martin Fowler
Martin Fowler
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V2EX - 技术
V2EX - 技术
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
人人都是产品经理
人人都是产品经理
T
Tor Project blog
D
DataBreaches.Net
Cloudbric
Cloudbric
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
云风的 BLOG
云风的 BLOG
F
Full Disclosure
S
SegmentFault 最新的问题
Vercel News
Vercel News
T
Tailwind CSS Blog
Schneier on Security
Schneier on Security
宝玉的分享
宝玉的分享
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
P
Privacy International News Feed
美团技术团队
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
Scott Helme
Scott Helme
Forbes - Security
Forbes - Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Recent Announcements
Recent Announcements
AWS News Blog
AWS News Blog
Stack Overflow Blog
Stack Overflow Blog
S
Security Affairs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
T
Tenable Blog
Cyberwarzone
Cyberwarzone
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
J
Java Code Geeks
T
Threatpost

Sanonz

使用 Invox Setup 实现 Electron 安装包界面美化 用 VS Code 编辑器开发 STM32 嵌入式 使用 FontCreator 编辑字体库 | Sanonz 使用 React Context API 和 Hooks 实现全局状态管理和性能优化 使用 Phonegap + Cordova 搭建混合开发平台 利用 Github Actions 自动部署 Hexo 博客 在 WEB 端实现亮/暗主题跟随系统功能 | Sanonz 以太坊概念与使用 wep3/infura 实现以太币及合约币交易流程 | Sanonz 实现树莓派(Raspberry Pi)联网发送本机IP到绑定的微信 | Sanonz 使用 Three.js 的 RenderTarget 实现离屏渲染 使用 redux-store-provider 简化 react 开发流程 浏览器 HTTP 并发请求规则探讨 | Sanonz JavaScript Event Loop、Micro Task、Macro Task WebAssembly 从入门到吃鸡 | Sanonz Let's Encrypt 使用教程,免费的 SSL 证书,让你的网站拥抱 HTTPS Let's Encrypt 使用教程,免费的 SSL 证书,让你的网站拥抱 HTTPS Ubuntu 搭建 php、mysql、nginx 开发环境 | Sanonz WebGL 三维教程 - 绘制矩形和点(二) | Sanonz WebGL 三维教程 - WebGL 介绍(一) Hexo 搭建静态博客与 hexo-theme-concise 主题使用教程 | Sanonz
Metalness vs Specular Workflows for PBR Shading
Sanonz · 2019-09-23 · via Sanonz

前言

随着计算机硬件以及渲染上的进步,我们可以更好的从物理上去模拟灯光属性,从而诞生了新的工作流程 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 映射。

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

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 是可以相互转换的,这里推荐个 小工具 可以在线转换两种工作流。

至此结束,感谢阅读。