最近Arnold很火,作為一個異常犀利的NB渲染器,arnold大有摧枯拉朽打倒舊社會的架勢,然而貌似很多人盡管一直在談arnold,歌頌arnold,卻不明白為什麼arnold這麼屌,以及屌在何處。
Arnold個人也在研究階段,這篇科普純屬個人心得,如有不對麻煩告知立馬修正。
Arnold為什麼這麼屌?
《鬥戰神》開場CG使用Arnold渲染,畫麵效果讓“中國CG”朝“世界CG”邁進了縮短了2年。Arnold是一個unbiased PBR渲染器,這分兩部分,不但是PBR的,而且是unbiased。Arnold同時符合,而且效率拔群。
關於PBR
PBR是說基於物理的渲染。這點和以前的Renderman時代的NPBR概念大為不同。NPBR是針對效果和現象的,比如要做fresnel可以用一個facing ratio控製一個ramp去模擬,很像那麼回事,不用基於折射率去計算。這種大部分情況下計算量很低,控製很直接,也很自由,自由度不夠了就去改shader,總之在NPBR下是不要求物理精度的,反正一切為了效果服務,在這個時代更加追求的是降低計算量以及提高自由度,讓artist可以為所欲為。
而PBR是基於物理的,這個“基於物理”並不是說光照模型完全是和照片一樣一樣的,而是說在這個係統中的能量是守恒的,最簡單的理解就是出射光線的能量的總和不能大於入射光線。
遵循亥姆霍茲守則。即,那邊一束光線照過來你從這看到的亮度是L,那麼把攝像機和光源的transform互換一下,從攝像機看到的亮度同樣是L。
不管bsdf如何換,這一條是arnold一直遵循的。NPBR的以計算效率和自由度為重,可以隨意發明個光照模型,我就是要不守恒不符合bsdf咋滴,而PBR概念下的shader不用去發明什麼光照模型,而是直接在引擎提供的bsdf基礎上通過混合做起(比如mantra的各種bsdf節點以及arnold的brdf函數),可以說要做的話更多的是做功能上和程序紋理上的。這導致參數大都有物理意義,而不是和具體算法相關,藝術家不用去操心這個參數在算法裏是什麼意思才能調出好效果,隻需要按照現實中的物理邏輯去思考就可以了。因為這個原因,artist的自由度是被限製了,但shader的參數的可預見性是貨真價實的提高了,以前測試30次出來的效果可能遵循物理的思路5次就調出來了,節省了大量活人的時間,而不是計算機的時間。
關於Unbiased
這個話題是一個裝逼賣點。
Biased和Unbiased的區別主要表現在對GI的計算上。Biased的計算是說,允許有“係統誤差”的。我們知道計算機的數值世界裏誤差是必然存在的,但誤差也分兩種,一種是隨機誤差。隨機誤差是沒法避免的,比如用float去算0.1+0.2它是不等於0.3的。而係統誤差是這個算法決定的,人話就是,這個算法一開始就是一種近似或者其他目的而明擺著知道有誤差。比如用經典物理學去求運動物體的物理屬性,不管浮點的精度提高到多少,始終會有誤差,因為算法本身決定了這是一種近似。再比如FLIP去求流體運動,這個算法已經決定了在particle和volume之間屬性傳遞的時候有誤差,這種誤差產生於算法中,是不可能消除的。這段話如果沒明白可以再看一遍,一方麵可以幫助你理解arnold的unbiased,另一方麵可以對其他人複述一遍來達到裝逼的目的。
一張比較失敗的效果圖,可以看到車輪和地麵交界處等地方非常缺乏光影細節,帶來一種屬於unbiased風格的淡淡的飄逸的感覺。
而arnold采用了unbiased方式去計算,是說沒有係統誤差。在計算GI時MR等采用的是Finalgather、Photon map等,Renderman采用的是brickmap,pointcloud等,這幾種方式都非常巧妙的省去了大量的計算量,但是畢竟是近似,所以就引入了係統誤差。比如Finalgather,隻是發射有限的FG ray去計算間接光照,一個FG point對應著一片像素,插值後應用到光照中,而間接光照本身就是低頻的,所以最終的效果看起來效果差不太多。但是這個係統誤差導致的結果就是動畫上的閃爍啊,藝術家需要理解FG的radius啊,椅子腿兒看起來離地啊,不過這些和其省下的計算量相比都不是事兒。然而有句古話說的好,時間上來看計算機的計算能力一直成倍增長,但渲染時間基本是恒定的。這句話和摩爾定律一樣出奇的和現實吻合。古時候渲染個反射都要用鏡像模型等去模擬,後來機器發展了,可以raytrace了,所以到頭來還是慢。後來機器又牛起來了,但時間又被各種GI等高級功能占去了,再後來機器再次的發展,但剛要哈皮起來又出來了個不省油的Arnold。
那arnold到底是怎麼算的呢?yes,unbiased,生算。和FG類似卻不同,arnold的每次sample所用的間接光照都是實打實的算出來的,而沒有經過插值。這個在效果上導致的最大提升就是模型的高頻地帶光影細節非常豐富,完全不“飄”。當然這個是以計算量為代價的,所以拿個cornell box渲染時間去說arnold不是很快的可以省省了,因為雖然arnold的優化很棒,但是它的使命根本就不是為了節省渲染時間。這也是solidangle之所以出Arnold的原因,就是同樣的30分鍾,他們覺得藝術家的30分鍾要比計算機的30分鍾寶貴。當然,Arnold之所以這麼生猛,有個原因就是因為在影視級別它的優化實在是很好,高麵數+motionblur+dof一開普通的raytrace渲染器都讓你內分泌失調了,但是arnold的渲染會讓你感到喜悅。
在這篇結束之前…
有兩點思考,如果想明白了,那就真的理解了上麵所說的:
為什麼Arnold渲染的diffuse比maya自帶的暗3倍左右?
為什麼都說Arnold不需要AO?