3dmax中渲染的光子圖原理,原來是這么一回事!
3dmax中的光子圖是什么意思?
為什么要先渲幾遍光子圖之后再真正渲染?光子圖文件有什么用?一般渲幾遍光子圖比較好?......
我們常常會遇到關于光子的問題,可能是渲染時卡住了,可能是不知道設置幾遍光子比較好。簡單來說,光子貼圖是渲染器計算渲染時,直接照明和間接照明光子量的總和的圖像,可用來調(diào)整渲染參數(shù)。而Vray跑光子圖,準確說法,是為了節(jié)省渲染最終大圖的時間。說是加快出圖的速度是不科學的,出圖的速度,在相同的參數(shù)下只與計算機的處理器運算速度有關。
Vray在正式渲圖前,先要計算光子(或稱跑光,跑GI),這個階段里所耗費的時間跟圖的大小密切相關,大圖、小圖跑光結(jié)果是一樣的,但小圖完成速度比大圖快多了,并且光子計算完的結(jié)果是可以保存再調(diào)用的。
于是我們常常先用小圖來跑光保存,避免大圖在每個像素上耗更多時間渲染光子圖,可直接渲染最終圖像,節(jié)省下大圖跑光的時間,達到縮短渲染最終大圖時間的目的。
那它的具體原理是什么呢?(漢化版本叫發(fā)光圖)
01
VRay的全局照明分為首次反彈和二次反彈,主要是為了實現(xiàn)光線跟蹤。
光線追蹤(Ray tracing)是三維計算機圖形學中的特殊渲染算法,跟蹤從眼睛發(fā)出的光線而不是光源發(fā)出的光線,通過這樣一項技術生成編排好的場景的數(shù)學模型顯現(xiàn)出來。這樣得到的結(jié)果類似于光線投射與掃描線渲染方法的結(jié)果,但是這種方法有更好的光學效果,例如對于反射與折射有更準確的模擬效果,并且效率非常高,所以當追求高質(zhì)量的效果時經(jīng)常使用這種方法。
光線追蹤分為兩種:
對象順序渲染(object-order rendering):依次渲染每一個對象,然后更新每一個新對象對其它對象的影響。
圖片順序渲染(imageorder rendering):依次渲染像素,渲染每一個像素是考慮到每一個對象對它的影響。
光線追蹤器一般來說可以很好地解決對象順序框架難以解決的陰影和反射問題。
光線追蹤的基本算法光線跟蹤器通過一次計算一個像素來工作,并且對于每個像素,基本任務是找到在該像素在圖像中的位置處看到的對象。每一個像素表示攝像機“看向”的不同方向,可以看到的對象一定會和視線相交。因此,距離攝像機最近的對象是尤為重要的,因為它遮擋了后面的其它對象。
基礎的光線追蹤器包含以下三個部分:
光線產(chǎn)生(ray generation):基于攝像機的幾何性質(zhì)計算每一個像素的視線的原點和方向
光線相交(ray intersection):找到最近和視線相交的物體
著色(shading):基于光線相交的結(jié)果計算最近物體的顏色

02
Irradiance發(fā)光圖
發(fā)光貼圖的計算方式是基于發(fā)光緩存技術的,是只計算場景中某一些特定的間接照明,對附近的區(qū)域進行插值計算。
Irradiance發(fā)光貼圖描述了三維空間中任意一點和全部可能照射到這一點的光線。通常照射這個點的每條光線都是不同的,但是渲染器在渲染時對這些光線也有限制,由于被照射的點都在場景中物體的表面上,所以有一種約束叫做表面約束。另外一種是渲染器只考慮這個點被照射的所有光線數(shù)量而不去計算這些光線來自哪個方向。這些被計算的所有的點是一個三維空間方式的集合。
當光線照射到物體表面時,VRay會在發(fā)光貼圖中查找與當前計算過的點類似的點,并從已計算過的點中提取信息,根據(jù)這些信息將這些相似的點進行內(nèi)差值替換。如果那個點與其他任何被計算過的點不同,就會被重新計算,保存發(fā)光貼圖到內(nèi)存中。
由于上述原因,所以發(fā)光貼圖是自適應的,它會根據(jù)我們給定的參數(shù)對場景中物體的邊界、物體交叉部分以及陰影等重要的部分進行精確的全局光照計算,在大量平坦的區(qū)域進行低精度的全局光照計算。發(fā)光貼圖是VRay渲染系統(tǒng)的默認渲染引擎,也是參數(shù)最多的渲染引擎。
所以發(fā)光貼圖理論上是計算每個像素點的光線,然后根據(jù)計算結(jié)果再去渲染成圖。但是大多數(shù)時候這會耗費大量的時間,而很多時候我們并不需要如此精確的計算,所以有的時候我們會選擇多個像素計算一次。這一點是通過引擎中的最小速率和最大速率來控制的,這個控制有幾個維度。
首先最小和最大速率中的數(shù)字代表的是多少個像素來進行采集樣本。值為0意味著每個像素采樣一次,-1是四個像素進行一次采樣,-2就是16個像素進行一次采樣,-3是64個像素進行一次采樣,-4是256個像素進行一次采樣,以此類推。
如果最小速率為-1,最大速率為-3,那么就意味著光子圖會計算三次,第一次為64個像素進行一次采樣,第二次為16個像素進行一次采樣,第三次為4個像素進行一次采樣,然后三次采樣用算法疊加,以得到更高的精度。
而疊加的方式這一點比較特殊,他并不是簡單的進行疊加,而是說Min rate(最小比率)用來控制場景平坦區(qū)域的采樣數(shù)量,Max rate (最大比率)則來控制場景中的物體細節(jié)的采樣數(shù)量,如邊線、角落、模型轉(zhuǎn)折復雜的地方。
也就是說光子圖渲染完成之后會自動根據(jù)模型的復雜程度來調(diào)用光子樣本。什么意思呢,比如場景里有一面墻,很平坦,上面并沒有什么其他的模型,那么他就會調(diào)用最小比率中采集到的樣本來進行最終的成圖渲染,而面與面的交接處,因為模型很復雜,他就調(diào)用最大比率采集到的樣本來進行最終成圖的渲染。
這也是為什么要進行多次光子的原因。很多人覺得麻煩,只計算一次光子,其實是不對的,在時間充許的情況下應該進行多次光子計算。

03
light cache
燈光緩存也使用近似來計算場景中的全局光照信息,采用了發(fā)光貼圖和光子貼圖的一些特點,在攝像機的可見部分內(nèi)跟蹤光線的發(fā)射和衰減,然后把信息存儲到一個三維數(shù)據(jù)結(jié)構(gòu)中,對燈光的模擬類似于光子貼圖,計算范圍與發(fā)光貼圖的一致,僅對攝像機可見部分進行計算。Light Cache燈光緩存是建立在追蹤攝影機可見的許許多多光線路徑的基礎上,和發(fā)光貼圖正好是相反的,是逆向的,而且它支持任何燈類型,它對燈光沒有局限性。在做預覽時是很快的,它可以單獨完成對整個場景的GI照明,也可以配合別的貼圖做二次反彈。而且這種引擎在墻角處的效果會更好,層次會更細膩。
在Light Cache參數(shù)面板中Subdivs參數(shù)是非常重要的,它控制了Light Cache的采樣,該參數(shù)值越大越能得到好的畫面效果,同樣渲染速度會變慢,Subdivs的意義是確定有多少條來自攝像機的路徑被追蹤,路徑的數(shù)量是Subdivs參數(shù)的平方值如果Subdivs設置為 300 那么被追蹤的路徑數(shù)量就是300×300=90000條路徑,如果Subdivs設置為1000的話 那么被追蹤的路徑數(shù)量為1000×1000=1000000條路徑。
注意:由于Light Cache燈光緩存特殊的計算方式,在使用燈光緩存時,盡量不要將材質(zhì)色彩的RGB值設置到255,這樣會導致追蹤路徑過長從而增加渲染時間。

關于燈光緩存的詳細內(nèi)容可以看

渲染卡在燈光緩存怎么辦?這幾個步驟教你解決。
04
看到這里,我們弄明白了渲染光子圖的原理和目的,而在教大家怎樣進行光子貼圖操作設置之前,有幾點也需要給大家明確:
跑光子圖能節(jié)約多少時間呢?
實際上,這個節(jié)省時間的多少是根據(jù)你的任務大小、場景設置來的,沒有一個確定答案。具體應用場景里,如果你的渲染參數(shù)比較高,大圖的尺寸也比較大,那我們建議就使用先小圖跑光子圖的方法。
跑光子圖時的參數(shù)設置?
理論上,大圖的尺寸是小圖的4倍以內(nèi)就可以使用,太大就無法保證。
比如你要出一張2000的圖,你渲光子的時候,尺寸500就可以了,不會影響出圖質(zhì)量。
具體設置光子的細節(jié)上:還要保證場景不變(燈光、物體大小位置,角度),大圖與小圖的長寬比尺寸需一致,渲染的范圍需一樣。
影響光子圖渲染時間的因素?
(1)電腦配置。
配置再高的電腦,也會渲染很慢,還有反射、細分、卡住的問題;
(2)參數(shù)原因。
參數(shù)沒調(diào)對,估計設置得很高,不然就是場景垃圾太多;
(3)渲染設置。
渲染設置是否匹配,不能全靠一個模板就搞定所有場景。
怎么查看光子渲染時間,怎么判斷光子是否卡住了?
光子圖渲染一般都能很快完成,如果我們發(fā)現(xiàn)渲染時間特別慢的話,很大程度上說明這個光子設置有問題,有可能是光子圖卡住了。
比如,時間進度里,后面那個需要渲染的時間特別大,或者前后的兩個時間無限的接近,但又很長時間都不進入到大圖渲染。

這時候,光子圖大概率是卡住了,我們需要重新檢查參數(shù)設置,檢查文件大小,比如模型較大的場景文件,VR設置的“動態(tài)內(nèi)存極限”建議修改為3000或3000以上。另外,也可能是材質(zhì)細分問題,模型精度過高會影響渲染速度,這里可以用白模進行檢查。
05
那么如何在3D MAX中設置、保存、調(diào)用光子貼圖?
如何設置并保存光子圖
①在3D max中,打開需要渲染的場景文件,確認相機角度,調(diào)整好相關參數(shù),按F10,彈出設置界面,調(diào)整好相關參數(shù),比如將圖的尺寸縮小在4倍以內(nèi)都可以。
②在VRay渲染器設置面板里,找到全局開關,在全局開關里,勾選“不渲染最終的圖像”(因為我們只是跑個光子圖,不用耽擱時間去渲染最終成像)。

③找到GI設置(間接照明),然后首次引擎選擇發(fā)光貼圖,二次引擎選擇燈光緩存。在在發(fā)光貼圖中,可以選擇設置發(fā)光圖預設為“低”。
④在光子圖里打開高級或者專家模式,在保存位置設置不刪除和自動保存,然后選擇保存的位置,并且命名。
⑤在燈光緩存的設置選項里設置保存的位置,找到自動保存,設置方式和步驟4的一樣。
⑥設置好后,點擊渲染即可,在保存的位置會發(fā)現(xiàn)有兩個文件,這個就是設置保存的光子圖。
渲染完成的光子圖如何調(diào)用?
我們在上面的設置中,會發(fā)現(xiàn)保存后有兩個文件,這是我們分別在發(fā)光貼圖和燈光緩存下保存出的文件。建議在保存設置時,區(qū)分好發(fā)光圖和燈光緩存,并做好備注。
①選擇對應文件。
有了這兩個文件以后,我們就可以渲染大圖了。這里我們先要把參數(shù)調(diào)整回渲染大圖時的參數(shù)。我們再到GI欄里找到發(fā)光貼圖,在模式里我們選擇從文件,點擊下面選擇發(fā)光文件,找到剛才我們保存發(fā)光圖的路徑,加載進來。
②加載文件。
在燈光緩存一欄中,在模式里也選擇從文件,然后選擇燈光緩存,找到我們剛才保存燈光緩存路徑,把燈光緩存加載進去。
③最終渲染。
把這些參數(shù)都調(diào)整完成后,我們就可以點擊渲圖,進行最終的渲染。
渲染100云渲染插件已經(jīng)幫助用戶預設好常用的光子比例,不用單獨渲染光子圖,你在max里完成所有大圖設置后,點擊渲染100插件,在彈出的渲染設置中,選擇調(diào)整自己需要的光子比例控制,一般建議可以設置比例為1/2、1/3這樣的比例。
這樣,我們就直接開始渲染最終的大圖了,又可以節(jié)省相當大的一部分時間。
