光照與霧化
標準光照模型是局部模型中的一種----即當處理一個物體時,不考慮其他物體的影響。物體也不向別的物體投下影子,實際上,物體自身無法生成影子,影子是使用全局光照模型生成的。
色彩的數學
計算機中的色彩常用RGB色彩模型表示,這里R表示紅,G表示綠,B表示藍,其精度因平臺與渲染狀態而異。我們視RGB為0至1間的值,并且也不考慮其中各分量到底占用多少二進制位。在計算機圖形學中,色彩常被視為數學實體。我們用黑體的小寫羅馬字母表示色彩符號,如c,與向量符號相同,但由于二者上下文不同,所以不會混淆。
可以認為色彩存在于一個3D單位立方體"色彩空間"中,如圖15.7所示:

黑、白兩色十分重要,分別由RGB(0, 0, 0)和(1, 1,
1)表示,并且用特殊的符號0、1分別標識,灰色都在黑白色之間的那條連線上。
色彩可以加、減、乘以標量,和向量運算一樣。兩個色彩也可以作"按位乘"運算,運算記作
。
色彩運算有時會使一個或多個RGB分量超出[0, 1]的界限(比如,計算光照時,出現極強的光亮),此時簡單地加以截斷。根據情況,也許在計算中每一步都進行截斷,也許中間允許超界,而在最后截斷。
如果只有一個分量超界,截斷運算可能會引起色彩混亂。比如,色彩(1, 2, 1)其實是(0.5,
1, 0.5)的一個更亮的表示,類似某種綠色。簡單地加以截斷后,綠色消失只剩余白色。更聰明的辦法是除以最大色彩值以單位化。此例中,均除以最大分量值2。當然,開始時就防止越界(比如,調整光強以使越界不發生)才是最好的辦法。
光源
為進行渲染,必須向圖形API描述場景中的光。下面是一個光源類型的簡單列表:
點光源,平行光,聚光燈,環境光。
我們將討論大多數渲染API都支持的常見光源。
點光源是向四面八方發射光線的單點,又稱全向光或球狀光。點光源有方向和色彩,此色彩同時表示色調與亮度,點光源還有一個輻射衰減半徑,控制照亮的范圍。圖15.8展示了3DS如何表示點光源。

光強通常由光源中心向輻射前進方向不斷衰減,最終為0。點光源可代表許多常見發光物,如燈泡、電燈、火把等。
平行光是從無限遠處射來的點光源的光線,場景中所有光線皆為平行的。平行光源沒有位置的概念,也無衰減。太陽是平行光的典型代表(目前還不考慮太陽的位置來渲染場景)。
聚光燈指從特定光源向特定方向射出的光,比如信號燈、車頭燈等。它們有位置、方向、甚至還有輻射距離的概念,其照亮區域為圓錐形或金字塔形。
圓形聚光燈有一個圓形的"底",其寬度由輻射衰減角給出(注意與輻射衰減距離的區別)。并且,有一個描述高亮區的內角度,如圖15.9:

方形聚光燈形成金字塔形狀,而不是圓錐形。方形聚光燈非常有趣,因為常被用來投影圖像,比如電影放映。
最后,環境光指不屬于任何光源而照亮整個場景的光。不考慮環境光,則物體的影子將完全是黑的,因為它們不被任何光源照亮。現實中,這類物體常被間接照亮,環境光是積累這種間接光照最根本的方法。
標準光照方程----概述
光照方程定義了標準光照模型,用于計算單個像素的色彩。標準方程可簡寫為公式15.7:
Clit = Cspec + Cdiff
+ Camb
公式15.7 標準光照方程
其中,
(1)Clit是打開光照情況下計算顏色值的結果,這與關閉光照(注意:相當于用最強光照照射)情況下計算的結果不同。和我們日常生活中的"光照"一詞不同,計算機圖形學中的"光照"是指取關閉光照情況下的紋理顏色值進行計算,一般情況下得到的結果比原紋理顏色值暗。
(2)Cspec是鏡面反射分量。
(3)Cdiff是散射分量。
(4)Camb是環境分量。
物體外觀主要取決于以下四點因素:
(1)物體表面的性質,即材質屬性。
(2)表面的方位與朝向,朝向常用單位法向量表示。
(3)照射來的各光源性質。
(4)觀察者位置。
方程中的三個組成部分,分別考慮了上述因子的不同組合。