教程名稱:反射的奧秘--Philipp Zaufel關於3D中反射的理論概述
使用軟件:適用所有3D軟件
教程介紹:介紹了3D中反射的基本理論
原教程地址:http://www.the123d.com/tutorial/general3/reflections01.shtml
由於此篇理論性較強,本人水平實在有限,難免有許多疏漏和錯誤,還請大家指出。下麵開始。
01.概述
CGI技術是一門非常年輕而且發展迅速的科學。其它相關的還有許多技術也在很短的時間內迅速的壯大,用於模擬自然現象,但它們隻限於解決某一方麵的問題,對我們來說選擇合適的技術來解決相應的問題比較困難。出於人們認識光與物質相互作用的方式,一些主要的技術脫穎而出,這其中最常用的是工作於物體表麵的技術,另外就是CGI技術的到來。它的原理是向場景裏發射光線來收集必要的信息,重建真實自然現象的一個關鍵問題是需要大量的信息。假設在我們所處的環境裏,包括看不見的地方,有大量帶有能量的光線穿過,它們在場景中哪怕是最狹小的地方以某種方式相互作用,這些光線的能量以不連續的形式存在(愛因斯坦光子說)。物體表麵的原子會吸收光子使自已的能級升高,受到激發的不穩定原子會自發的地回到最低能級,並將減少的那部分能量以光子的形式釋放出來,這些光子根據發射它原子的種類有特定的波長。打個比方吧,太陽光包含很多不同波長的電磁波,但這裏麵隻有一小部分能被我們的眼睛所識別。人造光源一般都有特定的顏色,因為它們含有各自特定的元素。一個典型的鎢極光源發出的光有一定的頻率範圍,這就是我們看到的橙色。同樣,氖光源發出的光是綠色。
自然界的這種吸收和發出光能的現象無時無刻不在我們的身邊出現。我們的眼睛扮演著攝像機的角色,收集和識別從四麵八方射過來的光線的波長(顏色)和光子數量(強度)。我們看到的圖像正是在空間的某一點處眾多光線的靜止狀態。前麵的內容僅僅從物理學的角度粗略的介紹了一下,但這樣就足夠了,我們沒有必要考慮更深一層的物理知識。這些內容足已解釋我們看到的真實世界,今後的學習製作過程也足夠用了。
02.用CGI技術重現生活中的例子
前麵說過每個原子都會吸收和發射光線,物體的顏色決定於反射光線的波長和物質原子的種類。入射光線反射後向四麵八方散射,但要根據入射光線方向反射(否則反射也不會進行),也許多物體不會直接在表麵反射光線,像氣體。光線會在大多數物質裏傳播,並被物質內部的原子吸收和反射掉。像下圖中的蠟球,這種蠟物質吸收除了綠色和黃色之外的所有波長的光線(至少除黃綠色外的絕大多數光線),然後像大多數物體一樣作為綠光的發射物體(除了黑洞之外)。你們可以看到當蠟球靠近光源後它顯現出黃綠色。
你們當中很多人可能都知道,在過去的幾年中出現的很多光線跟蹤渲染器都能模擬在“電腦產生的表麵內部散射光線”,也叫做SSS(Sub Surface scattering)。很多渲染器都使用相似的原理,像GI中的采樣方式,在某一點發射多條光線到場景中,這些光線經反射後攜帶了物體表麵的顏色信息,以此來確采樣點的顏色,典型的例子-Monte Carlo。不同的渲染器在保證圖像質量不變的前提下有不同的縮短渲染時間的方式,因為有大量的光線信息需要收集。這之中有簡單的采樣點插值算法過濾器;也有智能化的能識別物體邊緣尖銳部分的高級插值算法過濾器,它能在需要的地方放置合適的采樣點;還有適用於動畫的采樣引擎。聽起來這些算法都很高深,其實我們隻要知道我們的工作是要找到合適的方法對付巨長的渲染時間就行了。我在95到96年第一次接觸3D軟件的時候試著用一個光源照亮一個鏡麵屬性的球體,但失敗了。當我用手電照射整個臥室的時候,臥室會有一點亮光,但在3D中除了聚光燈的圓錐範圍內其它的地方一片黑暗。我想,為什麼會這樣呢?後來我知道了,因為所有的物體都是反光體,我們平時看到光大多數光線都是反射光線。
朋友們你們是否知道,Blinn和Phong這些表麵Saders是怎樣工作的嗎?固有色,高光到底是什麼呢?在很長的一段時間裏,我隻知道怎樣使用它們,怎樣用它們達到預期的效果,但我從不知道它們真正代表著什麼。
上麵提到過,所有的物體都會吸收和發出光線。一個全反射材質,也就是反射全部光線的材質,像表麵鍍了金屬的玻璃,它表麵的每一個點都包含了環境的信息。當光線在物體表麵反射後一部分光線被吸收,反射光線變弱且被“染色”。因此過渡色就是物體表麵除吸收的那一部分的帶有表麵顏色的反射光線。在現實中絕大多數表麵都會有一定程度的粗糙度,我不是說肉眼可以看到的凹凸不平,而是微觀上的表麵粗糙。不同的Saders能夠快速有效地模擬表麵的粗糙方式。高光就是反射最多,光線聚集最強烈的那一部分表麵產生的。地過渡色區域也會有小麵積的高光,但隨著表麵和光源的距離拉大高光也漸漸地變的不明顯了。這樣的高光在現實世界並不存在,這是因為現實世界不存在3D軟件中的理想光源(點光源和麵光源)。現實世界中的光源總會有一定的形狀,這樣高光區會表現有一定的細節而且可以看到光源的形態。參考下圖中的皮革,射到高光區的光線來自窗外的陽光,可以看到真實表麵的細節是很複雜的。可以說高光區隻是過渡色區域中反射較強的表麵。像這樣的反光表麵隻用一個簡單的Sader是不可能實現的,我們必需用真正的光源來模擬窗外的光線。或許還要用反射模糊來模擬過渡色區域的光線散射,用一點過濾色模擬表麵吸收不同的光線產生的顏色。這可能就是這幾年來HDRI如此流行的緣故吧。HDRI不僅可以產生高質量的間接照明,還可以用渲染出真實的反射和高光區的精彩細節。
這是一幅勺子的照片,主光來自上方。勺子的中心有非常強烈的高光,有趣的是周圍還有一圈圈的刮痕。每一圈刮痕可以看成在它邊緣處反光的圓柱形凸痕。光線在它們之間反射,這樣反射光線在某個方向上散射開來,也就是CGI裏所謂反射的各向異性。
在這張圖片中我們看到主光在高光區的中心形成一個十字。像打磨過的金屬和毛發這類物質常發生這種現象,而且針對這種高光已經有不同的Shaders算法了。我要指出的是這些算法都必需能快速的產生各向異性的高光。如果想渲染出正確的高光就必需用真實的物體,或者至少用凹凸貼圖模擬刮痕(這個Shaders用在CGI毛發上一點意義都沒有,因為這種現象是由許多許多細小的圓柱體產生的)。我隻發現在使用不透明貼圖的時候這種Shaders才管用。
光線還可以表現出另一種特性。當光線與表麵的夾角很小的時候光線趨向於在表麵反射,但當光線跟表麵接近垂直時趨向於穿透表麵介質。這也是一種很重要的特性,叫做Fresnel(菲涅耳效應)光學纖維這種物質常發生這種現象。許多渲染器都支持這個特效。下麵的圖我們能很清楚地看到這個效應,在角度很小的情下況液晶屏反射很強烈,但垂直看時大多光線都穿過了塑料殼而被黑色的LCD吸收了。幾乎所有的材質都或多或少的表現出這種特性,特別是透明物體(幾乎所有的物體都是“透明”的,隻不過這取決於物體原子吸收光線的多少罷了)。
好,我想到現在為止我已向你們介紹了光線的反射原理。我希望你們能在這裏學到一些有用的東西。下麵的是一些焦散(Caustics)和散射(Dispersion)的圖片。還有一張圖片,上麵是一個物體和陰影,我想告訴你們的是這個透明物體的陰影和我的手一樣也是不透明的,這是初學者對透明物體使用光線跟蹤陰影時常犯的一個毛病。
如果你們有問題的話盡管問吧。請睜大眼睛隨時留心你的身邊,發覺周圍不經意的小事,有時它也是美麗的。作為一個藝術家這樣有助於提高你技術方麵的理解。
未完
請關注反射的奧秘之二