renermanri接口ri在三維影視制作中的應(yīng)用_第1頁
renermanri接口ri在三維影視制作中的應(yīng)用_第2頁
renermanri接口ri在三維影視制作中的應(yīng)用_第3頁
renermanri接口ri在三維影視制作中的應(yīng)用_第4頁
renermanri接口ri在三維影視制作中的應(yīng)用_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

renermanri接口ri在三維影視制作中的應(yīng)用

1d軟件中圖像元素的運(yùn)用renderman是一個渲染器。將生成并輸出的場景文件(如maxa、3dmax、fastmagexsi、lightwave3d等)生成并生成高精度圖像。經(jīng)過幾年的發(fā)展,RenderMan對三維場景的描述已經(jīng)成為了工業(yè)標(biāo)準(zhǔn)。RI(RenderManInterface)是RenderMan渲染器的渲染接口,是渲染工作的起點(diǎn)。首先,RI是一個場景描述的方法:一個用來表述物體、場景、燈光和攝像機(jī)等圖像的組成元素的方式。RICBind的用戶用C++語言寫一段代碼,并且編譯運(yùn)行它來描述場景,RI有自己的函數(shù)庫。這些函數(shù)有的指明物體的顏色和位置,有的控制攝像機(jī)視角或者控制燈光,基本覆蓋了場景描述所需要的各個方面。然而,RI還有更簡便的表達(dá)方式——RIB協(xié)議。RIB(RenderManInterfaceBytestream)協(xié)議將消息貯存在可閱讀、可修改的.rib文件中,使用更加開放和靈活。幾乎所有將商業(yè)的3D軟件與RenderMan結(jié)合的程序均采用RIB的方式。這種.rib文件中使用了更加簡潔的語法,它的語句更類似簡單的腳本語言,而且不用包含頭文件,不用調(diào)用庫文件。渲染器把.rib文件的文件名作為輸入?yún)?shù)進(jìn)行渲染。其實(shí),RenderMan真正的優(yōu)勢更體現(xiàn)在它的著色上,而不僅僅是對物體的幾何外形的描述。通常,一個場景中的物體具有簡單的、規(guī)則的幾何形體,但是給它貼上不同的紋理(木紋或者大理石)就會產(chǎn)生截然不同的視覺效果。RI提供了非常高的靈活性來控制物體表面的材質(zhì)和紋理。RenderMan定義了一種特殊的程序語言來描述光源如何發(fā)光,物體表面如何反射或者傳遞光能,周圍環(huán)境對光的影響等等,這種語言叫SL——ShadingLanguage(著色語言)。通過著色語言編寫的程序在渲染時候告訴計算機(jī)需要著色的位置,攝像機(jī)視角以及時間等。RI會在渲染期間“告訴”渲染器它使用了由SL編寫的一段代碼。2維協(xié)同軟件制作有很多事情是RenderMan完成不了的。首先,RenderMan不是一個建模工具。幾乎所有將商業(yè)的3D軟件(如Maya、3DsMAX、SoftimageXSI、Lightwave3D等)與RenderMan結(jié)合的程序均采用RIB的方式,可以輸出.rib文件供RenderMan渲染。將消息貯存在可保留、可閱讀、可修改的.rib文件中,使用更加開放和靈活。另外,有一些第三方軟件專門支持使用三維軟件制作的模型到RenderMan的轉(zhuǎn)換。比如:AnimalLogic公司的Mayaman專門支持從Maya的場景中導(dǎo)出模型、動畫、燈光、材質(zhì)、貼圖等,再導(dǎo)入到RenderMan中進(jìn)行渲染。類似的還有Maxman、Softman、Lightman等等。3prman算法在RenderMan的思想下產(chǎn)生了PhotoRealisticRenderMan(下文稱PRMan)、BlueMoonRenderingTools(下稱BMRT)和Entropy等渲染器。PRMan被視為RenderMan的正宗。PRMan使用的只是最原始的掃描線算法,而不支持光線跟蹤,但支持其它的大部分算法。BMRT是RenderMan大師LarryGritz自己開發(fā)的渲染器,是免費(fèi)的渲染器。它支持光線跟蹤,也支持GI(GlobalIllumination全局照明),而且效果可以媲美PRMan,但渲染起來非常慢。Entropy是BMRT的收費(fèi)版,速度比BMRT快很多,但使用不方便,要配合Mayaman、Maxman等第三方軟件來使用。下面以PRMan為例介紹一下渲染機(jī)制。圖2是PRMan的整個渲染過程。其它兩個渲染器類似。MTOR是RenderMan在Maya中的插件,作用是將Maya生成的模型轉(zhuǎn)化成RIB,再交給Alfred進(jìn)行網(wǎng)絡(luò)分配。Alfred是RenderMan的網(wǎng)絡(luò)模塊,用于管理網(wǎng)絡(luò)任務(wù)?;贑S模型,利用TCP/IP協(xié)議,實(shí)現(xiàn)了分布式渲染。Slim是負(fù)責(zé)材質(zhì)的模塊,它既支持RSL程序生成Shader,又有一些常用的模板,供使用者直接使用。它將材質(zhì)以.sl或者.slo的文件形式與.rib文件一起傳給PRMan。PRMan收到.rib文件后,有一個RIB解釋器專門將.rib文件分塊解讀,根據(jù)不同任務(wù)而調(diào)用不同的函數(shù)。然后會有一段代碼判斷要渲染的物體是否出現(xiàn)在屏幕內(nèi),如果不是,就直接丟棄。然后進(jìn)行著色,根據(jù).rib文件中指定的材質(zhì)紋理進(jìn)行合成。最后按照制定的文件格式采樣濾波,最終輸出圖像。4基于scysman.sclo的文件ShadingLanguage是一種用來描述shader表現(xiàn)各種效果的類C的語言描述,它可以按照用戶的意志來描述shader的表現(xiàn)。比如用戶需要實(shí)現(xiàn)一種新的、軟件里沒有的視覺效果,一種方法是用ShadingLanguage來描述,編譯之后讓RenderMan使用,就好像你“告訴”RenderMan應(yīng)該怎么樣渲染一樣??匆粋€簡單的例子:surfacemyconsant(){Oi=Os;Ci=Cs;}將記錄上述語句的文件命名為sconstant.sl,在命令行方式用PRMan帶有的編譯程序shader.exe編譯過后,會生成一個名為myconstant.slo的目標(biāo)文件,并可以被.rib文件引用。編寫shader,由RSL寫出的.sl文件要編譯成低級的目標(biāo)文件才能使用。不同的渲染器有各自的目標(biāo)文件和編譯程序,分別是:BMRT的.slc和slc.exeEntropy的.sle和sle.exe目標(biāo)文件生成后,放在RIB默認(rèn)或指定的目錄中,供渲染器調(diào)配。5rib的生成首先編寫RIB是溝通建模和渲染兩大系統(tǒng)的橋梁。RIB包含了模型,燈光,材質(zhì),攝象機(jī),渲染的精度和分辨率,輸出格式等信息。只要這些信息是通過RenderMan標(biāo)準(zhǔn)的“語言”寫出,也就是說不論人們是在Maya,Softimage還是Lightwave里建模和動畫,只要用合適的工具生成RIB,渲染器都能看得懂——RIB是一種協(xié)議。簡單的RIB甚至可以直接用寫字板完成。#tube.ribProjection″perspective″″fov″40WorldBeginTranslate005Rotate-120100Color100Cylinder1-11360WorldEnd這個.rib文件描述了含有一個半徑為1,高為2的紅色圓筒的場景。這個場景的原點(diǎn)距離攝像機(jī)(即視點(diǎn))5個單位長度,并且坐標(biāo)系有逆時針繞X軸120度的旋轉(zhuǎn)(如圖3)。WorldBegin和WorldEnd是一對標(biāo)識語句,表示一個場景世界描述的開始和結(jié)束。6“新型”生成模塊RIB只是實(shí)現(xiàn)RenderMan接口的途徑之一,與之相對的是程序接口RICBind,就是直接調(diào)用RenderMan的庫函數(shù)。大多數(shù)情況下RIB是能夠應(yīng)付的,但如果用RIB描述主角身上的毛發(fā),每一根都是一根曲線,在WorldBegin和WorldEnd之間可能有上GB的數(shù)據(jù),而且每幀如此。這時程序接口就必需了。程序接口是針對特定需求開發(fā)的,所以基本上沒有靈活性。程序接口進(jìn)行渲染有兩種方式:通過RIBGenerator和通過ProceduralPrimitiveDSOs(DynamicSharedObjects)。RIBGenerator是生成.rib文件的模塊,它從Maya中讀取模型信息,翻譯成RIB。而后面這種DSO(類似與WindowsNT系統(tǒng)中的DLL)只在需要用到幾何體信息的時候才動態(tài)生成,而且生成時是在內(nèi)存里進(jìn)行,硬盤里的.rib文件不存在任何物體信息,只有動態(tài)調(diào)用的命令以及傳遞到DSO里的參數(shù)(如幾何物體的復(fù)雜程度),所以效率比RIBGenerator高很多倍。當(dāng)然,在增加對機(jī)器性能的要求(CPU處理能力、內(nèi)存大小等指標(biāo))的同時,這種動態(tài)調(diào)用的DSO不支持分布式渲染。目前,RenderMan對Maya的支持是通過一個叫MTOR的模塊來完成的。MTOR的任務(wù)就是把Maya中的場景數(shù)據(jù)轉(zhuǎn)成.rib文件,包括一些簡單的材質(zhì)的轉(zhuǎn)換。但是有些模塊比較特殊,比如Maya的毛發(fā)系統(tǒng)。RenderMan對它的支持基本上只是停留于非常底層的轉(zhuǎn)化,它的轉(zhuǎn)換核心所給出的功能太少太局限,而且執(zhí)行效率也存在很大的問題。RenderMan對Maya毛發(fā)系統(tǒng)的接口由一系列基類和繼承類組成。其核心模塊是furBase類。根據(jù)不同需求有3個子類:mtorFur,mtorFuzz和mtorUltraFur。mtorFur和mtorFuzz都是RenderMan生成獨(dú)立于Maya的毛發(fā).rib文件,毛發(fā)貼附在Maya建立的模型上面共同渲染。但是這兩種由RenderMan生成的毛發(fā)不能進(jìn)行動畫設(shè)置,也就是說毛發(fā)是不會動的。另外可以由Maya生成毛發(fā)模型及其動畫存成中間文件(ass,hair,sbs,shadow等四種文件),由mtorUltraFur模塊使用MEL(Maya嵌入語言)語句檢查指定文件夾中是否存在這些文件,并讀取這些文件來渲染。這個過程不生成.rib文件,因為它使用的是動態(tài)生成函數(shù)。下面是在場景RIB中有關(guān)毛發(fā)描述的段落:Procedural″DynamicLoad″[″plugins/mtorFurProcedural.dll″.....]可見調(diào)用了一個叫mtorFurProcedural的模塊,指定要讀取的文件名,傳入一些參數(shù),并沒有生成毛發(fā)RIB數(shù)據(jù)。目前mtorUltraFur存在幾個問題:一、生成的毛發(fā)生硬。因為mtorUltraFur完全讀取Maya生成的毛發(fā)數(shù)據(jù),甚至材質(zhì),不需要SL的支持,而Maya的毛發(fā)模塊缺少了材質(zhì)部分,所有毛發(fā)都是Lambert的材質(zhì),所以mtorUltraFur生成的毛發(fā)沒有反射、高光等光影變化。二、動態(tài)調(diào)用的方法不能進(jìn)行網(wǎng)絡(luò)渲染。這就限制了網(wǎng)絡(luò)資源的使用,增加了渲染的時間以及成本。所以,mtorUltraFur模塊不能用于商業(yè)開發(fā)?;谇懊鎯蓚€模塊的RIB生成器,再結(jié)合mtorUltraFur的功能,我們提出了一個新的myUltraFur模塊。在Maya中制作好含有毛發(fā)的場景,存成多種毛發(fā)文件。.ass文件定義了FurDescription的相關(guān)名字和幾何體名字。具體毛發(fā)相關(guān)的信息都定義在.hair文件里。至于.sbs文件,里面全是整個場景內(nèi)容的定義,包括攝像機(jī)位置、燈光、幾何體的頂點(diǎn)、CV等等。而.shadow文件中存放毛發(fā)相互間陰影的信息。然后myUltraFur模塊通過MEL語句與Maya進(jìn)行通信。if(!(lazyEvaluate&&fileExists(ss.str()))){charcmd;sprintf(cmd,″mtorgeomgetInfo%s-uvs-pts-normals-tangents-samples%d%d%f-seed%d-trim-tofile\″%s\″″,objName.cstr(),furInU,furInV,furPlacementJitter,furJitterSeed,ss.str());stringerrorString;constRIBContextResult*result=c->ExecuteHostCmd(cmd,errorString);if(result->ResultType()!=RIBContextResult∷kString){c->ReportError(RIBContext∷reError,″mtorUltraFur:unexpectedreturntypeonmtorgeomgetInfo(%s)″,errorString.cstr());return-1;}}else{c->ReportError(RIBContext∷reInfo,″mtorUltraFur:lazyon%s

″,fileName.cstr());}其中″mtorgeomgetInfoObjectName-uvs-pts-normals-tangents-samplesfurInUfurInVfurPlacementJitter-seedfurJitterSeed-trim-tofile″FileName″″這條命令使mtor從中間文件(ass,hair,sbs,shadow等四種文件)中取得Maya中物體采樣信息。另外,還有″getAttrObjectName.worldInverseMatrix″這條命令獲得從世界坐標(biāo)到物體坐標(biāo)的變換矩陣。″getAttrObjectName.boundingBoxMin″這條命令獲得綁定框。這些命令把一些主要參數(shù)和世界轉(zhuǎn)物體的矩陣等信息通過命令行方式傳到模塊里,然后將這些命令返回的數(shù)據(jù)通過解釋器解釋成成員變量,最后調(diào)用RIBGen()輸出到RIB里。目前,國外有一個第三方軟件:Shave&aHairCut。它有RIB輸出的模塊,有自己定義的RIB格式,能較好地解決mtorUltraFur的動態(tài)調(diào)用問題。而且,它的特點(diǎn)是毛發(fā)易于梳理,動態(tài)效果非常逼真,但是,這個軟件的毛發(fā)材質(zhì)仍使用Maya材質(zhì),因此用RenderMan渲染沒有光影效果。7基于mtor膜的rib生

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論