2009年5月9日 星期六

(10)利用SLBox出AOV(Arbitrary Output Variables)

一直很喜歡一首歌---華仔的"下次不敢",也是電影童夢奇緣的主題曲
每隔一段時間聽,都會有不同感受,在進入本篇主題前,先分享一下歌詞囉~

劉德華--下次不敢

歌手:劉德華 | 作曲:Peter Kam
填詞:劉德華 | 編曲:馮翰銘

繞了一圈 又過了一環
犯錯以後才後悔會不會太晚
就算認錯 就算你說下一次 我不敢

*失去容易 啊 回頭真難
 日子再壞也必需要走完
 啊 在生活中 每一個人
 應該有對自己最誠實的那份勇敢

 朋友啊 雖然哭泣常常讓人太難堪
 其實眼淚也有溫暖
 流過淚的你才能慢慢成長
 有傷心才會懂得有心歡*

#啊 抓緊時間 把你感情的帳單
 好好去認認真真 一一的清還
 為身邊每個人 請不要再怠慢
 讓愛火一再點燃 從今我不想
 再聽你說 下一次我不敢#

REPEAT*##


------------本篇開始 XD------------

承接上一篇....這篇是透過介紹如何利用SLBox來出matte為例,來介紹如何出AOV。

◎接續上一篇....另外再新增一個Ensemble,接一個Delux,然後在Delux裡新增一個Diffuse及SLBox,並將Duffuse的顏色調成黃色。preview可以看到如下圖~~~全白 XD。是因為SLBox的 result=(1,1,1); 將Diffuse蓋掉了。






















◎將SLBox改成 result=0;即可看到黃色color的Diffuse效果。






















◎接著....來出matte吧。matte的pass在合成時可是非常非常非常重要的!!!
在SLBox裡先新增一個type為color的變數,將其顏色調成紅色。
接著在Primvars輸入
output varying color matte_test;
接著在SL code欄位裡加入
extern color matte_test;
matte_test=v1;






















◎在上一篇的SLBox裡,一樣新增一個type為color的變數(v6),然後跟上一段一樣,
Primvars輸入
output varying color matte_test;
SL code欄位裡加入
extern color matte_test;
matte_test=v6;






















◎在maya的scene裡,為了方便觀察,建置兩顆交疊的sphere。然後將slim裡的兩個ensemble分別assign給這兩個sphere。

















◎接著在RAT的RenderMan Globals裡->Display->Channel,按下New來新增一個pass,並在channel欄位裡打上color matte_test(跟SLBox宣告的pass變數名稱一樣)。





















◎然後在Secondary裡,按New,然後在Name欄位裡將名稱改成matteTest(所render出的pass檔按名稱)





















◎按下在下方的Channels旁的Add,在選單中選擇剛剛在Display->Channel輸入的color matte_test。(這裡也再加選float a的話,matte_test這個pass裡會有alpha channel)





















◎在Primary的Display Server,將it改成tiff,也就是將檔案render成*.tiff。





















◎按下render後,即可在project下的rmanpix裡看到render的圖以及拆出來的pass。












◎用shake開啟(或其他合成軟體),即可看到拆出的pass的物件顏色,為剛剛在SLBox裡assign給matte_test的顏色。













◎如果是用RMS的話,只用在RenderMan Globals的Passes tab裡,output -> Create Output -> Custom,然後輸入color matte_test,即可出pass。






















如果想在*.sl裡,寫RSL來出aov的話,是用如下寫法:
surface ooxx(output varying color matte_test = 0;
)
{
matte_test = color(1,0,0);
}
(呃....有程式基礎的,應該看的出這段想表答什麼吧)


呼~不知不覺也累積到10篇了,但也自以為有系統的將RenderMan以及slim的network做了點初步的介紹。覺得達成一個整數後,就會失去動力....XD 疏漏之處....還希望有人指正囉~也謝謝賞識這些小小筆記的人! ^_____^
接下來....會想寫點實際的應用吧~不過還沒想好也還沒去想要怎麼有系統的寫....(劣根性阿....orz)

2009年5月8日 星期五

(9)簡單介紹SLBox

前一篇介紹了點RenderMan Shading Language,是在介紹這slim裡的SLBox鋪點路。SLBox是slim裡可以寫RSL code的地方,基本上跟寫RenderMan Shading Language是一樣的,只是SLBox是將最後RSL呈現的結果用一個叫作"result"的內建變數包起來,下面就來簡單介紹一下如何使用type為color的SLBox囉!

◎照先前介紹的方式,先在slim裡新增一個Ensemble,再接一個Delux,並在Delux裡新增一個v1。

















◎從Colors -> Utility -> SLBox來新增一個type為color的SLBox。


















◎可以從底下的SL code欄位裡,看到預設的result為(1,1,1),也就是全白。






















◎將其接到Delux的v1上,可以看到Delux的preview也是全白。






















◎在Parameter欄位,可以從下拉的選單中,看到有幾種type的變數。選擇所需要的type後,按下旁邊的+號,即可新增此種type的變數。






















◎先在Parameter選擇color,按下+號;再選擇float,然後再按一次+號,即可新增兩個type分別為color和float的變數(v1和v2)。





















◎新增一個Imagefile node,將其接到SLBox的v1上。
















◎在SLBox裡,將 result=(1,1,1); 改成 result=v1;






















◎preview即可看到Imagefile裡的貼圖。


















◎接著按下v2旁的方塊->float->Pattern->Noise。可以將v2連到一個type為float的Noise node。

















◎將noise的frequence調成8,然後在SL code裡改成 result=v1*v2; preview即可看到noise對剛才的貼圖產生了作用。






















◎如果希望這個shader會隨著燈光而有明暗變化以及反射的話,就先新增兩個type為color的變數。在變數名稱上點兩下,即可更改變數名稱。這裡是分別改成diff與spec。然後從shading component新增一個Diffuse和Specular,分別將其接到SLBox的diff以及spec上。






















◎把SL code改成 result=v1*v2*diff; 即可看到除了剛才的noise外,也有了和diffuse一樣的明暗變化。






















◎再把變數spec加上去,即可做出如specular的反射效果。





















如果不知道什麼時候要用乘的,什麼時候要用加的.....只能說先K點計算機圖學會比較有概念。