Radiosity algorithm2. 大 綱
何謂 Shader
Ray-tracing and Radiosty 之比較
Radiosity 演算法
7. Shader Type
Gouraud shading 顯示計算
• v1=40
• v2=20
• d=78.09
•s=(20-40)/78.09
•s=-20/78.09
•s=-0.252876
8. Shader Type
Phong shading 質感
Diffuse
Specular
Glossiness
Ambient
Left : Specular reflection
Right : Diffuse reflection
9. Ray-tracing and Radiosty 之比較
Ray-tracing
最早的 Global Illumination 演算法之一
回溯追蹤螢幕中作用於 3D 模型上每一個像素上的光線
能夠精確說明直接照明的 GI 特性、鏡射效果以及透過透明的材
料的陰影和折射
無法計算反(漫)射光線
10. Ray-tracing and Radiosty 之比較
Radiosity
計算在環境中所有表面上的光強度
不是由銀幕上所看到的角度去計算,無論觀點為何,其結果都相
同
計算完成後能夠即時展示成果
無法計算反光點及透明性物體
16. Radiosity -演算法之優缺點
Advantages:
Photorealistic image quality
Accurate simulation of energy transfer
Soft shadow and diffuse interreflection
Disadvantages:
Large computational and storage costs
Must preprocess polygonal environments
Non-diffuse components of light not represents
18. Radiosity -新趨勢
The Two-Pass Radiosity Solution
非觀點取決:以 Radiosity 演算法計算全域的漫射照明度
觀點取決:以 Ray-tracing 演算法做合成計算全域的反光區亮度
合併 Radiosity 演算法的強度與 Ray-tracing 演算法的資料,可以
更佳精確且有效率的解算光線傳播問題
Notes de l'éditeur Radiosity是目前當紅的RENDER演算法,透過Radiosity演算法,可以計算出非常接近於真實世界的光線質感與空氣(空間)感。
而新一代的即時3D類型遊戲的製作上,也採用以Radiosity演算法取得逼真的光影效果後,藉由Bake Texture的方式,將Radiosity演算法的結果轉印到貼圖之上,可以不增加系統資源消耗的情形下取得更擬真的場景顯示。
因此在此對Radiosity演算法的作用原理,其與Ray-Tracing演算法的不同做一個比較,並說明Radiosity演算法的作用原理。
簡報的內容主要包括:
Shader的說明,這是演算法的基礎,3D世界中所有的物件需先賦予Shader,才能表現出光學質感
兩種演算法的簡介與比較
Radiosity演算法的計算方式與新型態的改良運用
Shader正是種能把難看的線框圖轉變爲您心中所想象的漂亮的3D形象的系統。當您設置了所有的屬性與參數如高光屬性,紋理與凹凸度,shader系統就會工作。它將計算出您給出的表面外觀。
一個3D程式有不同種的Shader,因爲在真實世界裏有數以百萬計的不同表面,它們對光都有不同的反應。一個Shader的任務就是去類比物件於光之間的相互作用,並用最精確的方式把它們展現在觀衆面前。
Shader的作用是指出一個表面上的每一個點是怎樣表現的,它對光會做出什麽樣的反應。有的Shader描繪出光線的散射,有的指出顔色,有的設置凹凸度,其他的則設置透明度。有的shader使一個表面看上去象皮毛,有的讓它閃閃發光。實在是很難把所有Shader加以分類,因爲有許多種做許多不同工作的Shader。
沒有Shader,你只能得到多邊形。
首先也是最簡單的,是被稱爲Constant Shading。在Constant Shading內,程式並不在意面朝向的方向或是光線的亮度,或是其他的任何要素。它僅僅確切的給出一個覆蓋物件表面的顔色。
Constant:球體的Diffuse為白色,被2個光源照亮。Constant Shading完全忽略所有的光源,而是用明確指出的顔色統一對物件進行明暗色調的處理。類似在真實世界中不受光源影響其表現的物件如電視螢幕,火光,太陽,天空,燈泡等。
上圖,只有3個面(2個可見)與光源成角小於90度。其餘的至少有110度,這意味著它們不會收到任何光線。
圖的下部顯示出以輝度爲標準多少光線照射到它們的表面上。與光源成角爲0度的面(前方的面)完全是白的。那個法線爲87度的面近乎黑色,而其他的面完全是黑的。
根據上面的計算法則,Flat Shading每個面都是單獨的著色,每個面的亮度由它們面對光源的角度決定,這種Flat Shader類型適用於具有非常平坦和明確的面的物體如晶體,切割的鑽石。這種類型的明暗色調處理非常簡單。實際上用了很少的數學過程,並且處理非常迅速。
這邊是更加複雜的明暗色調處理類型,Goraud Shader是用一種特殊的明暗色調處理理論,能夠平滑地填滿面的表面,以消除單調的明暗色調處理産生的難看的不真實的圖像。
Phong爲球體上的每個圖元的亮度取樣而不是爲球體上的每個頂點,這樣便使得該型shader更加的複雜,也更加精確。由於對表面大量的取樣處理,使得Phong Shader能夠精確地描述出圍繞物體的光源給出的特別亮光的大小,形狀與位置。這些亮光能被處理成更強,更亮或是更柔和些或是完全的關閉。Phong Shader用到了一種最真實的3D表面的明暗色調處理。所有的3D軟體都使用Phong Shader為基礎。
goraud把重點放在物體的頂點上
Goraud Shading計算每個頂點的角度,把每個與光源角度有關的頂點的角度收集起來。就象上一種與光線相關的頂點朝向的角度決定多少光線照射其上一樣。現在爲了去除單調的面,Goraud Shader調配了頂點之間區域的值並在旁邊的面上將它們平滑的混合起來。
上圖我們看到4個頂點。這4個頂點構成了一個4邊形。在Goraud Shader 計算出每個頂點接收到的光線後,它會賦於每個頂點一個亮度值。
v1=40
v2=20
v3=05
v4=10
得到每個頂點的亮度後,可以求出出每個頂點間的距離用以計算插值。
Goraud shader算出v1距離v2 78.09個單位。爲了在多邊形水平方向上平滑地把v1 40%的亮度與v2 20%亮度混合起來。Goraud Shader用了這麽個簡單的數學公式:s=(v2-v1)/d式中求得的s不斷與v1相加得到每個單位的值,一直加到第78.09個單位,該單位的值等於v2。來看看計算過程:
v1=40
v2=20
d=78.09
s=(20-40)/78.09
s=-20/78.09
s=-0.252876
所以在跨越多邊形的垂直方向的每一級上,將-0.252876與該亮度相加。在78.09級之後亮度將等於20。The Goraud Shader用同樣的方式處理v1-v3,v2-v4,及v3-v4的。下面是明暗色調處理後的多邊形。
Ambient:環境光照明區是一個物體表面不直接受光的區域,也相當於自身照明特性。這個屬性具體指明了一個物體被外界光或是所有光線照亮的程度。若屬性設爲100%,這個物體將會自發的完全被照亮,而不考慮當時有周圍多亮的光線 。
Diffuse:漫射為表面直接受光區域,物體表面將光線反射回攝影機的強度,一個0%漫反射的物體僅吸收所有的光線而不會將任何光線反射到攝像機。一個100%的漫反射的物體將所有照射到其表面的光線反射到照相機。真實世界中這樣物體很少見,因為這個物體的表面會是最純的白色。
Specular:反光度,指的是物體表面直接反射光線的強度,越是光滑的表面,越能垂直反射光線,減少漫射,進而產生明亮且邊緣明確的反光亮點,相反的如橡皮之類的表面,會將光線往雜亂的方向反射,因而沒有亮點或只會產生微弱且不明顯的反光點。
Glossiness:光澤度,決定反光亮點的集中型態,高光澤度的物件通常也有著高反光度,反之亦然。
已知最早的全域照明演算法(Global Illumination)之一稱為光跡追蹤(Ray-tracing)。光跡追蹤演算法瞭解到及使有數以億計的光子在空間中運動, 而能夠進入我們眼睛的光線才是關鍵點。
光跡追蹤演算法透過回溯追蹤螢幕上3D模型的每一個像素上的光線。 以這個方法,我們僅僅計算需要構築這個圖像的資訊。為了建立使用光跡追蹤的圖像,電腦螢幕上的每一個像素都完成了下面的計算:
1. 一束光線從眼睛位置回溯追蹤回,透過銀幕上的像素,直到光線與一個表面相交。我們知道Shader描述表面的回應,但是我們還沒有計算到達那表面的光束數量。
2. 為了計算總照明度, 我們追蹤環境中每一個光源光線的交點(陰影光線)。如果沒有物體阻擋來自光源的光線, 就用那個光源的光強度來計算表面的顏色。
3. 如果一個相交的表面是反射面或透明的, 我們必須也決定透過表面或者在處理反射。 在反射或在透明的情況下,重複步驟 2 直到遇到另一個表面。 爾後交點的顏色回到原始點裡計算。
4. 如果第二個表面也是反射面或透明的,重複光線追蹤的過程,並且直到反覆計算的最大數值,依此類推到達或者與沒有更多表面相交。
由於能夠描述廣泛的照明效果,光跡追蹤演算法非常好用。它能夠精確說明直接照明的GI特性、鏡射效果以及透過透明的材料的陰影和折射。光跡追蹤的主要缺點在於即使是普通複雜的環境中也可能計算的很慢。 因此大部分的軟體都提供有選擇地使用光跡追蹤。
光跡追蹤和掃瞄線(scanline)的共同的缺點是這些技術不能說明GI的一個很重要的特性: 即傳播 - 反射。對於傳統光跡追蹤和 scanline演算法來說,僅有從光源直接到達的光被精確說明。但是在空間中,來自光源的光線不僅到達一個表面,它也從其他表面間接發射到達。如圖,陰影的是全黑的,因為這些區域得不到直接光。然而我們從經驗得知,這些範圍不完全是黑暗,他們從周遭牆和地板收到光線。
在 scanline 和傳統的光跡追蹤演算法中,間接照明通常由以向物體添加一個專用光源來模擬,並且常常要補滿整個空間。 由於這一原因, scanline 和光跡追蹤的圖像經常能夠看來很平,沒有深度。特別是在建築環境的 renderings,它是典型地含有大量漫射表面的環境。
為了提出這個主題,研究者開始尋找計算GI的可用技術,利用熱工程研究。在六十年代早期,工程師發展出模擬物體表面之間的熱輻射傳送,以決定如何完成他們在設計爐子和發動機的應用方法。在八十年代中期,電腦圖學研究者開始研究如何把這些技術應用在模擬光的傳播。
在電腦圖學領域稱呼這個技術為熱輻射(Radiosity),與光跡追蹤在根本上是不同的。 並非在一個螢幕上決定對於每一個像素的顏色,Radiosity計算在環境中所有表面上的光強度。 首先把這些表面細分割成稱為元素的更小的網格表面。 Radiosity演算法計算從每一個網格元素到每個其他網格元素分佈的光的數量。最後各自的Radiosity數值分別儲存在每一個網格元素上。
在Radiosity演算法的早期版本中,光散播在物件上網格元素的數值必須完全計算完成後,其結果才能顯示在銀幕上。這個前置計算過程會耗費大量的時間,即使要的結果並不是景觀。在 1988 年,發展了漸進式修正技術。這個技術能夠展現即時的視覺結果,並進一步提升精確度和視覺品質。1999 年, 發明了稱為推測平緩熱輻射(stochastic relaxation radiosity)-( SRR )的新技術。 SRR演算法是目前商業Radiosity系統的基礎。
雖然Ray-tracing與Radiosity截然不同,兩種演算法有其各自的優缺點,Radiosity與Ray-tracing都不能提供GI一個完全解決方案,而且在很多方面是互補的。
右上:使用 scanline演算算法,以一個固定的光源照明,光線不計算任何陰影,物件表面的Ambient是對比值的結果。
中:採用光跡追蹤的GI演算法,這個圖像表現出典型光線追蹤算法 – 如同鏡子般反射的特性和沒有環境光。由光源產生陰影的銳利邊緣。
左下:保留光跡追蹤的反射特性,並增加精確環境光部分,透過允許光能在環境中再次反射,保有較柔和的陰影。
「radiosity方程式」描述從表面發射的能量的強度,或表面內含能量的總和(如光源),撞擊表面的能量必然從一些其他的表面發散。
由表面「J」發射並撞擊到表面「I」的能量受到兩個衰減因素影響:
在兩個表面「J」與「I」之間的「來源因子」說明表面之間的物理性關係。
表面「I」的反射率,光能撞擊到表面時必然有一定的百分比被吸收。
Bi=表面「I」的熱輻射數值
Ei=表面「I」的發散率
Qi=表面「I」的反射率
Bj=表面「J」與「I」之間的「From Factor」
能量尤其他表面到達此表面的量
此表面發散的能量
此表面反射的能量
form factor描述離開一個表面和到達第二個表面的部分能量,考慮這些表面之間,作為每一個表面中心之間的距離計算,作為每一個表面的正常的法向量和法向量之間到另一個表面的中心從一個表面的中心角度計算的距離, 和他們的在與彼此相關的空間中方向,是一個無法標示數值的量
Nusselt 發展在一個表面和一個點之間允許第二個表面上的簡單和精確的計算的幾何學類似物。
「Nusselt類比」藉由以單位半徑放置一個半球投射物體,放在一個表面上。 在發射物體球形投射出第二個表面, 然後在圓柱形向下投影在半球的基礎,以此為A,除以整個底部B的計算方式。
Hemicube是類似上一個方式,但是採用細分割網格方體作為被投射的基礎,所有被投影的網格都會列入計算,藉由改變離散區的尺寸與數目,可變化運算速度與精確度。
Radiosity 演算法發展了兩個主要的方式,以解算環境中能量的均勻散佈。
全矩陣式Radiosity 演算法計算環境中介於每一隊表面間的「From factor」,構築一系列同時並存的線性方程式,全矩陣式演算法最宗計算出環境中所有表面上的光強度或顏色。
此一方式產生一個完全的解決方案,然而如果環境中表面過於複雜,當超過一萬面時,這些繁複的步驟會導致大量的運算,而一個有上百萬面的場景是常有的事。
Progressive Radiosity 演算法是一個漸進式方法。以低得多的計算和存儲需求狀態產生居中的結果,演算法的需要計算「From factor」每一次反覆都在一個單一表面和所有其他表面上的一個點之間, 而非所有N 矩陣形式。
這種演算法最宗也能產生一如全矩陣式演算法的完整結果,而不同於全矩陣式演算法,漸進式演算法會產生出居中的結果,每一次反覆都會得到更精確的一個結果,而當結果接近我們需求時,可以終止運算,如此可以比前者大幅減少運算與儲存需求。
照片般的畫面品質
精確的模擬能量的傳遞
柔邊陰影與互相影響的表面漫射
大量的計算與儲存需求
必須預先處理為Polygon場景
只能計算漫射光源
A Ray Tracing Algorithm for Progressive Radiosity:
Computing Form Factors by Ray Tracing