type
status
date
slug
summary
tags
category
icon
password
1. PBR的基本介绍
1.1 PBR概念
PBR(Physically Based Rendering)译成中文是基于物理的渲染。它是利用真实世界的原理和理论,通过各种数学方法推导或简化或模拟出一系列渲染方程,并依赖计算机硬件和图形API渲染出拟真画面的技术。
1.2 与物理渲染的差别
那它为什么不叫物理渲染(Physical Rendering)呢?
物理渲染(Physical Rendering)是指跟真实世界完全一致的计算机渲染效果。
为了回答这个问题,先了解一下真实世界的成相原理。
真实世界的物体有着各自的材质属性和表面特征,它们受到各种局部灯光和全局环境光的影响,而且它们之间又相互影响,最终这些信息通过光波的形式进入复杂的人眼构造,刺激视神经形成生物信号进入大脑感光皮层,最终让人产生视觉认知。(下图)
有论文指出,绝大多数人的眼睛可以接收相当于5亿到10亿个像素的信息量。目前主流的分辨率才百万千万级别,加上显示器亮度范围和屏幕像素间距的限制,远远达不到亿级像素的渲染和亮度表示范围。
基于现阶段的知识水平和硬件水平,还不能渲染跟真实世界完全一致的效果,只能一定程序上模拟接近真实世界的渲染画面,故而叫基于物理的渲染(Physically Based Rendering),而非物理渲染(Physical Rendering)。
1.3 PBR的特征
这节阐述的是PBR呈现的效果特征,而非底层物理原理的特征。相比传统的Lambert着色和Phong着色,PBR着色在效果上有着质的提升,可以表示更多更复杂的材质特征:
- 表面细节
- 物体粗糙度
- 区别明显的金属和绝缘体
- 物体的浑浊程度
- 菲涅尔现象:不同角度有不同强度的反射光
- 半透明物体
- 多层混合材质
- 清漆效果
- 其它更复杂的表面特征
Phong模型着色效果,只能简单地表现理想模型的漫反射和高光,渲染出的效果跟真实世界相差甚远。
PBR材质效果球,它们真实地渲染出各类材质的粗糙、纹理、高光、清漆、边缘光等等表面细节特征。PBR对渲染效果真实感的提升可见一斑。
2 PBR的衍变历史
PBR从最初传统型的Lambert光照发展至今,已经历经200多年,期间发生多次迭代衍变和改进,主流光照模型和分支光照模型也遍地开花。下面按照时间顺序着重对PBR衍变的关键技术节点做阐述。
2.1 Lambert(1760年)
Lambert模型是Johann Heinrich Lambert在1760年提出的光照模型。是传统的光照模型。
它计算的是漫反射。漫反射是光源照射到物体表面后,向四面八方反射,产生的反射效果。这是一种理想的漫反射光照模型。
漫反射光的强度近似地服从于Lambert定律,即漫反射光的光强仅与入射光的方向和反射点处表面法向夹角的余弦成正比。
Lambert模型着色效果,模拟了理想环境下的漫反射效果。
2.2 Smith(1967年)
Smith将Cook-Torrance的DFG部分的G几何项有效地结合起来,使得几何函数的近似法得到了有效地提升,后面章节将会阐述更多细节。
2.3 Phong(1973年)
Phong模型由美国越南裔学者裴祥风(Bùi Tường Phong)发明,于1973年的博士论文首度发表。它也是一种传统的理想的光照模型。
相较Lambert,Phong增加了镜面反射部分,使得物体渲染效果更接近真实世界(下图)。
2.4 Cook-Torrance(1982年)
Cook-Torrance是Cook和Torrance于1982年联合提出的光反射模型。
该模型考虑在同一景物中不同材料和不同光源的相对亮度。它描述反射光线在方向上的分布和当反射随入射角而改变时颜色的变化,并能求得从具体的实际材料制成的物体反射出来的光线的光谱能量分布,并根据这种光谱能量分布精确地再现颜色。
简而言之,Cook-Torrance增加了几何项G、Fresnel项、粗糙度项D等信息。利用该模型渲染出的图像真实感有了较大跨度的提升。
Cook-Torrance光照模型渲染效果。它较好地渲染出模型的表面特征和光照效果。
2.5 Oren Nayarh(1994年)
Lambert模型由于是理想环境下的光照模拟,不能正确体现物体(特别是粗糙物体)表面的光照效果。
Oren Nayarh模型对此做出了改进,主要对粗糙表面的物体建模,比如石膏、沙石、陶瓷等。用了一系列的Lambert微平面,考虑了微小平面之间的相互遮挡(shadowing and masking)和互相反射照明。它能一定程度上模拟真实物体的表面粗糙度,使物体更有质感。
左:真实照片,中:Lambert模型效果,右:Oren Nayarh模型效果
2.6 Schlick(1994年)
Schlick模型简化了Phong模型的镜面反射中的指数运算。采用以下公式替代:
它模拟的高光反射效果跟Pow运算基本一致,且效率比Pow运算高。
2.7 GGX(2007年)
GGX模型所解决的问题是,如何将微平面反射模型推广到表面粗糙的
半透明
材质,从而能够模拟类似于毛玻璃的粗糙表面的
透射
效果。同时,它也提出了一种新的微平面分布函数 。
上图:GGX非常逼真地模拟半透明物体的效果。
虽然它提出时被用于半透明物体的模拟,但它作为一种描述微平面法线方向分布的函数,同样适用于渲染表面粗糙的不透明物体。
GGX同样可以非常逼真地模拟不透明物体的效果
GGX已经广泛应用于各种主流游戏引擎中,同时也是效果最好的。
2.8 迪斯尼原则的BRDF(Disney principled BRDF, 2012年)
在SIGGRAPH 2012会议上,工作于迪斯尼动画工作室的Brent Burly演讲了著名的主题:《Physically Based Shading at Disney》。
Brent Burly在SIGGRAPH 2012演讲迪斯尼原则的PBR。
他提出了迪斯尼原则的BRDF(Disney Principled BRDF),奠定了后续游戏行业和电影行业PBR的方向和标准。后续的主流游戏引擎,3D渲染器及动画制作软件大多基于此方案或变种实现的。
迪斯尼原则的PBR渲染出的《无敌破坏王》画面。
迪斯尼原则的BRDF用少量简单易懂的参数和高度完善的美术工作流程,大大简化了此前复杂的PBR的参数和制作流程。它是艺术导向(Art Directable)的着色模型,而不完全是物理正确(Physically Correct)。
迪斯尼原则的BRDF抽象出的参数。
2.9 现阶段的BxDF(2019年)
基于物理的光照模型已经发展了数十年,期间衍生的关键技术和变种技术非常多,它们各有适用场景或解决的各个具体应用场景的问题。
近今年,PBR的技术主要朝着更逼真、更复杂、效能更好的方向,或是结合若干种模型的综合性技术迈进。代表性技术有:
- PBR Diffuse for GGX + Smith (2017)
- MultiScattering Diffuse (2018)
- Layers Material(分层材质)
- Mixed Material(混合材质)
- Mixed BxDF(混合BxDF)
- Advanced Rendering(进阶渲染)
UE4渲染出的虚拟人Siren。综合了分层材质、混合材质、混合BxDF、眼球毛发和皮肤渲染等新兴技术。
虚拟人Siren的皮肤细节。与数码相机摄制的相片如出一辙,逼真程度令人咂舌。如果不特意提醒,很难相信这是游戏引擎实时渲染出来的画面。
3 PBR的应用领域
PBR经过长时间的发展,技术上和渲染的效果突飞猛进,是计算机图形学的下一代渲染技术。它在实时渲染和离线渲染领域都有着非常广泛且深入的应用,主要有:
- 电影和动漫。使用PBR技术渲染的真人电影,拟真电影,以及各类动漫电影数量非常多,比如早些年的《阿凡达》《飞屋环游记》,近期的《战斗天使》《流浪地球》《驯龙高手3》等。
电影《阿凡达》的人物画面。
电影《战斗天使》的画面。主角阿丽塔是计算机通过PBR技术渲染出来的虚拟角色,她与真人演员和真实环境无缝地融合在了一起。
电影《流浪地球》的虚拟场景。特效制作公司利用PBR技术模拟出恐怖的身临其境的画面。
- 实时游戏。PBR的身影流传于PC游戏,在线游戏,移动游戏,主机游戏等游戏细分领域。相信接触过游戏的人大多体验过次世代效果的魅力。
PC网游《逆水寒》的角色次世代效果。
移动游戏《绝地求生·刺激战场》的次世代场景。
单机游戏《极品飞车20》的动感瞬间。
- 计算机辅助设计与制造(CAD/CAM)。计算机图形学刚起步时,便应用于此领域,PBR的引入,更加真实地帮助设计人员设计出与实物相差无几的产品。
电路板设计预渲染效果图。
跑车概念设计效果图。
室内家装设计效果图。
- 计算机辅助教学(CAI)。通过逼真的PBR技术,渲染出教学内容所需的虚拟场景,佐以动画技术,使得教学更加形象生动有趣。
- 虚拟现实(VR/AR/MR)。虚拟技术通常需要佩戴眼镜或头盔等显示设备,较多地用于军事,教学,模拟训练,医学等领域。而VR引入PBR技术,能更逼真地模拟现实世界,让参与者身临其境。
Magic Leap制作的VR概念图。
- 科学计算可视化。气象、地震、天体物理、分子生物学、医学等科学领域采用PBR技术将更真实地模拟自然规律,有助于科学家新发现,有助于高校师生教学。
计算机模拟出的DNA双螺旋结构图。
4 PBR在游戏引擎的应用
迪斯尼自2012年提出迪斯尼原则的PBR理论后,在游戏和电影界引起轰动,随后各大主流游戏引擎和渲染器及建模软件纷纷实现基于斯尼原则的PBR技术。
下面是主流游戏引擎支持迪斯尼原则的PBR时间表:
- Unreal Engine 4:《Real Shading in Unreal Engine 4》,SIGGRAPH 2013
- Unity 5:《Physically Based Shading in Unity》,GDC 2014
- Frostbite(寒霜): 《Moving Frostbite to PBR》,SIGGRAPH 2014
- Cry Engine 3.6:《Physically Based Shading in Cry Engine》,2015
UE4和Unity在算法上的实现略有差别,但本章先不讨论算法的实现问题,主要阐述材质上的参数。
4.1 Unreal Engine 4的PBR
UE4的PBR相对其它迪斯尼原则的PBR实现,在参数方面做了精简,涉及的参数主要有:
- 基础色(Base Color):为材质提供基础纹理色,是Vector3(RGB),它们的值都限定在0~1之间。
利用UE4的材质编辑器处理Base Color。
下表是经过测量后得出的非金属材质的基础色强度(非金属材质只有单色,即强度):
材质(Material) | 基础色强度(BaseColor Intensity) |
木炭(Charcoal) | 0.02 |
新沥青(Fresh asphalt) | 0.02 |
旧沥青(Worn asphalt) | 0.08 |
土壤(Bare soil) | 0.13 |
绿草(Green Grass) | 0.21 |
沙漠沙(desert sand) | 0.36 |
新混泥土(Fresh concrete) | 0.51 |
海洋冰(Ocean Ice) | 0.56 |
鲜雪(Fresh snow) | 0.81 |
下表是经过测量后得出的金属材质的基础色(R, G, B),是在Linear色域空间的值:
材质(Material) | 基础色(BaseColor) |
铁(Iron) | (0.560, 0.570, 0.580) |
银(Silver) | (0.972, 0.960, 0.915) |
铝(Aluminum) | (0.913, 0.921, 0.925) |
金(Gold) | (1.000, 0.766, 0.336) |
铜(Copper) | (0.955, 0.637, 0.538) |
铬(Chromium) | (0.550, 0.556, 0.554) |
镍(Nickel) | (0.660, 0.609, 0.526) |
钛(Titanium) | (0.542, 0.497, 0.449) |
钴(Cobalt) | (0.662, 0.655, 0.634) |
铂(Platinum) | (0.672, 0.637, 0.585) |
- 粗糙度(Roughness):表示材质表面的粗糙程度,值限定在0~1之间。越粗糙材质高光反射越不明显,金属和非金属的粗糙度有所区别。
非金属材质随粗造度从0-1变化而渐变的图
金属材质随粗造度从0-1变化而渐变的图。
- 金属度(Metallic):表示材质像金属的程度,0是电介质(绝缘体),1是金属。金属没有漫反射,只有镜面反射。
金属度从0~1的变化图。
- 镜面度(Specular):表示材质的镜面反射强度,从0(完全无镜面反射)~1(完全镜面反射。UE4的默认值是0.5。万物皆有光泽(镜面反射),对于强漫反射的材质,可通过调节粗糙度,而不应该将镜面度调成0。
镜面度从0~1的变化图。
下表是UE4给出的部分材质镜面度参考值:
材质(Material) | 镜面度(Specular) |
草(Glass) | 0.500 |
塑料(Plastic) | 0.500 |
石英(Quartz) | 0.570 |
冰(Ice) | 0.224 |
水(Water) | 0.255 |
牛奶(Milk) | 0.277 |
皮肤(Skin) | 0.350 |
UE4模拟的部分材质效果见下图。
上排从左到右:木炭、生混凝土、旧沥青;下排从左到右:铜、铁、金、铝、银、镍、钛。
4.2 Unity的PBR
Unity的PBR已经纳入内建的标准着色器(Standard Shader),它的实现准则是用户友好的(user-friendly),故而在材质编辑器里呈现给用户是有限的参数,而且跟传统的各类贴图信息统一在了一起。
Unity内部实现机制遵循了PBR的基本准则,支持金属度,表面粗糙度,能量守恒,菲涅尔反射,表面阴影遮蔽等特性。
Unity的Standard Shader编辑界面。
其中跟PBR相关的参数:
- Albedo:基础色,相当于UE4的Base Color。可用纹理贴图指定,也可用一个颜色值代替。
- Metallic:金属度,意义跟UE4的一致。但它可以用金属贴图代替,此时Smoothness参数会消失。
Unity指定了Metallic贴图后的效果,Smoothness参数消失。
- Smoothness:光滑度,跟UE的粗糙度取值刚好相反,但都是表示材质表面的粗糙程度。Unity的
Smoothness参数从0~1的变化。
- Smoothness Source:指定存储光滑度数据的纹理通道,可选择金属度、镜面贴图的Alpha通道或基础色贴图的Alpha通道。
- Occlusion:遮蔽图。用于指定材质接受间接光(如环境光)的光照强度和反射强度。
Unity中使用遮蔽图为人物阴暗面(脸部,脖子)屏蔽环境光的影响。
- Fresnel:随着物体表面法线与视线的角度增大,物体的反射能力增大,这种现象称之为菲涅尔效应。在Unity中,无法直接调节菲涅尔效应的参数,但内部实现机制会自动处理。越光滑的表面具有越强的菲涅尔效应,相反,越粗糙的表面具有越弱的菲涅尔效应。
上图展示了菲涅尔效应从弱到强的渐变。
- 作者:zuig
- 链接:https://blog.zuig.net//article/pbr_1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。