鑒析
RenderMan兼容渲染器其高超的渲染質量和及其快速的渲染能力而被廣泛套用在高端運動圖像的生產製作過程中,在當今的動畫電影和影視特效等高端領域,RenderMan兼容渲染器是必不可少的一個渲染解決方案(另一個高端解決方案是著名的MentalRay渲染器),世界上許多著名製作公司像ILM和Sony等都使用它作為作為渲染的最終解決方案之一。
目前最普及的RenderMan是3Delight因為3Delight的開放性和用戶口群的龐大,3Delight已經成為RenderMan電影級別渲染器的主流。
支持系統
3delight支持Maya、Houdini、XSI、Massive、Naiad、
Nuke,不久3Delight將會支持MAX,這樣符合renderman規範的3delight渲染器將會支持全系列3維軟體。
RenderMan規範
RenderMan規範,簡稱RISpec,是一個開放的
應用程式接口(API),由
皮克斯開發,用於描述
三維模型並把它轉換成逼真的數字圖像。RenderMan規範作為建模程式和渲染程式之間的通信協定(或稱為接口),用於生成逼真的數字圖像。規範類似於
PostScript,不過是用來描述三維場景而非二維頁面布局。因此,理解RenderMan接口的建模軟體,可以輸出場景數據到符合規範的渲染器(以下簡稱RenderMan渲染器),而無需關心後者使用什麼
算法來
渲染出圖像。
RenderMan規範最初發布於1988年,版本號為3.0,3.1版發布於1989年,並在1995年進行了修訂,2000年7月,規範發布3.2版。規範的當前版本是3.2.1版,發布於2005年11月。後來的事實證明了規範的前瞻性,規範在多年之後也無需過多改動就能引入新技術。
RenderMan規範和當時的其他標準的不同之處在於它允許使用高級的幾何圖元,比如
二次曲面或雙三次曲面來表示圖形,而非依賴於建模程式事先生成多邊形逼近模型,規範的另一個創新之處是引入著色語言。
RenderMan和
OpenGL有很多相同之處,雖然兩個
API是針對不同的用戶(OpenGL用於實時硬體輔助渲染,而RenderMan規範則用於逼真圖像的離線渲染),兩個API都是基於棧的
狀態機機制直接渲染出幾何圖形。
RenderMan接口規範內容
RenderMan渲染接口,主要包括兩大部分,第一部分是RenderMan Interface,定義了著色計算所必須的一些基本數據類型,和RenderMan接口位元組流協定(RenderMan Interface Bytestream Protocol),簡寫為RIB,rib也是RenderMan場景描述檔案的擴展名;規範的第二部分,是RenderMan著色語言,RenderMan Shading Language,簡稱RSL,使用RenderMan著色語言編寫的源程式,其原始碼檔案擴展名通常是sl。
RenderMan接口
RenderMan接口,定義了一些基本的數據類型,以規範的
C語言實現為例,規範把C語言的short、int、float、char數據類型,分別映射至其RtBoolean、RtInt、RtFloat和*RtToken類型,另外,規範還定義了RtColor、RtPoint、RtVector、RtMatrix等特定於圖形學著色計算必要的數據類型。
規範的圖形狀態(graphics state),包括了渲染一個模型所需的全部信息,RenderMan接口的命令,要么改變圖形狀態,要么渲染一個模型。圖形狀態又分為兩部分,其一是全局狀態,在渲染一幅圖像或序列中的一幀時,保持不變;其二是當前狀態,針對不同待渲染的模型,可以發生改變。全局狀態中的參數,稱為選項(Options);當前狀態中的參數,稱為屬性(Attributes)。選項包括相機和顯示(指輸出像素的)參數,還有其他影響渲染質量的參數;屬性包括控制模型外觀和材質的參數(比如顏色、透明度、著色模型等),還有模型的位置、朝向和細分程度等參數。
RenderMan著色語言(RSL)
RenderMan規範引入了RenderMan著色語言,使三維場景的外觀不只用很少的參數來描述,而是允許使用類似C語言的程式來編寫任意複雜的著色函式,通常稱之為程式紋理和
著色器(shader)。光照以及表面置換也是可程式的,能用著色語言編程來修改。RSL允許每個語句以
單指令流多數據流的方式執行,但不強制使用此方式。另一個使RenderMan渲染器區別於許多其他渲染器的功能是它允許輸出著色函數裡的任意信息,不管是表面法線、單獨的燈光通道還是什麼別的信息,都可以使用RenderMan渲染器輸出到單獨的通道里。
一個RSL編寫的著色器,可以用於任何符合RenderMan渲染規範的RenderMan渲染器,比如皮克斯的PRMan、DNA Research的3Delight,以及開源的
Pixie和Aqsis。
RSL可以編寫獨立的函式和RenderMan渲染規範定義的五種類型的著色器:surface,light,volume,imager和displacement著色器。