Reyes渲染架構

Reyes 渲染架構,是三維計算機圖形學的一個軟件架構,用於渲染照片一樣真實的圖像。該架構是 80 年代中期由盧卡斯影業的計算機圖形研究小組成員艾德文·卡特姆洛倫·卡彭特羅伯特·庫克所開發的,那個研究小組最後發展成了今天的皮克斯[1] 該架構最早使用於 1982 年的科幻片《星際迷航 2:可汗之怒》中的創世片段。皮克斯的 PRMan 是 Reyes 算法的一個實現。

根據最初描述該算法的論文,Reyes 渲染系統是一個用於複雜圖像的快速高質量渲染的「架構」,論文中指出 Reyes 包括一系列算法和數據處理系統,不過本詞條中的「算法」和「架構」是同義的。

ReyesRenders Everything You Ever Saw(渲染你曾見到的任何物體)的首字母縮寫,這也是盧卡斯影業以前所在地——加州雷耶斯角的名字,因此 Reyes 是雙關語,它還暗指和光學影像系統有關的過程。根據羅伯特·庫克的說法,Reyes 的正確寫法是首字母大寫,其餘小寫,和 1987 年庫克/卡彭特/卡特姆的 SIGGRAPH 論文中一樣。

Reyes 架構的設計目標

編輯

Reyes 架構的設計遵從以下目標:

  • 模型複雜性和多樣性:為了產生複雜和樣式豐富的圖像,渲染系統的用戶必須能通過分形粒子系統等,經由編寫程序生成大量複雜的幾何結構。
  • 複雜着色:場景的複雜度通常由光線和物體表面的相互作用產生。通常,在計算機圖形學裏,這是通過使用紋理來表現的,紋理可以是一組像素,用於描述表面位移(置換)、透明度或反射率等。Reyes 允許用戶用電腦程式來描述表面結構和光學互作用,而不是簡單的數據查詢表,並和可程式着色器結合。算法的一個重要目標是減少處理器從存儲器中讀取紋理的時間。
  • 避免光線追蹤:Reyes 架構提出的時候,計算機的處理能力和存儲量都很有限,意味着使用光線追蹤需要耗費幾萬小時才能渲染完一個圖像,Reyes 算法避免使用光線追蹤,因此渲染快的多,並且圖像也非常逼真。
  • 速度:(單個計算機)一年能渲染完成一部每秒 24 幀的兩小時影片,即平均每幀只需要渲染 3 分鐘。
  • 圖像質量:任何圖像,若帶有無用的、因算法導致的缺陷,都是不可接受的。
  • 靈活性:該架構必須足夠靈活,在引入新技術時,不需把算法完全重寫。

Reyes 算法能很高效的渲染一些電影畫面要求的必不可少的效果:光滑的曲面、表面紋理、運動模糊景深

Reyes 渲染流程

編輯

Reyes 渲染流程

Reyes 算法通過把參數曲面分割成微多邊形(micropolygon)——小於一個像素的四邊形,來渲染光滑曲面。雖然要精確逼近曲面需要很多微多邊形,不過他們可以簡單並行的進行處理。Reyes 渲染器對高級的幾何圖形進行細分時,會根據需要來進行,它只需要剛好細分到使圖形在最終圖像中看起來光滑的程度。

然後,一個着色系統給微多邊形的每個頂點賦予一個顏色和透明度,許多 Reyes 渲染器允許用戶使用着色語言編寫任意的燈光和紋理函數。微多邊形可以在一個大的網格里進行處理,因此可以進行並行向量處理。

經過着色的微多邊形在屏幕空間進行採樣,以生成輸出圖像。Reyes 引入了一個開創性的隱面判別算法或者叫 hider,算法對運動模糊和景深進行必要的整合,而無需比未加模糊的渲染使用更高的模型和着色採樣數。hider 通過一種稱為隨機採樣蒙特卡洛方法收集一定時間和鏡頭位置內每個像素里微多邊形的顏色。

基本 Reyes 渲染管線工序

編輯
  1. Bound,計算幾何圖形的邊界。
  2. Split,把大的圖形分割為更小的圖形。
  3. Dice,把圖形轉換成微多邊形網格,每個大概一個像素大小。
  4. Shade,計算每個微多邊形網格頂點的燈光和顏色。
  5. Bust,把網格炸開成單個的微多邊形,對每個計算邊界並判斷是否可見。
  6. Hide,對微多邊形進行採樣,並生成最後的平面圖像。

在這個設計中,渲染器必須把整個圖像緩存在內存中,因為必須把所有的圖形都處理完成以後才能輸出最終圖像。一般在dice步驟之前會進行一步叫 bucketing 的常見內存優化,這一步中,輸出圖像被分割成若干指定大小的小塊,通常每一塊是 16x16 像素大小,之後,場景中的物體沿着每小塊的大致邊緣按照位置分割到不同的塊里,然後每個小塊分別進行處理,處理下一小塊之前會先丟棄上一個小塊的數據。如此只有當前的小塊區域裏的圖形被加載到內存里,通常的情況下,這種處理能比未修改的 Reyes 算法顯著的減少內存的使用。

Reyes 渲染器

編輯

以下渲染器使用了 Reyes 算法,或者用戶可以根據需要選擇使用 Reyes 算法:

參考資料

編輯