拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PBR渲染技术解析:从物理原理到游戏引擎实践

1. 从“看起来像”到“看起来对”PBR的诞生背景如果你在2000年左右接触过3D游戏比如《雷神之锤3》或者《半条命》你可能会对当时的画面有印象角色和场景看起来像是用塑料或者蜡做成的表面要么是油腻腻的反光要么是死气沉沉的哑光。那时候一个物体看起来是什么材质很大程度上取决于美术师手绘的“高光贴图”和“漫反射贴图”。这种基于经验的、艺术化的制作流程就是我们常说的“经验光照模型”或“传统光照模型”。这种方法的瓶颈非常明显。首先它极度依赖美术师个人的技艺和感觉。同一个金属材质不同的美术师做出来可能天差地别缺乏一个客观的物理标准。其次它无法应对复杂的光照环境。一张在阳光下看起来正确的贴图放到昏暗的室内或者霓虹灯下可能就完全不对味了因为材质本身并不“知道”光是如何与它相互作用的它只是在“表演”一种固定的视觉效果。最后生产效率低下。为了一个材质在不同光照下的表现美术师可能需要制作多套贴图或者进行繁琐的手动调整。于是整个图形学界和工业界都在思考一个问题我们能不能找到一种方法让计算机生成的图像不仅“看起来像”更能“看起来对”这里的“对”指的是符合我们现实世界中的物理规律。人们希望只要我定义好一个材质的基本物理属性比如它是粗糙的还是光滑的是金属还是绝缘体那么在任何光照环境下它都能自动地、正确地呈现出应有的外观。这种追求催生了基于物理的渲染Physically Based Rendering, PBR理念。PBR不是一个突然出现的、具体的技术而是一套指导思想和理论框架。它的核心目标是使用更符合真实世界物理规律的光照模型和材质模型让渲染结果在不同光照条件下都能保持正确和一致从而减少美术师的主观调整提升制作效率和效果的可预测性。可以说PBR的诞生是计算机图形学从“艺术导向”迈向“科学导向”的关键一步。2. 能量守恒与微表面理论PBR的两大基石要理解PBR是如何工作的必须深入它的两个核心理论支柱能量守恒定律和微表面理论。这是PBR区别于旧式“黑盒”光照模型的根本所在也是其预测性和一致性的来源。2.1 能量守恒光不会凭空产生或消失这是一个非常直观的物理原则在一个封闭系统中入射到物体表面的光能最终要么被反射出去要么被吸收转化为热能或其他形式在渲染中通常表现为漫反射。反射出去的光能和吸收的光能之和必须等于入射光能。在传统的Phong等模型中高光反射和漫反射常常是独立计算、简单相加的这很容易导致最终输出的亮度超过入射光的亮度违反了能量守恒让物体看起来像是在“自发光”显得不真实。PBR模型严格遵循能量守恒。它通常将反射光分为两个部分镜面反射和漫反射。对于一个给定的入射光线其能量会在镜面反射和漫反射之间进行分配。分配的比例由材质的另一个关键属性——金属度决定。对于纯金属金属度1几乎所有的光都在表面被反射即镜面反射几乎没有漫反射。对于绝缘体如塑料、木材金属度0则同时存在镜面反射和漫反射。PBR的着色器计算会确保镜面反射与漫反射的能量之和不超过1从而从根本上杜绝了“过亮”的问题。注意这里有一个常见的理解误区。很多人认为“能量守恒就是让物体暗一点”。其实不然能量守恒是确保光照计算的物理正确性。它带来的直接好处是材质行为的可预测性当你调整材质的粗糙度时你改变的是反射光线的集中程度而不会意外地改变物体的整体亮度能量这使得美术调整更加直观。2.2 微表面理论宏观光滑与微观粗糙为什么一块打磨过的大理石桌面在阳光下会有清晰而柔和的反光高光而一块粗糙的混凝土墙其反光则是模糊而弥散的传统模型很难优雅地解释这种区别。微表面理论提供了一个完美的框架。该理论认为任何我们从宏观上看到的物体表面在微观尺度上都是由无数个微小的、理想光滑的镜面组成的。这些微小镜面的朝向分布决定了物体表面的宏观外观。如果这些微表面法线方向高度一致比如抛光金属那么它们就会像无数面整齐排列的小镜子将入射光线集中地向同一个方向反射形成清晰、锐利的高光。我们称这种表面光滑。如果这些微表面法线方向非常杂乱比如磨砂塑料那么它们就像无数面朝向不同的小镜子将入射光线打散到各个方向形成模糊、弥散的高光。我们称这种表面粗糙。在PBR中我们用粗糙度这个参数通常是一个0到1的值来描述这种微表面法线的混乱程度。0表示绝对光滑完美镜面1表示绝对粗糙完全漫反射。微表面理论不仅定义了粗糙度它还直接推导出了用于计算镜面反射光分布的法线分布函数以及描述微表面间相互遮挡的几何遮蔽函数。这两个函数是PBR光照模型如Cook-Torrance BRDF的核心组成部分。正是能量守恒和微表面理论共同构建了PBR材质的核心输入参数体系漫反射颜色、金属度、粗糙度。有时还会包括法线贴图描述微观几何细节和环境光遮蔽描述环境光在缝隙处的衰减。这套参数集物理意义明确彼此关联使得材质创作从“魔法艺术”变成了“可控工程”。3. BRDF连接理论与实践的数学桥梁我们知道了PBR的理论基础那么计算机是如何根据这些理论来计算屏幕上每个像素颜色的呢答案就是双向反射分布函数。你可以把BRDF理解为一个“材质黑盒”的说明书。它用一个数学函数来描述从某个方向入射的一束光有多少比例、被反射到了某个特定的出射方向。这个函数定义了光线与材质交互的所有可能性。一个完整的、基于物理的BRDF需要满足两个关键物理特性能量守恒和互易性光线从A到B与从B到A反射比例相同。在PBR的实际应用中最著名的BRDF模型是Cook-Torrance BRDF。它不是一个单一的公式而是一个框架将反射光线的贡献拆解为几个部分并用符合微表面理论的函数来分别描述Cook-Torrance BRDF (法线分布函数 * 几何遮蔽函数 * 菲涅尔项) / (4 * (出射方向·法线) * (入射方向·法线))我们来拆解这个公式中的关键部分法线分布函数基于我们刚才讲的微表面理论它描述了微表面法线的分布情况即有多少比例的微表面恰好朝向能将光线从入射方向反射到观察方向。常见的函数有Beckmann、GGXTrowbridge-Reitz等。GGX因其能产生更真实、边缘更柔和的高光拖尾俗称“光晕”效果而被现代引擎广泛采用。几何遮蔽函数在微观层面上一个微表面可能会被其他微表面遮挡导致光线无法入射或被反射。这个函数就是用来模拟这种遮挡效应的它确保了在掠射角度视线几乎平行于表面时高光会自然衰减而不是突兀消失。常见的函数有Smith、Schlick-GGX等。菲涅尔项这是PBR中视觉效果贡献最大、也最反直觉的一项。菲涅尔效应描述的是光线以一个越大的角度越贴近表面入射其反射率就越高。这就是为什么你正对着水面看能看到水底反射弱透射强而掠着水面看则像镜子一样反射极强。在PBR中菲涅尔项决定了镜面反射的强度并且它与金属度强相关。对于非金属菲涅尔反射很弱且颜色固定通常为灰白色对于金属菲涅尔反射很强并且其反射颜色就是金属本身的颜色这就是为什么金属的漫反射贴图通常是黑色的。通过组合这些经过物理验证或推导的函数Cook-Torrance BRDF能够非常精确地模拟光与表面的复杂交互。当我们在着色器中调用这个BRDF函数并传入光线方向、视线方向、表面法线、粗糙度、金属度、基础反射率等参数后它就能输出一个精确的反射光亮度值。这个计算过程是PBR渲染管线的心脏。4. 工作流之争金属度与镜面反射在将PBR理论落地到实际美术生产管线时业界逐渐形成了两种主流的材质工作流金属度/粗糙度工作流和镜面反射/光泽度工作流。它们本质上是同一套物理理论的不同参数化表达但使用习惯和工具支持上各有侧重。4.1 金属度/粗糙度工作流这是目前游戏行业和实时渲染领域如Unity的Standard ShaderUnreal Engine的默认材质最主流、最受欢迎的工作流。它的输入贴图通常包括基础颜色贴图存储材质的漫反射颜色。对于非金属这里就是物体本身的颜色对于纯金属这里理论上应为黑色因为金属没有漫反射。金属度贴图一张单通道灰度贴图。白色1.0表示该像素是金属黑色0.0表示是非金属。灰色区域表示类似锈蚀、污渍等金属与非金属的过渡。粗糙度贴图一张单通道贴图。白色1.0表示完全粗糙黑色0.0表示完全光滑。优点直观易懂金属度是一个二元性很强的概念是或不是美术师很容易理解。粗糙度也符合直觉。节省资源金属度和粗糙度可以分别存储在两张贴图的RGBA通道中通常与环境光遮蔽贴图一起打包非常高效。减少错误由于能量守恒由金属度参数在底层控制美术师不太容易创造出物理上不可能存在的材质比如既像金属又有强烈彩色漫反射。缺点对于某些复杂的、介于金属和非金属之间的材质如半导体、上了清漆的木材用简单的金属度来概括可能不够精确。镜面反射的颜色和强度由金属度和基础颜色间接驱动对于习惯直接控制高光的美术师可能需要适应。4.2 镜面反射/光泽度工作流这种工作流在过去的离线渲染领域和某些渲染器如一些版本的V-Ray中更常见。它的输入贴图通常包括漫反射颜色贴图与非金属的基础颜色类似但即使对于金属这里也可能有颜色值。镜面反射颜色贴图一张RGB贴图直接指定每个像素的菲涅尔反射颜色和强度。对于非金属通常是灰度值对于金属就是金属的颜色。光泽度贴图一张单通道贴图。它与粗糙度是反义词白色1.0表示非常光滑高光锐利黑色0.0表示非常粗糙高光模糊。优点控制直接美术师可以直接指定镜面反射的颜色和强度控制力更精细尤其对于非金属材质。历史兼容更贴近传统的光照模型高光贴图对于从旧流程迁移的项目可能更友好。缺点容易违反物理因为可以自由设置漫反射和镜面反射颜色美术师很容易创建出能量不守恒的材质两者之和超过1。参数冗余对于金属材质其镜面反射颜色理论上应等于漫反射颜色这就产生了数据冗余。不够直观光泽度与粗糙度的概念相反需要转换思维。如何选择对于绝大多数现代实时渲染项目游戏、实时可视化金属度/粗糙度工作流是毫无争议的首选。它被主流引擎原生支持社区资源丰富工作流程标准化且更容易保证物理正确性。除非你有非常特殊的、必须直接控制镜面反射颜色的需求或者是在维护一个基于旧工作流的遗产项目否则都应优先采用金属度/粗糙度工作流。5. IBLPBR渲染完整性的关键拼图即使我们有了完美的BRDF来计算直接光源如太阳、灯泡的反射场景仍然会显得不真实因为现实世界中物体还会受到来自整个环境所有方向的间接光照的影响比如天空的光、周围墙壁的反射光。这就是基于图像的照明技术要解决的问题。IBL的核心思想是使用一张或多张记录了整个环境光信息的全景图环境贴图来模拟间接光对物体的照射。对于PBR而言IBL不是可选项而是必选项。原因在于PBR材质的菲涅尔效应在掠射角物体反射会急剧增强。如果只有直接光物体的边缘会显得暗淡和不自然而来自环境的漫反射和镜面反射光正好填补了这一空缺让物体看起来像是真实存在于那个环境中。IBL的实现通常分为两个部分漫反射IBL环境光中均匀的、来自各个方向的低频光照。这部分通常通过将环境贴图进行卷积模糊预计算成一个辐照度图。在着色时直接采样这张辐照度图来作为漫反射环境光的颜色。计算量小效果柔和。镜面反射IBL环境光中方向性强的、高频的镜面反射部分。这是IBL的难点和重点。因为镜面反射强烈依赖于观察方向和粗糙度。一个粗糙的表面其镜面反射的环境应该是模糊的一个光滑的表面反射的环境应该是清晰的。实时计算这个卷积极其昂贵。因此现代图形学采用了一种巧妙的预滤波方法预计算滤波环境贴图。我们预先将环境贴图按照不同的粗糙度等级例如0 0.25 0.5 0.75 1.0进行不同程度的模糊卷积生成一系列Mipmap层级或一组独立的贴图。在实时渲染时根据物体表面的粗糙度去采样对应级别的预滤波环境贴图。对于光滑表面采样低模糊级别清晰对于粗糙表面采样高模糊级别模糊。同时还需要配合另一张预计算的BRDF积分查找表贴图来精确地组合菲涅尔项最终得到非常真实的镜面反射环境光效果。正是IBL技术的成熟和应用使得PBR材质能够真正“沉浸”在场景光照里实现了“一次制作到处使用”的承诺。一个在日光下制作的金属球放到霓虹灯环境中其反射的霓虹灯色彩和强度会自动变得正确这背后就是PBR理论结合IBL技术的威力。6. 从理论到实践现代引擎中的PBR实现理解了原理我们来看看在像Unity URP/HDRP或Unreal Engine这样的现代引擎中PBR是如何被封装和使用的。这能让我们更清楚地看到理论与生产的结合点。以Unity的URP为例其内置的PBR着色器如Lit Shader为美术师提供了一个直观的界面。你会发现核心输入正是我们之前讨论的参数Base Map对应基础颜色贴图。Metallic Map和Smoothness Map注意Unity习惯使用“光滑度”它是粗糙度的倒数光滑度 1 - 粗糙度。你需要一张金属度贴图和一张光滑度粗糙度贴图。Normal Map法线贴图用于模拟微观几何起伏。Occlusion Map环境光遮蔽贴图通常可以和光滑度一起打包在Base Map的Alpha通道或另一张贴图中。在着色器代码层面URP的Lit Shader内部实现了一个完整的PBR光照计算。它会采样并解码各种输入贴图得到每个像素的基础颜色、金属度、粗糙度光滑度转换而来、法线等信息。处理直接光照对于场景中的每一个平行光、点光源、聚光灯计算其光照方向、强度然后调用基于Cook-Torrance或类似模型的BRDF函数计算该光源产生的镜面反射和漫反射贡献。这个过程严格遵循能量守恒。处理间接光照IBL采样预计算的漫反射辐照度立方体贴图作为环境漫反射光。根据粗糙度和反射向量采样预滤波的镜面反射环境立方体贴图的相应Mip层级。采样BRDF LUT贴图与菲涅尔项结合计算出精确的镜面反射IBL贡献。将所有直接光和间接光的贡献叠加起来输出最终的颜色。一个关键的实践细节线性空间渲染。PBR计算要求所有光照计算都在线性颜色空间中进行。这意味着从贴图采样出来的颜色通常是sRGB空间需要先转换到线性空间进行所有光照和混合计算最后在输出到屏幕前再转换回sRGB空间。现代渲染管线如URP、HDRP默认都会进行这个转换。如果你在Shader中自己进行颜色混合而忽略了这一点很可能会导致颜色变暗或变亮破坏PBR的正确性。7. 常见误区与性能考量在应用PBR时无论是美术制作还是技术实现都存在一些常见的误区和需要权衡的性能问题。美术制作误区“基础颜色贴图应该很亮”错误。在PBR中基础颜色贴图应该是物体在纯白、均匀漫射光下呈现的颜色。现实中物体很少有这么亮的。过于鲜艳和明亮的基础色会导致最终渲染结果“发飘”、不真实。通常建议从真实照片中提取颜色并适当降低饱和度与明度。“金属度贴图可以有灰度”可以但需理解其含义。金属度贴图中的灰度值如0.5不代表“半金属”而是表示该像素点可能是金属表面覆盖了非金属层如灰尘、锈迹、油漆。引擎会将其作为金属和非金属的线性混合来处理。制作时应明确灰度区域代表的物质。“粗糙度贴图就是旧版的高光贴图”这是概念性错误。高光贴图控制的是反射的强度而粗糙度贴图控制的是反射的清晰度。一个光滑的黑色塑料粗糙度低仍然有很强、很锐利的高光只是高光颜色很暗非金属的菲涅尔反射弱。不能简单用高光贴图的反相来当粗糙度贴图。忽视纹理的物理尺度在PBR中纹理的细节尺度应该与现实世界对应。例如砖墙的粗糙凹凸尺度是厘米级而划痕的尺度是毫米级。确保法线贴图、高度贴图、粗糙度贴图的细节频率与其表现的物理尺寸相匹配否则会显得很假。性能与优化考量计算开销PBR着色计算特别是包含多光源、完整IBL和复杂BRDF的模型比传统Phong着色要昂贵得多。一个像素的PBR计算可能包含多次纹理采样、复杂的数学运算如开方、除法、向量点乘/叉乘、BRDF公式计算。优化策略简化光照模型在移动端或对大量物体渲染时可以使用简化版的BRDF模型如Disney BRDF的简化变体或使用近似计算。减少动态光源数量实时动态光源是性能杀手。尽量将静态光照烘焙到光照贴图或光照探针中。IBL优化预计算辐照度图和预滤波环境贴图是必须的。可以降低这些贴图的分辨率或者使用球谐函数来近似低阶的漫反射IBL能极大节省采样开销和内存。材质合并与LOD对远处或小物体使用更简单的材质球和更低分辨率的贴图。利用现代GPU特性使用计算着色器来并行处理部分光照计算或者利用硬件线性过滤来加速纹理采样。PBR带来真实感的同时也对美术规范和技术实现提出了更高要求。理解这些误区和性能瓶颈有助于我们在追求视觉效果和保证运行流畅度之间找到最佳平衡点。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门