1 我们是如何看到物体颜色的

unity光照界面 在哪里_unity

2 BRDF光照模型

当光线从某个方向照射到一个表面时,有多少光线被反射?反射的方向有哪些?而 BRDF(Bidirectional Reflectance DistributionFunction)就是用来回答这些问题的。

当给定模型表面上的一个点时,BRDF 包含了对该点外观的完整的描述。在图形学中,BRDF 大多使用一个数学公式来表示,并且提供了一些参数来调整材质属性。

通俗来讲,当给定入射光线的方向和辐照度后,BRDF 可以给出在某个出射方向上的光照能量分布。

本章涉及的 BRDF 都是对真实场景进行理想化和简化后的模型,也就是说,它们并不能真实地反映物体和光线之间的交互,这些光照模型被称为是经验模型。尽管如此,这些经验模型仍然在实时渲染领域被应用了多年。
计算机图形学的第一定律:如果它看起来是对的,那么它就是对的。

3 标准光照模型

在1975年,著名学者裴祥风(Bui Tuong Phong)提出了标准光照模型背后的基本理念。标准光照模型只关心直接光照 (direct light),也就是那些直接从光源发射出来照射到物体表面后,经过物体表面的一次反射直接进入摄像机的光线。
它的基本方法是,把进入到摄像机内的光线分为 4个部分,每个部分使用一种方法来计算它的贡献度。这4个部分是。

自发光(emissive)部分,本书使用Cmishe来表示。这个部分用于描述当给定一个方向时一个表面本身会向该方向发射多少辐射量。需要注意的是,如果没有使用全局光照(globalillumination)技术,这些自发光的表面并不会真的照亮周围的物体,而是它本身看起来更亮了而已。

高光反射(specular)部分,本书使用cspecular来表示。这个部分用于描述当光线从光源照射到模型表面时,该表面会在完全镜面反射方向散射多少辐射量。

unity光照界面 在哪里_unity光照界面 在哪里_02

漫反射(diffuse)部分,本书使用 cdise来表示。这个部分用于描述,当光线从光源照射到模型表面时,该表面会向每个方向散射多少辐射量。环境光(ambient)部分,本书使用cambiem来表示。它用于描述其他所有的间接光照。

漫反射光照符合兰伯特定律(Lambert’s law):反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比。

环境光(ambient)部分 :本书使用cambiem来表示。它用于描述其他所有的间接光照。在标准光照模型中,我们使用了一种被称为环境光的部分来近似模拟间接光照,是一个全局变量被共用。

标准光照模型有很多局限性。首先,有很多重要的物理现象无法用 Blinn-Phong 模型表现出来,例如菲涅耳反射(Fresnelreflection)。其次,Blinn-Phong模型是各项同性(isotropic)的,也就是说,当我们固定视角和光源方向旋转这个表面时,反射不会发生任何改变。但有些表面是具有各向异性(anisotropic)反射性质的,例如拉丝金属、毛发等。

5 逐像素 or 逐顶点

上面,我们给出了基本光照模型使用的数学公式,那么我们在哪里计算这些光照模型呢?通常来讲,我们有两种选择:在片元着色器中计算,也被称为逐像素光照(per-pixel lighting);

在顶点着色器中计算,也被称为逐顶点光照(per-vertex lighting)。在逐像素光照中,我们会以每个像素为基础,得到它的法线(可以是对顶点法线插值得到的,也可以是从法线纹理中采样得到的),然后进行光照模型的计算。这种在面片之间对顶点法线进行插值的技术被称为Phong着色(Phong shading),也被称为Phong插值或法线插值着色技术。这不同于我们之前讲到的Phong 光照模型。

与之相对的是逐顶点光照,也被称为高洛德着色 (Gouraud shading)。在逐顶点光照中,我们在每个顶点上计算光照,然后会在渲染图元内部进行线性插值,最后输出成像素颜色。由于顶点数目往往远小于像素数目,因此逐顶点光照的计算量往往要小于逐像素光照。

但是,由于逐顶点光照依赖于线性插值来得到像素光照,因此,当光照模型中有非线性的计算(例如计算高光反射时)时,逐顶点光照就会出问题。