2009年4月27日 星期一

(7)spot light shader的簡單應用

最近有朋友跟我說我這RenderMan的心得整理的還不錯,聽到後還挺開心的說~XD,真是感謝大家的鼓勵!也有非程式背景的朋友說,希望我在這上面來點程式的教學,嗯....想了一想,一來是自己才疏學淺又懶...orz,二來是覺得非程式背景的人,與其對程式一知半解,想寫的時候不知道如何下手,那把每個node的特性搞清楚還來的較簡單又有意義~例如像上一篇的noise,有些人只會認為是一種亂數的擾動,卻不知道它其實不是亂數,而且是一種uniform continuous的函數(請參考這個很棒的網站-> http://www.fundza.com/rman_shaders/noise/index.html)。也有人問說....那數學需不需要很強,坦白說,還真不知道該怎麼回答這問題,儘管我是唸應用數學出身的,只能說基本的舉陣計算,向量分析要懂一點 @@

推薦一本個人覺得很棒的向量分析,中文的哦!

http://www.tsanghai.com.tw/product_info.php?products_id=653&osCsid=35f70993779eee363847f195d32c8018

個人覺得寫的簡單清晰,對基本的微分幾何也有詳細的介紹,又不像一堆專業知識的書籍,厚到可以拿來砸人~XD,而且預備知識只需要基本的微分和積分就好了。

--------------------------以上是本篇的廢話,進入正題 XD---------------------------

一般在lighting的時候,大部份都是用spot light比較多,一來是好控制,二來是相較point light而言,計算量少很多(記得一個point light的計算量是spot light的6倍)。不過也是要視實際遇到的情形來做考量。

◎先建置一個簡單的場景,記得要打一個maya的spot light。


















◎在graph layout裡,Lights-> Spot,來新增一個spot light的node。




















◎給sphere一個紅色的diffuse,然後render可以看到如下圖。有光線,但是沒有shadow。


















◎點下spot light裡的shadow旁的小方塊,如圖示,給它一個ShadowMap來產生陰影。一般lighting在做shadow的時候,只需要用到ShadowMap這個node就夠了。


















◎render之後,即可看到陰影。


















◎將maya的spot light的屬性的Penumbra Angle調成10。


















◎可得如下結果。對照前一張render的結果,可以看到光線有擴散出去的感覺~像現在這個spot light的Cone Angle是40,Penumbra Angle是10的話,那它擴散的範圍就是spot light照到的範圍的10/40=1/4。



















◎ShadowMap裡較常用到的attribute有:Map Resolution、Samples、Blur、Bias。























◎這是Map Resolution為512時的圖



















◎這是Map Resolution為1024時的圖,相較於上一張圖,shadow的alias有少很多,也就是resolution的值越大,alias越小。



















◎將Blur調成0.02

















◎可以看到如下圖,shadow有了blur的效果(這裡調成0.02這個值,其實有點太大)



















◎將Samples的值調成64的話,可以看到如下圖的結果,相較於上圖,一粒一粒的感覺明顯改善。



















◎將Bias調成0.002(在小場景,這個參數只要調一點點,就會有很大的影響)




















◎可以看到如下圖。有時候在一些場景裡做lighting時,會發生shadow跟物件沒接在一起的詭異情形,Bias就可以對shadow做一些位移個的效果,來將shadow和object接在一起。當然也可以用來做出一些特別的效果。



















◎上圖中可以看到polygon sphere看起來有點菱菱角角,除了用maya的smooth功能外,這裡順便介紹RAT的subdivision的使用(注意..這跟maya的smooth是用不一樣的演算法):RenerMan->Pixar Subdivs-> Mesh as Subdivs。



















◎再render後即可看到一粒平滑的sphere。

















ps:這裡要感謝一位好同事好朋友~Vence,很多lighting的細節與概念等,都是向他討教來的~ XD

1 則留言:

  1. 把Renderman的問與答整個翻譯成中文 那就更功德無量了 呵呵

    回覆刪除