基本信息,Reyes架構的設計目標,Reyes渲染流程,基本Reyes渲染管線工序,Reyes渲染器,
基本信息
該架構是80年代中期由盧卡斯影業的計算機圖形研究小組成員艾德文·卡特姆、洛倫·卡彭特和羅伯特·庫克所開發的,那個研究小組最後發展成了今天的皮克斯。該架構最早使用於1982年的科幻片《星際迷航2:可汗之怒》中的創世片段。皮克斯的PRMan是Reyes算法的一個實現。
根據最初描述該算法的論文,Reyes渲染系統是一個用於複雜圖像的快速高質量渲染的“架構”,論文中指出Reyes包括一系列算法和數據處理系統,不過本詞條中的“算法”和“架構”是同義的。
Reyes是Renders Everything You Ever Saw(渲染你曾見到的任何物體)的首字母縮寫,這個名字也是盧卡斯影業以前所在地——加州Reyes海角的名字,因此Reyes是雙關語,它還暗指和光學影像系統有關的過程。根據羅伯特·庫克的說法,Reyes的正確寫法是首字母大寫,其餘小寫,和1987年庫克/卡彭特/卡特姆的SIGGRAPH論文中一樣。
Reyes架構的設計目標
Reyes架構的設計遵從以下目標:
- 複雜著色:場景的複雜度通常由光線和物體表面的相互作用產生。通常,在計算機圖形學裡,這是通過使用紋理來表現的,紋理可以是一組像素,用於描述表面位移(置換)、透明度或反射率等。Reyes允許用戶用電腦程式來描述表面結構和光學互作用,而不是簡單的數據查詢表,並和可程式著色器結合。算法的一個重要目標是減少處理器從存儲器中讀取紋理的時間。
- 避免光線追蹤:Reyes架構提出的時候,計算機的處理能力和存儲量都很有限,意味著使用光線追蹤需要耗費幾萬小時才能渲染完一個圖像,Reyes算法避免使用光線追蹤,因此渲染快的多,並且圖像也非常逼真。
- 速度:(單個計算機)一年能渲染完成一部每秒24幀的兩小時影片,即平均每幀只需要渲染3分鐘。
- 圖像質量:任何圖像,若帶有無用的、因算法導致的缺陷,都是不可接受的。
- 靈活性:該架構必須足夠靈活,在引入新技術時,不需把算法完全重寫。
Reyes渲染流程
Reyes渲染流程
Reyes算法通過把參數曲面分割成微多邊形(micropolygon)——小於一個像素的四邊形,來渲染光滑曲面。雖然要精確逼近曲面需要很多微多邊形,不過他們可以簡單並行的進行處理。Reyes渲染器對高級的幾何圖形進行細分時,會根據需要來進行,它只需要剛好細分到使圖形在最終圖像中看起來光滑的程度。
然後,一個著色系統給微多邊形的每個頂點賦予一個顏色和透明度,許多Reyes渲染器允許用戶使用著色語言編寫任意的燈光和紋理函式。微多邊形可以在一個大的格線里進行處理,因此可以進行並行向量處理。
基本Reyes渲染管線工序
- Bound,計算幾何圖形的邊界。
- Split,把大的圖形分割為更小的圖形。
- Dice,把圖形轉換成微多邊形格線,每個大概一個像素大小。
- Shade,計算每個微多邊形格線頂點的燈光和顏色。
- Bust,把格線炸開成單個的微多邊形,對每個計算邊界並判斷是否可見。
- Hide,對微多邊形進行採樣,並生成最後的平面圖像。
在這個設計中,渲染器必須把整個圖像快取在記憶體中,因為必須把所有的圖形都處理完成以後才能輸出最終圖像。一般在dice步驟之前會進行一步叫bucketing的常見記憶體最佳化,這一步中,輸出圖像被分割成若干指定大小的小塊,通常每一塊是16x16像素大小,之後,場景中的物體沿著每小塊的大致邊緣按照位置分割到不同的塊里,然後每個小塊分別進行處理,處理下一小塊之前會先丟棄上一個小塊的數據。如此只有當前的小塊區域裡的圖形被載入到記憶體里,通常的情況下,這種處理能比未修改的Reyes算法顯著的減少記憶體的使用。
Reyes渲染器
以下渲染器使用了Reyes算法,或者用戶可以根據需要選擇使用Reyes算法: