使用灯光、着色、透视可以让物体更逼真。
——Jhon Constable
Ground着色模型是在1971年发明的。Phong的镜面高光是1975年左右发明的。Blinn和Newell大约在1976年提出在物体表面使用贴图。这些技术是固定渲染管线的一部分,这些算法曾一度加速了图形学的发展。可编程的着色器的出现大大加速了很多的可能,现在的GPU可以计算任意的着色模型。这就从之前的“什么是可能的?”转变为“使用什么方法是最优的?”
了解一些和渲染相关的物理和心理学原理对于研究这些课题是很重要的。前一小节介绍了如何控制流水线的技术以及他们背后的基本理论。本节将会介绍渲染的一些科学基础。辐射理论讲会被第一个介绍,因为他是光的物理传播的核心领域。我们能够感知颜色纯属心理现象。这个将在颜色学里面讨论。一个着色模型包含两个部分:光源+有材质的模型。我们有一节会着重介绍有很多的中的变换可能。最后一部分会介绍实现着色模型的高效实现。
本节的所有的可能都是建立在一个基础的假设上。所有的光源都是从一个方向照射物体表面,对于区域光、间接光、环境光都没有考虑进去。第8章将会介绍更普遍的照明系统。
7.1 辐射学
第5章在介绍着色器模型的时候,粗略的介绍了辐射学理论。本章将会更深入的研究辐射学,并介绍一些新的特点。
辐射学主要用来度量电磁的辐射。这类的辐射包含一些光子,光子会根据情况的不同,而表现出粒子或者波的两种特性。仅仅使用光子的粒子特性能够应对很大的一部分的需求。虽然有些物理现象如果没有考虑光子的波特性的话就不能够建模,但是,早期的甚至是高质量的批处理渲染都忽略了这一点。
光子和波特性相关的属性不能够被丢弃,因为每个光子都有相关的频率和波长。这是很重要的一个属性,因为每个光子的能量和它的频率是成正比的,这个会影响光子和其他物体的交互。最重要的是,光子的波特性会影响很多的传感器,比如我们人眼睛的视杆和视锥。不同频率的光子如果被我们感知的话,就代表了不同颜色的光,当然也有没有被感知的光,这些都已经超出了人眼的极限。光子的波长λ(单位米),和频率ν(赫兹),以及能量Q(焦耳)之间的关系如下:
这里的c是光速((2.998×108 米/秒),h是Planck常数(6.62620 × 10−34 焦耳秒)。
电磁辐射会有一个频率和能量的范围。从ELF(低频率极限)辐射波到gamma射线。光在的波长在380到780纳米之间是可以被人类感知的,所以只有在这个范围的可见光子,才会被渲染。图7.1展示了可见的光谱。光子的能量和频率是成正比的。越绿的光子能量越高,越红的光子能量越低。
本节我们将讨论多种辐射单元和他们的之间的关系。他们的单元在表格7.1中列出:
图7.1
表7.1
在辐射学中,基本单元能量单元或者是辐射能量Q,是用焦耳度量的,简写为J。每个光子都有辐射能量,正如我们看到的,和他的频率成正比。比如,如果光子的波长是550纳米,通过公式7.1,计算得到它的能量为2.77*10的18方焦耳。
一个光源的辐射流量或者是辐射能量,用字母Φ 或者P表示,等于每秒发出的焦耳数量(dQ/dt)。瓦特W是每秒焦耳数的另外一个术语。原则上,衡量一个光源的辐射流量,是通过累加每秒释放的光子的能量来的得到。比如,一个电灯泡可能释放100瓦特的辐射量。看图7.2。
在第五章中简要的介绍了辐射度,它是辐射流量的密度,也就是(dΦ/dA)。辐射度的定义是和表面相关的,这个表面是空间虚拟的表面,最通常用的是物体的表面。在下一节的光学中,相应的照明量度是计算每平方米的光。
在之前的介绍中,辐射度E用来计算光流入一个表面,M用来表示流出物体的表面的量。通常的术语辐射流量密度有时候指代的是这两个,也就是辐射度以及出射度。第5章展示了如何使用辐射度计算理想平行光的照明度。这类的光源对于这类情况,如和灯的距离远远大于渲染的场景,这是个很好的近似。如上图的一堆玩具是在放假的另外一侧。灯泡的辐射度EL(用和光线垂直的平面计算)这个值近似等于常量(在这个例子中,在可见的辐射区域,每平方米的0.3瓦特)。
对于较近的光源(或者较大的场景),EL是不能是常量的。想象一个以灯泡为中心的球体,如7.2图的右上方所示,这个灯泡很小,我们假设所有的光线都是从中心点发射出来的。我们想计算一个特定方向(比如7.2图右上方的橙色箭头)的光源辐射是多少,我们构建一个较窄的圆柱体,它的轴是沿着橙色箭头的方向,它的顶是在灯泡的中心。让这个圆锥体和球体的相交,产生了一系列的切面,他们的面积也和距离灯光的距离的平方成正比。由于辐射流量穿过一个切面是相同的,所以辐射度会递减:
公式7.2中的系数是常量,他不会随着距离的变化而变化。
I,称为密度或者角度辐射度密度。如果距离r等于1,这个密度等于辐射度,换句话说,辐射密度等于在弥合的半径为1的球体表面的辐射量。半径为1的球体区域,可以用弧度来定义。一个角度从某种意义来说是一系列的方向。而弧的大小,等于和闭合的半径为1的圆相交的弧长。一个固定的角度是三维的——连续的方向集合,用立体弧度来衡量(简写为sr),它的定义为半径为1的球体的相交面的大小。固定的角度用符号ω表示。从现在开始,我们看到密度实际上是和角度相关的,也就是dΦ/dω,和辐射度不同的是,这个是和区域相关的辐射密度。密度是表示每立体角度的瓦特量。
固定角度的概念不太好理解,这里有一个类比可以有助理解。固定角度和朝向的关系一样,每个表面区域都有表面的位置。区域就是这些地点的集合,而固定角度又是方向的集合。
大多数的灯光源对所有的方向释放的能量不是都一样的。图7.2的灯泡在不同的方向上释放的强度是不同的,这个可以通过左上角图的箭头密度来观察到。右上角的图可以看到灯泡向某个角度释放的强度是15瓦特每立体角。
在二维的情况下,2π弧度可以覆盖整个的单位圆。把这个扩展到三维的情况,4π立体角可以覆盖整个的单位球体。单位立体角的固定角度可以从图7.3查看。
在之前的几个图中,我们假设光源可以视为点。凡是能被近似为点的光源的叫做点光源。就好像平行光对于场景来说在很远地方,那么平行光就是很有用的抽象。而如果光源很小,与此同时光源又很远,那么此时可以视为点光源。平行光的抽象在于和场景的距离,而点光源的抽闲在于光源本身的大小。强度对于点光源来说能有效表示在不同方向能量变化。正如我们看到的,辐射度的大小与和点光源的距离平方成反比。什么时候使用这个近似是合理的呢?朗博在1760年提出5个规则。如果与光源的距离是光源宽度的五倍或者更多,那么这个强度的递减和距离的平方成反比的定律是合理的近似。
在第5.4节,眼睛或者摄像机是传感器,所以他们对于渲染来说很重要。我们计算渲染方程的目的是沿着这个射线计算辐射度(从渲染物体的表面的顶点到摄像机)。辐射度测量的是单一一个射线的照明情况——这个就是区域和固定角度相关的流体密度,如图7.4所示。辐射度单位是每平米每立体角的瓦特数,公式如下:
分母中的dAproj,指的射线的dA投射到正交平面的量。
dA和dAproj的关系可以从图7.4看出。这个投射和θ的cosine相关,此角度是物体表面法线和射线的夹角。
这个cos(θ)上划线,在page8中定义了,如果cos(θ)小于0,则返回0。什么情况下会小于0呢?当投射的方向在物体表面的后面,在这种情况下投射区域为0。
和两个量相关的密度很难可视化。
Eproj指的是和射线垂直的面。
在图7.5的左边展示的离开灯泡的射线拥有辐射度L。
7.3 颜色学
可见光的范围在380到780纳米之间。光发射到每个方向上,都会包含一些列的光子,光子的分布和波长相关。这个分布被称为光谱。如图7.7。
人类可以识别大约1千万种不同的颜色。对于颜色认知,眼睛会有三个不同类型的接收雷达。每个接收器能接收到的波长是不同的。对于特定的光谱,大脑都会从三个接收器接收不同的信号。这就是为什么我们只需要三个数字就可以简单的表示任意的可见光谱。
是哪三个数字呢。CIE提出了一些标准的测量颜色的条件,并使用这些条件做了颜色匹配实验。在颜色匹配中,三个不同颜色的灯被投射到白色的屏幕上,所以他们的颜色会会叠加起来称为一个整体的颜色。这个整体的颜色会有一个特定的波长。观察者可以改变三个颜色的灯,可以通过把手把颜色在-1到1之间做调整,直到测试的颜色匹配。负数权重也是需要的,像这类的权重意味着和权重相反的颜色被叠加上去了。一些灯的测试结果,所谓的rgb在图7.8中展示。每个颜色分类代表不同的波长,如r的波长为645纳米,g的波长为526纳米,b的波长为444纳米。
这些曲线为我们提供了一个方法就是把光谱三个对应的值。给定一个光的波长,那么三个颜色的设置就可以从图中读取出来,然后通过调整按钮,设置灯光的条件,就可把对应的光展示在屏幕上。给定任意一个光谱,这些曲线可以和光谱进行相乘,然后在曲线底下的区域代表了和提供的颜色所匹配的大小。完全不同的光谱可以得到三个不同的权重,换句话说,他们对于观察者来说是相同。匹配光谱称为原色。
Rgb三个分量不能代表所有的颜色,因为他们的颜色匹配曲线对于很多波长来说都有负权重。Cie提出三个不同的更高层的抽象光源,他们不是单调的光源。这些颜色匹配曲线用如下符号表示。他们的光谱在图7.9所示。颜色匹配函数为 y(λ) i。事实上。。。。