基于物理的渲染技术(PBR)系列一

article/2025/9/17 5:26:52

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

 

PBR,或者用更通俗一些的称呼是指基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。正因为基于物理的渲染目的便是为了使用一种更符合物理学规律的方式来模拟光线,因此这种渲染方式与我们原来的Phong或者Blinn-Phong光照算法相比总体上看起来要更真实一些。除了看起来更好些以外,由于它与物理性质非常接近,因此我们(尤其是美术师们)可以直接以物理参数为依据来编写表面材质,而不必依靠粗劣的修改与调整来让光照效果看上去正常。使用基于物理参数的方法来编写材质还有一个更大的好处,就是不论光照条件如何,这些材质看上去都会是正确的,而在非PBR的渲染管线当中有些东西就不会那么真实了。

虽然如此,基于物理的渲染仍然只是对基于物理原理的现实世界的一种近似,这也就是为什么它被称为基于物理的着色(Physically based Shading) 而非物理着色(Physical Shading)的原因。判断一种PBR光照模型是否是基于物理的,必须满足以下三个条件(不用担心,我们很快就会了解它们的):

  1. 基于微平面(Microfacet)的表面模型。
  2. 能量守恒。
  3. 应用基于物理的BRDF。

在这次的PBR系列教程之中,我们将会把重点放在最先由迪士尼(Disney)提出探讨并被Epic Games首先应用于实时渲染的PBR方案。他们基于金属质地工作流(Metallic Workflow)的方案有非常完备的文献记录,广泛应用于各种流行的引擎之中并且有着非常令人惊叹的视觉效果。完成这次的教程之后我们将会制作出类似于这样的一些东西:

 

请注意这个系列的教程所探讨的内容属于相当高端的领域,因此要求读者对OpenGL和着色器光照有较好的理解。读者将会需要这些相关的知识:帧缓冲立方体贴图Gamma校正HDR法线贴图。我们还会深入探讨一些高等数学的内容,我会尽我所能将相关的概念阐述清楚。

 

所有的PBR技术都基于微平面理论。这项理论认为,达到微观尺度之后任何平面都可以用被称为微平面(Microfacets)的细小镜面来进行描绘。根据平面粗糙程度的不同,这些细小镜面的取向排列可以相当不一致:

产生的效果就是:一个平面越是粗糙,这个平面上的微平面的排列就越混乱。这些微小镜面这样无序取向排列的影响就是,当我们特指镜面光/镜面反射时,入射光线更趋向于向完全不同的方向发散(Scatter)开来,进而产生出分布范围更广泛的镜面反射。而与之相反的是,对于一个光滑的平面,光线大体上会更趋向于向同一个方向反射,造成更小更锐利的反射:

在微观尺度下,没有任何平面是完全光滑的。然而由于这些微平面已经微小到无法逐像素的继续对其进行区分,因此我们只有假设一个粗糙度(Roughness)参数,然后用统计学的方法来概略的估算微平面的粗糙程度。我们可以基于一个平面的粗糙度来计算出某个向量的方向与微平面平均取向方向一致的概率。这个向量便是位于光线向量l和视线向量v之间的中间向量(Halfway Vector)。我们曾经在之前的高级光照教程中谈到过中间向量,它的计算方法如下:

微平面的取向方向与中间向量的方向越是一致,镜面反射的效果就越是强烈越是锐利。然后再加上一个介于0到1之间的粗糙度参数,这样我们就能概略的估算微平面的取向情况了:

我们可以看到,较高的粗糙度值显示出来的镜面反射的轮廓要更大一些。与之相反地,较小的粗糙值显示出的镜面反射轮廓则更小更锐利。

 

微平面近似法使用了这样一种形式的能量守恒(Energy Conservation):出射光线的能量永远不能超过入射光线的能量(发光面除外)。如图示我们可以看到,随着粗糙度的上升镜面反射区域的会增加,但是镜面反射的亮度却会下降。如果不管反射轮廓的大小而让每个像素的镜面反射强度(Specular Intensity)都一样的话,那么粗糙的平面就会放射出过多的能量,而这样就违背了能量守恒定律。这也就是为什么正如我们看到的一样,光滑平面的镜面反射更强烈而粗糙平面的反射更昏暗。

为了遵守能量守恒定律,我们需要对漫反射光和镜面反射光之间做出明确的区分。当一束光线碰撞到一个表面的时候,它就会分离成一个折射部分和一个反射部分。反射部分就是会直接反射开来而不会进入平面的那部分光线,这就是我们所说的镜面光照。而折射部分就是余下的会进入表面并被吸收的那部分光线,这也就是我们所说的漫反射光照。

这里还有一些细节需要处理,因为当光线接触到一个表面的时候折射光是不会立即就被吸收的。通过物理学我们可以得知,光线实际上可以被认为是一束没有耗尽就不停向前运动的能量,而光束是通过碰撞的方式来消耗能量。每一种材料都是由无数微小的粒子所组成,这些粒子都能如下图所示一样与光线发生碰撞。这些粒子在每次的碰撞中都可以吸收光线所携带的一部分或者是全部的能量而后转变成为热量。

 

 

 

一般来说,并非所有能量都会被全部吸收,而光线也会继续沿着(基本上)随机的方向发散,然后再和其他的粒子碰撞直至能量完全耗尽或者再次离开这个表面。而光线脱离物体表面后将会协同构成该表面的(漫反射)颜色。不过在基于物理的渲染之中我们进行了简化,假设对平面上的每一点所有的折射光都会被完全吸收而不会散开。而有一些被称为次表面散射(Subsurface Scattering)技术的着色器技术将这个问题考虑了进去,它们显著的提升了一些诸如皮肤,大理石或者蜡质这样材质的视觉效果,不过伴随而来的则是性能下降代价。

对于金属(Metallic)表面,当讨论到反射与折射的时候还有一个细节需要注意。金属表面对光的反应与非金属材料还有电介质(Dielectrics)材料表面相比是不同的。它们遵从的反射与折射原理是相同的,但是所有的折射光都会被直接吸收而不会散开,只留下反射光或者说镜面反射光。亦即是说,金属表面不会显示出漫反射颜色。由于金属与电介质之间存在这样明显的区别,因此它们两者在PBR渲染管线中被区别处理,而我们将在文章的后面进一步详细探讨这个问题。

反射光与折射光之间的这个区别使我们得到了另一条关于能量守恒的经验结论:反射光与折射光它们二者之间是互斥的关系。无论何种光线,其被材质表面所反射的能量将无法再被材质吸收。因此,诸如折射光这样的余下的进入表面之中的能量正好就是我们计算完反射之后余下的能量。

我们按照能量守恒的关系,首先计算镜面反射部分,它的值等于入射光线被反射的能量所占的百分比。然后折射光部分就可以直接由镜面反射部分计算得出:

float kS = calculateSpecularComponent(...); // 反射/镜面 部分
float kD = 1.0 - ks;                        // 折射/漫反射 部分

这样我们就能在遵守能量守恒定律的前提下知道入射光线的反射部分与折射部分所占的总量了。按照这种方法折射/漫反射与反射/镜面反射所占的份额都不会超过1.0,如此就能保证它们的能量总和永远不会超过入射光线的能量。而这些都是我们在前面的光照教程中没有考虑的问题。


 

 


http://chatgpt.dhexx.cn/article/lXOJqWj6.shtml

相关文章

[引擎开发] PBR材质的原理

[本文大纲] 基础概念篇 引入 光线与介质的作用 光线的传播路径 体积散射和表面光照 光线和介质外观 微平面理论 概念介绍 中间向量 能量守恒定律 微平面理论的不足 光照计算 半球积分 …

PBR材质基础概念,限制及未来发展

最近几年图形学社区对PBR的关注非常高,也许是由于Disney以及一些游戏引擎大厂的助推,也许是因为它可以被轻松集成进实时渲染的游戏引擎当中,也许是因为许多人发现现在只需要调几个参数就能实现具有非常精细细节的表面着色了。反正现在网络上随…

PBR渲染(一)——PBR理论基础

PBR基础框架 PBR理论基础PBR基础框架 1.PBR理论基础 BSDF(双向散射表面分布函数) 对于一般的基于物理的表面材质来说,使用第一项BSSRDF双向散射表面反射分布函数,其简化后的重点就是BRDF双向反射率分布函数,忽略了复…

Unity ShaderGraph没有PBR Graph的解决方法

1.创建光照Shader Graph 2.打开Shader Graph界面 Fragment选项卡上右击——Add Block Note——添加Alpha和Alpha Clip Threshold两个属性 可以看到此时这两个属性是灰色的,并不生效,是因为未启用Alpha Clipping 3.Graph Inspector选项卡中,勾…

在3ds max中,什么是PBR材质?

PBR是Physically-Based Rendering(基于物理的渲染)的简称。 PBR材质是一种基于物理的渲染材质,可提供灯光与曲面交互方式的精确表示。注: 仅当活动渲染器支持时,该材质才会显示在“材质/贴图浏览器”中。 在3ds max中PBR材质分为…

理解PBR:从原理到实现(上)

PBR 从离线渲染进入游戏引擎 CSDN 博客的公式排版有问题,可以看我的 GitHub Page:https://neil3d.github.io/unreal/pbr-theory.html 基于物理的渲染,即 PBR,Physically Based Rendering,这个技术名词最早是有马特法尔…

什么是PBR

PBR就是基于物理的渲染。 首先得介绍光照模型。光照模型是一种数学模型,也就是一种算法。这些算法用于计算机模拟物体在光照下的表现,具体就是 计算物体某一点处的光强。 这些模型从理论而言分为两类。 基于物理理论的和 基于感知经验的。 PBR就是基于…

BPR

BPB模型概念 BPR(Bayesian Personalized Ranking)推荐模型是基于贝叶斯后验优化的个性化排序算法。从user-iem矩阵训练出多个矩阵,而且一个矩阵表示一个用户的item偏好情况来获得用对多个item的偏好关系的推荐系统。本身不优化用户对物品的评分,只是借由…

两种不同的PBR工作流介绍

本文介绍两种常用的PBR材质工作流:金属/粗糙度工作流(Metal/Roughness)和镜面反射/光泽度工作流(Specular/Glossiness)。这两种工作流都可以用来制作一个支持PBR的材质,并用PBR渲染出逼真的效果&#xff0c…

4.3 PBR

1. 实验目的 熟悉PBR的应用场景掌握PBR的配置方法2. 实验拓扑 PBR实验拓扑如图4-8所示: 图4-8:PBR 3. 实验步骤 (1) IP地址的配置 R1的配置 <Huawei>system-view

PBR渲染(二)——PBR皮肤渲染

PBR皮肤渲染 在PBR基础框架的基础上实现皮肤的渲染&#xff0c;要根据皮肤的渲染特性来对基础框架进行扩充和修改&#xff0c;从而实现真实感的PBR皮肤渲染。皮肤一般具有以下渲染特性&#xff1a; 1.次表面散射&#xff08;SSS&#xff09; 2.BRDF高光&#xff08;Specular …

PBR 基础知识干货总结

&#xff08;1&#xff09;什么是PBR&#xff1f; 基于物理的渲染过程。 PBR是一种着色和渲染技术&#xff0c;用于更精确的描述光如何与物体表面互动。 PBR的优势&#xff1a; &#xff08;1&#xff09;方法论和算法基于精确的计算公式&#xff0c;免除创作表面的猜想过程。 …

PBR与Blinnphong解读

我们做光栅化模式的渲染都了解有两种比较常用的渲染方式&#xff0c;一个是blinnphong的渲染&#xff0c;一个是pbr的渲染。 blinnphong&#xff1a; blinnphong的渲染模式更多的是一种经验值模拟光照对物体的效果。所以他不是一个正确的能量守恒的渲染方式。 blinnphong的渲…

【基于物理的渲染(PBR)白皮书】(一) 开篇:PBR核心知识体系总结与概览

本文由浅墨_毛星云 出品&#xff0c;首发于知乎专栏&#xff0c;转载请注明出处 文章链接&#xff1a; https://zhuanlan.zhihu.com/p/53086060 先放出PBR知识体系的架构图&#xff1a; 图很大&#xff0c;建议下载到本地放大查看。原图下载地址&#xff1a; https://raw.gi…

什么是PBR?

一、什么是PBR&#xff1f; 基于物理渲染以前的渲染是在模仿灯光的外观现在是在模仿光的实际行为试图形看起来更真实 二、PBR组成部分 灯光属性&#xff1a;直接照明、间接照明、直接高光、间接高光、阴影、环境光闭塞表面属性&#xff1a;基础色、法线、高光、粗糙度、金属度…

PBR流程介绍和模型规范

&#xff08;1&#xff09;基本流程&#xff1a; &#xff08;1&#xff09;制作中模&#xff1a; 基础模型&#xff1a; 指的是中模&#xff01;&#xff01; 中模导出为.obj 格式&#xff08;跟.fbx格式相比&#xff1a;不会出现模型大小的缩放&#xff09; 高模&#xff1a…

PBR材质:基本原理和简单制作

概要&#xff1a;介绍PBR材质的基本原理以及制作一个简单的PBR材质 参考资料&#xff1a;BASIC THEORY OF PHYSICALLY-BASED RENDERING 如有问题&#xff0c;多多指正。 侵删。 1.PBR是什么&#xff0c;光线的基本原理。 PBR即Physically-based rendering&#xff0c;基于物理…

什么是PBR?pbr入门基础干货

&#xff08;1&#xff09;什么是PBR&#xff1f; 基于物理的渲染过程。 PBR是一种着色和渲染技术&#xff0c;用于更精确的描述光如何与物体表面互动。 PBR的优势&#xff1a; &#xff08;1&#xff09;方法论和算法基于精确的计算公式&#xff0c;免除创作表面的猜想过程…

PBR——概述、基于物理的材质

PBR概述 PBR&#xff0c;即Physically Based Rendering&#xff0c;主要分为基于物理的材质、基于物理的光照和基于物理的相机三个部分&#xff0c;目前来说对大家最为所熟知的是基于物理的材质部分。本文围绕基于物理的材质进行相关介绍。 什么是PBR 其实最早听说PBR这玩意…

PBR基础理论通俗解释

PBR基础理论通俗解释 今天给大家介绍PBR的基础理论, 不会涉及比较深的具体算法, 算是一篇扫盲的文章, 尽量尝试说人话, 让大家能够对PBR有基本的了解. 什么是PBR? PBR是基于物理的渲染(Physically Based Rendering), 也就是说通过模拟物理世界的方式来渲染. 既然有基于物理…