文章目录
reference:
LearnOpenGL: PBR
知乎:毛星云.《GPU Gems 3》:真实感皮肤渲染技术总结
知乎:毛星云.【基于物理的渲染(PBR)白皮书】(一) 开篇:PBR核心知识体系总结与概览
0.写在前面
首先呢,由于这部分的一些光学名词大家经常混用,这里我先写下本人的光学名词及其所对应的含义:
(本人高中并未系统的学习过真正的光学,所以这里的名词可能并不严谨,但是用来理解渲染是没问题的)
(同时应该注意,下面的名词仅限于PBR,不适用于经验模型)
- 入射:指接收到的总能量
- 散射:scattring 散射的说法在渲染中本身并不严谨,原则上应当避免使用这个词,有些文章认为是反射+SSS
- 出射:本人更喜欢用出射来代指 reflect + refract
- 反射:reflection 注意PBR中并没有高光反射,漫反射的概念,只有单纯的反射,占入射的一部分
- 折射:refraction 光线进入物体时会发生折射,折射不是光,是一种现象,会改变光路的方向
- 次表面散射:subsurface scattering SSS 光线进入物体内,不断反射折射再从别处出射的部分
- 透射:transmission 进入物体的光,不断反射折射,可能会从另一面出射
自己画了一张图:
另外,由于BRDF模型和BRDF是两码事,仅限本人文章:BRDF特指反射,并不包含无视距离的SSS,同时BSSRDF仅包含SSS的计算
1.PBR
- 基于物理的渲染(Physically Based Rendering)
很显然,这套理论所建立的渲染方法需要基于物理规律来构建:
- 能量守恒
- 微平面表面模型
- 基于物理的BxDF
1.1 能量守恒
非常容易理解,光照不能凭空产生,其来自于光源,并且受制于光源(不能超过光源)
这在具体渲染中的应用便是:
- 物体的亮度 <= 入射光的亮度
一些要点:
- 进入物体的光在会被吸收一部分,行进的越远吸收的越多
- 反射光并不会损失能量,因此反射光仅受反射比例的影响
1.2 微平面表面模型
- 微平面(Microfacet)表面模型,任何表面都是由细小的平面构成
(GL中说是镜面,不这么认为,因为会有折射进入物体的部分,因此并不是完全镜面,其应该想说是平面)
所有的PBR技术都基于微平面理论。这项理论认为,达到微观尺度之后任何平面都可以用被称为微平面的细小平面来进行描绘。这些微平面的排列规整度可以用粗糙度来描述:
因此,不同粗糙度的表面收到光照时,其对于光照的反射会有不同的效果:
- 光滑的表面,其反射光线会更加规则,会形成清晰的轮廓(越光滑越接近光源形状)
- 粗糙的表面,其反射光会更加随机,结果就是更大更模糊的光斑
(注意这里的光滑并不是指微平面的光滑程度,而是指微平面的排列规则程度)
1.3 基于物理的BxDF
下面这些是本人的文章链接:
2.各种DF的具体关系到底如何
各个DF的具体含义
- BRDF :反射光 / 入射光 (不管别人的文章怎么样,我为了避免歧义,BRDF仅负责反射部分)
- BSSRDF :SSS / 入射光 (仅负责计算SSS部分)
- BTDF :透射光 / 入射光
- BSDF :(反射 + 散射)/ 入射
(以上所有的函数都 < 1;这是因为还有被吸收掉的光)
2.1 BSDF = BRDF + BSSRDF
BSDF模型实际上想描述的是一束光在射到物体上时,所有的光的去向
根据上面的公式很容易得出,下面的图更助于理解
注意:
- 这并不是一张好的解释图,而是容易误导人的图,我认为在PBR中使用漫反射,高光反射这样的词是不负责任的
- 图里的Diffuse Reflection,实际上是指SSS,也就是BSSRDF负责的部分,且没有考虑出射距离问题
- Specular实际上是反射部分,即BRDF部分
具体进入反射多少光,收到物体的反射率,入射角度和观察角度的影响,具体就是大名鼎鼎的菲涅尔公式
(想了解的去看上面我贴的BRDF的文章)
2.2 BRDF和BSSRDF的关系
实际上根据我上面的描述,非常好分清两者的关系,但是实际上各自文章都会出现不同的混淆:
- 将 (BSSRDF+BRDF) 理解为BRDF
在大部分讲BRDF的内容中,由于其并不涉及BSSRDF,因此都会做省略,而后来人对其的关系就搞混了,实际上大家所谓的BRDF模型应是 Cook-Torrance BRDF模型,其包含了完整光照
因为Cook-Torrance BRDF是用来描述低散射系数的物质,次表面散射的强度非常低,同时其散射出的光线距离入射点非常近,在一个像素内,因此计算中,并不用考虑BSSRDF的问题,直接使用经验模型的漫反射计算 - 将将 (BSSRDF+BRDF) 理解为BSSRDF
一样的道理,只不过这些出现在讲BSSRDF的内容中,(你应该注意到SSSSS中有混合这一步骤,显然这是在 BSSRDF+BRDF,很多人并不严谨,使用一个完整的光照结果去和BSSRDF混合,实际上应单独混合高光部分)