当前位置: 首页 > news >正文

PBR标准化工作流程

PBR的概念、基本原理和使用中要遵守的规则。这节主要参考的是Allegorithmic公司官方的英文教程,同时也融合了我在其他资源上看到的一些有价值的知识点。

首先我们来看一下什么是PBR。PBR就是Physically-Based Rendering的缩写,意为基于物理的渲染。它提供了一种光照和渲染方法,能够更精确的描绘光和表面之间的作用。它不仅擅长用来表现非常写实的材质,同时也能用来处理风格化的资源。

PBR有两种主要的工作流,一种是Metallic/Roughness(金属值/粗糙度),另一种是Specular/Glossiness(镜面反射/光泽度)。这里我们说的工作流,是指数据以何种形式输入到引擎中。

我们着重来看一下第一种工作流。

根据菲涅尔效应,对于所有的材质来说,当以掠射角观察时,光滑物体接近“边缘”的地方,会形成完美的镜面,也就是说特定的角度上,“任何表面光滑的物质都可以成为完美镜面”。

我们说金属的镜面反射值高达70%-100%,反映在Metellic工作流中,就是Metallic值为1的部分,它所对应的base color,实际上就是metal reflectance,也就是金属的镜面反射值。

我们现在来看一下两种工作流的不同点。

Unity支持两种工作流,而UE4则只支持metallic工作流。Substance Designer两种工作流都支持,而Substance Painter官方说只支持metallic,如果要用specular工作流需要单独下载shader。

在低分辨率贴图中边缘瑕疵问题会比较明显

Specular工作流,边缘瑕疵也是有的,是黑色的,但是非常不明显。

Specular工作流对理解PBR有更高的要求,例如需要为非金属提供正确的F0值,为金属提供黑色的漫反射值,以及如果没有shader负责处理,则需要提供能量守恒方案。需要更多3D建模资料点击👉🏼加入👈🏼 获取3D游戏建模福利

综合上述两种工作流的优缺点,以及引擎和使用工具的情况来看,我个人比较偏好使用Metallic/Roughness工作流,也就是第一种工作流,那我们就来看一下第一种工作流的贴图创建规则:

接下来我们看一个在实际工作中经常会遇到的问题,就是为什么Substance中的预览效果与导入引擎实际渲染效果差别很大?

人眼感知是非线性的,即使今天的显示器是数字的,它们仍然采用伽马编码信号作为输入。伽玛空间的公认标准称为sRGB,该标准定义了一个伽马空间映射到线性空间。
贴图往往被保存在伽马空间中,Shader计算要在线性空间中进行,以保证数学计算的正确性。但结果应在伽马空间中呈现,以使我们的眼睛看起来正确。因此,当贴图在着色器中采样时,由于是基于伽马校正过的值所以会导致计算不准确的结果。

最后我们总结一下PBR的关键要素:
1.能量守恒,反射的光线永远不会比照到表面的入射光线更亮。
2.菲涅尔,非金属的F0值变动很小,只在2%-5%区间内;而金属的F0值范围在70%-100%。

相关文章:

  • Vue学习第17天——netTick()的原理及使用
  • 英语语法精讲合集
  • 如何用数据采集网关快速采集工业现场数据,怎么搭建MQTT服务器?
  • Vue中的样式绑定
  • 大学网课答案公众号题库搭建
  • torch.utils.data
  • torch.torchvision
  • Git GitHub VSCode 简单使用
  • 小程序开发技术框架选型
  • 大学生怎么制作查题搜题公众号?
  • Spring源码------IOC容器初始化过程
  • SpringBoot+Vue+Element-UI实现家具商城系统
  • Proxy-Reflect
  • 容器-基础
  • GC垃圾回收
  • 【前端学习】-粗谈选择器
  • Druid 在有赞的实践
  • Go 语言编译器的 //go: 详解
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Laravel Mix运行时关于es2015报错解决方案
  • mac修复ab及siege安装
  • Shell编程
  • Spring Boot快速入门(一):Hello Spring Boot
  • Unix命令
  • VuePress 静态网站生成
  • 阿里云前端周刊 - 第 26 期
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端面试题总结
  • 悄悄地说一个bug
  • 驱动程序原理
  • 想写好前端,先练好内功
  • 用mpvue开发微信小程序
  • 智能合约Solidity教程-事件和日志(一)
  • python最赚钱的4个方向,你最心动的是哪个?
  • 如何正确理解,内页权重高于首页?
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​TypeScript都不会用,也敢说会前端?
  • ​一些不规范的GTID使用场景
  • ###STL(标准模板库)
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #宝哥教你#查看jquery绑定的事件函数
  • (1)(1.9) MSP (version 4.2)
  • (1)bark-ml
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (二)正点原子I.MX6ULL u-boot移植
  • (算法设计与分析)第一章算法概述-习题
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)appium-desktop定位元素原理
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite