在图形学中,凡是说到全局光照、照片级效果之类都会扯一扯BRDF(双向反射分布函数)。如果你去查看那些介绍,无不是一堆几何图形外加莫名其妙的微分方程,最后化简得到一个抽象方程。那最后这个方程就是BRDF?通过这个方程就可以得到照片级效果?当然——不可能!!
要理解一项事物,最好的着手点就是查阅他的过去,这句话对人对事均是可行的。BRDF其实是多学科交叉下的产物。
起源
虽然我们在讨论图形学的东西,但BRDF确实不是由计算机图形学中诞生的。毕竟这门学科太年轻,还是一门交叉学科。计算机图形学的目的很杂,不像物理数学那样以探究物质起源为目标,但追求虚拟真实应该是个主流目标。既然追求真实,那何为真实?如何定义真实?这个问题扯远了能扯到哲学上去。作为一名理科生,不敢扯哲学,只能扯哲学的蛋——物理。物理学在多个维度探究我们这个世界,为各种现象建立理论,生成数学模型,留下了大量的经验。
为了解释这个世界的真实性,大部分可以遵循光学的理论,与之相关的还有人体视觉。早在1760年,Lambert先生就开创了光度量学的先河。然后结合人眼视觉体系的研究,到现在,差不多人人都知道,我们能看见这个世界,都是因为光的原因。
既然要创造虚拟真实,最快的方法当然是将“真实”的物理模型移植到计算机中去啦。那首先遇到的问题就是,光到达了某物的表面,反射什么样的光到我们眼睛才叫真实呢?
1965年,Fred Nicodemus在论文 Directional reflectance and emissivity of an opaque surface
中从几何学角度提出了BRDF,全称为 Bidirectional Reflectance Distribution Function
。该函数描述了入射光在非透明物体表面如何进行反射。换句话说,BRDF函数是特定反射方向的光强与入射光强的比例。后来人又从物理角度添加了诸如能量守恒、满足交换率等特征,但其本质没变。
这儿要提醒一下,BRDF只是一个概念,来说明入射光强与反射光强之间存在关系,具体什么关系是没有明确的。所以,你单看着BRDF这个概念是没法做计算的,要做计算,要生成合适的图像,得制定一个具体的BRDF函数。
定义
了解了BRDF为什么出现,它的出现是为了解决什么问题后,我们可以讨论下它的具体定义了。
通过物体表面的材质特性来展现其光反射的特征,这样是最符合真实的机制。而BRDF就是通过数学物理模拟提出的一种描述光线与物体表面之间的反射机制。
从光强和辐射度两个角度都可以推导出BRDF,略去推导过程,最终形式为:
该式表明r方向的反射光强(分子)与i方向的入射光强(分母)存在一个f的关系。至于具体什么关系,就要靠大家去找了。是不是感觉很坑爹,说了半天好像啥都没说一样。如果想直接用这个公式,确实无处下手。但这个公式明确了一件事情,那就是入射光的方向与光强与反射光的方向与光强是有关系的,达到真实是有条件有方法的。你要是随便弄个常量(比如lambert漫反射体)就说这是真实的,别人也好以不符合BRDF来反驳你,是吧。
除了满足几何特征,BRDF还需满足几项物理特征:
- 光路可逆性:就是你提出的BRDF函数,将入射光与反射光方向反过来,函数仍然相等,即 f(i->r) = f(r->i)。
- 能量守恒:入射光到达物体表面后会有吸收、反射、折射三种情况,所以单一光线下,反射光强 < 入射光强。
分类
知晓了BRDF的定义,大家应该明白,光有个概念是不能用的。所以,各类前辈提出了各种符合BRDF的反射(光照)模型,大体可以分为三类:
- 经验模型(empirical models):通过实验观察经验来模拟物体表面外观,计算量小
- 物理模型(physical-based models):依靠物体表面材质的几何与光学特征来描述反射系数
- 数据驱动模型(data-driven models):依靠实际测量的数据来表示反射系数
这里简要介绍这三种分类,以及其中的代表。
经验模型,顾名思义,就是依靠人们的观察、实验和直觉来找到物体表面展现出来的规律,从而构造出的反射模型。这类模型忽略物体材质真实属性,仅提供粗糙近似值,不遵守物理定律,所以运算速度快,在当前计算机效能有限的情况下运用最为广泛。常见的就有 Lambertain、Phong、Blinn-Phong、Fast Phong等模型。Phong模型简单描述即为 反射光 = 漫反射光 + 环境光 + 高光。虽然这个模型不符合上面那条“光路可逆性”,但看在运算效率和勉强能看的效果的份上,它成为了当前应用最广的模型。其具体的数学描述就请参阅其他资料,这里不再赘述。
物理模型当然严格建立科学知识上。这类模型融合物体材质的各种几何学光学属性来尽可能的展现真实世界的材质表现。由于这个世界不存在理想漫反射体和绝对光滑体,所以,通过microfacet理论,基于统计学的随机microfacet方向分布,最终展现物体表面的粗糙度。然后就是各路大神费劲脑汁,运用数学,提出了各种符合物理的模型(也不是完全符合)。常见常用的有 Cook-Torrance、Ward、Oran-Nayar 等模型。当然还有更多新模型,其效果可能更好。但总的来说,物理模型对计算量的要求太高了,高到难以大规模应用于商业领域。
数据驱动模型其实是个很简单的模型,怎么做呢?使用专业仪器去测量物体材质的BRDF值。简单粗暴但也有用。当然,其局限性也很明显,世间万物,你能测完?而且那些幻想材质怎么测?当然,有人仍在孜孜不倦的做这项工作,并建立数据库。
实现
总结
- BRDF起源于物理学,可从光学或辐射能量推导出来
- BRDF只是个概念,描述了入射光强与反射光强之间存在关系
- BRDF具体模型可分为三类:经验模型、物理模型、数据模型
- 当前业界用的最多的是经验模型(Blinn-Phong),只因效率高,效果能看
- 物理模型没能广泛应用与商业,只因效率低
参考
- 《Ray Tracing from the Ground Up》
- 《Realistic Ray Tracing》
- 《Physically Based Rendering:From Theory To Implementation Second Edition》
- 《Advanced Global Illumination 2ed》
- 《GPU编程与CG语言之阳春白雪下里巴人》
- < Directional Reflectance and Emissivity of an Opaque Surface >
- < Experimental Analysis of BRDF Models >
- < An Introduction to BRDF-Based Lighting >
- < An Overview of BRDF Models >
- BRDF Wiki
- BRDF讲义