乍一看,3DsMAX琉璃和透光材質(比如玻璃)是有很多相似之處的地方,但事實上,琉璃(以及與之類似的材質,比如石蠟、皮膚、晶體等等)還有一個普通玻璃所沒有的特點,即“子麵散射”(SubSurface Scattering,簡稱SSS),這種現象是由於材質內部散射光線的作用而形成的,即當光線進入之後在物體內部不斷折射而形成的效果。
今天我們先來了解一下SSS的效果和原理。
首先來看一張沒有使用SSS材質和使用SSS材質(皮膚)的渲染效果對比:
再來看一張沒有使用SSS材質和使用SSS材質(牛奶)的渲染效果對比:
SSS效果在3DSMAX——包括其他3D設計軟件的材質設計中都是相當複雜的。因為此類材質和光線的交互過程比較複雜。當光線透過煙霧、雲彩、汙水、石蠟、琉璃等等這些物體時,物體自身會“參與”到光線的傳播中,在3D設計中,這類物體有一個專門的名稱:“參與介質”(Participating Media)。在mental Ray渲染器中,有很多專有貼圖以Parti打頭,Parti就是Participating的縮寫,此類貼圖在製作SSS材質時就會派上大用場,例如Parti Volume(physics) 、Parti Volume Photon(physics)等等。
下麵是一張SSS的原理圖片,圖中上方的黃色箭頭是入射光線,當這束光線碰到材質顆粒時,呈放射狀散開,散射出來的光線會對模型內部構成照明效果,紅色箭頭指向的三個紅點表明模型不同深度的位置得到的散射光線的照射強度各不不同。
背景知識:Mental Ray的結構
Mental Ray材質庫的擴展名是dll(動態鏈接庫),每個材質庫文件還有一個同名的.mi文件。這些文件分別存放在3DSMAX安裝目錄下mentalray目錄下麵的shaders和includes兩個目錄下麵。注意看一下這兩個目錄中的文件名就能明白為什麼mental ray材質和貼圖後麵通常會帶一個括號了,括號中的內容就是材質或者貼圖所屬於的材質庫的名稱。例如,Parti Volume(physics)後麵括號中的physics表明這個貼圖屬於physics庫。
[page]
三維“子麵散射”第1步:MentalRay渲染器[/size]
上一節我們介紹了3Ds MAX中的“子麵散射”(SubSurface Scattering,簡稱SSS)的效果和原理,這種現象是由於材質內部散射光線的作用而形成的,即當光線進入之後在物體內部不斷折射而形成的效果。這一節我們以上一節的“琉璃”製作過程為例,來看看在Mental Ray材質庫中實現SSS的基本方法。
主要有三個步驟:
一、使用Mental Ray渲染器和材質的選擇
二、Parti Volume貼圖。
三、Parti Volume Photon貼圖
今天我們介紹第一步:Mental Ray渲染器和材質的選擇。
一、Mental Ray渲染器
要想實現SSS效果,首先必須將3DSMAX的默認渲染器設置為Mental Ray,並打開其焦散功能。
1、設置渲染器
打開渲染設置對話框(快捷鍵F10),在Common頁最下麵的Assign Renderer卷展欄內設置默認渲染器為Mental Ray。
2、打開焦散
在渲染設置對話框中選擇Indirect Illumination頁,在Caustics and Global Illumination(焦散和全局照明)卷展欄中選擇Caustics下麵的Enable複選框打開焦散功能,這下麵有一個Maximu Num.Photon Per Sample(每次取樣的最大光子數量),將其設置為較小的值可以提高渲染速度,比如在這個例子中我們將其設置為64。注意,如果使用3DSMAX 6.0或者之前的版本,這裏提供的參數名稱會有所不同,不過作用和含義是一樣的。
二、選擇材質
Raytrace材質
打開材質編輯器,選擇一個空白樣本球,單擊Standard按鈕,從彈出的材質/貼圖瀏覽器中選擇材質類行為Raytrace,得到一個標準的Raytrace材質。這裏選擇Raytrace材質作為基礎材質的道理很簡單,因為翡翠類材質對光線的作用比較豐富,使用Raytrace材質比較容易得到效果。
在Raytrace Basic Parameters卷展欄中,設置Transparency Color為純白色(設置為純白色相當於將材質設置為完全透明的)。然後適當調整一下高光色和光澤度,具體參數可以自己摸索,他們對最終的效果影響不是很大。
現在進行一下渲染,可以看到大致如下圖的效果,也就是普通純淨玻璃的效果。光線在模型表麵反射,透過模型時折射,都是直來直去,不會被材質內部的顆粒散射。
[page]
三維“子麵散射”第2步:Parti Volume貼圖
上一節我們介紹了3Ds MAX中的“子麵散射”(SubSurface Scattering,簡稱SSS)的效果和原理,這種現象是由於材質內部散射光線的作用而形成的,即當光線進入之後在物體內部不斷折射而形成的效果。這一節我們以前麵的“琉璃”製作過程為例,來看看在Mental Ray材質庫中實現SSS的基本方法。
主要有三個步驟:
一、使用Mental Ray渲染器和材質的選擇
二、Parti Volume貼圖
三、Parti Volume Photon貼圖
今天我們介紹“子麵散射”(SubSurface Scattering,簡稱SSS)效果實現的第二步:Parti Volume貼圖。
1、添加貼圖
進入材質的mental ray Connection卷展欄,單擊Volume後麵的None按鈕,從材質/貼圖瀏覽器中選擇貼圖為Parti Volume(physics)。
現在進行渲染可以看到如下圖所示的效果:
2、Scatter參數實現“潑濺”紋理
是不是感覺和開始的效果沒什麼區別,下麵我們就開始逐一調整參數,首先調整Scatter(關於這些參數的具體含義,請參閱本小節後麵的“背景知識”),單擊Scatter通道後麵的小按鈕,從彈出的材質/貼圖瀏覽器中選擇選擇Splat。Splat是一種非常簡單的程序貼圖,其作用就是產生“潑濺”紋理,由於我們在Scatter通道中使用這種貼圖,將會形成一定的立體效果,類似翡翠中的雜質。注意,Scatter通道中既可以使用默認的顏色,這樣可以得到比較純淨的質感,也可以單擊後麵的貼圖按鈕貼入貼圖來得到含有雜質的質感。
Scatter貼圖設置好之後,渲染一下可以看到大致如下的效果:
3、Extinction參數控製材質致密程度
Extinction參數用來控製材質的致密程度,下麵我們逐漸提高這個參數的值,0.01、0.1到0.4,可以看到光線越來越難透過模型,到0.4就是這個例子我們所需要的效果。
Extinction=0.01
Extinction=0.1
Extinction=0.4
4、min_step_len和max_step_len控製光線散射效果
在上麵的效果的基礎上我們再來調節min_step_len和 max_step_len的值,min_step_len的默認值是0.1,max_step_len的默認值是5,用默認值進行渲染的效果如下:
min_step_len=0.1 max_step_len=5
調節max_step_len的值,逐步增大
min_step_len=0.1 max_step_len=10
可以看到在上圖中,由於max_step_len=10,光線在模型內部“旅行”的長度增加,使得模型的細節得到了更多的展現,輪廓比前麵max_step_len=5時要清晰一些了,但是還不夠,我們繼續增加max_step_len的值。
min_step_len=0.1 max_step_len=20
上圖中max_step_len已經加到了20,但是效果並沒有明顯的改善,為什麼?因為,在extinction(消散係數)較大的情況下,max_step_len對效果的影響是有限的,我們需要使用新的方法來強化子麵散射效果——使用Parti Volume Photon貼圖,這是一種光子貼圖,也就是說他會對光子產生影響。
[page]
子麵散射第3步:Parti Volume Photon貼圖
上次我們介紹了3Ds MAX中的“子麵散射”(SubSurface Scattering,簡稱SSS)的效果和原理,這種現象是由於材質內部散射光線的作用而形成的,即當光線進入之後在物體內部不斷折射而形成的效果。這一節我們以前麵的“琉璃”製作過程為例,來看看在Mental Ray材質庫中實現SSS的基本方法。
主要有三個步驟:
一、使用Mental Ray渲染器和材質的選擇
二、Parti Volume貼圖
三、Parti Volume Photon貼圖
今天我們介紹“子麵散射”(SubSurface Scattering,簡稱SSS)效果實現的第三步:Parti Volume Photon貼圖。
仍然在mental ray Connection卷展欄中,單擊Photon Volume通道後麵的按鈕,從材質/貼圖瀏覽器中選擇Parti Volume Photon(physics)貼圖,
利用該貼圖的默認設置直接進行渲染可以得到這樣的效果
extinction(光子)=0.001
可以看到效果略有改進,但是仍然非常不明顯,繼續提高extinction的大小
extinction(光子)=0.01
extinction(光子)=1.5
這時的渲染效果已經非常“出格”了,原因並非extincetion參數太大,而是當前這個光子貼圖的mode設置有問題,下麵我們調整一下。
我們將其設置為2(設置為2時,模型不再是整個都散射光線,隻有一層具有子麵散射特性),然後再次渲染可以得到這樣的效果:
extinction(光子)=1.5 mode(光子)=2
現在的問題是,光子的消散距離太短,都在模型內部消散了,這樣就會使模型內部亮度過高,因此需要增加max_step_len(注意不要將這個參數和前麵Parti Volume貼圖中的同名參數混淆,它們的作用是不同的),我們將max_step_len增加為20,再次渲染可以得到如下的效果。
extinction(光子)=1.5
mode(光子)=2
max_step_len(光子)=20
這裏要強調一下,SSS材質的渲染效果是和模型尺寸相關的,在max_step_len設置值上表現得尤其明顯,在本文介紹的例子中,模型的最大的寬度是20,因此我們這裏設置max_step_len為20。在你自己實際使用中可以根據情況進行類似的設置,當然不必死板,可以根據模型的尺寸上下浮動。
背景知識:Parti Volume貼圖的參數
mode:當mode參數被設置為0時,整個模型都是“參與介質”,當mode設置為大於0的值時,下麵的height參數將會起作用,模型隻有一部分是“參與介質”,也就是材質隻有一定的厚度的一部分參與光線的散射。
scatter:scatter參數設置材質將對那種顏色的光線進行散射,這個顏色就是模型“體”所顯示出來的顏色。
extinction:extinction是介質的“消散係數”,它用來決定光線(光子)進入模型內部之後有多少被吸收,有多少被散射。這個參數設置為0時,相當於光線在在清潔的空氣或者真空中傳遞,這個參數越大,材質的密度越大,光線越難透過(因為光子被散射掉的量比較大)。
r、g1和g2:這三個參數乍一看有點讓人感到莫名其妙,不過他們卻提供了對材質的散射效果的更加細致的控製。如果g1和g2都設置為0,則光線進入材質內部後進行“同性散射”,也就是說,光子碰到材質的微粒後,可能會向任何方向散射出去。這裏插一句,隻有材質內部的顆粒半徑和光子半徑相接近時,散射現象才可能出現。g1和g2設置為不等於0的值,光子將會作“異性散射”,-1<g1(或g2)<0時,光子向後散射,而0<g1(或g2)<1時,光子向前散射,而參數r則用來決定有多少光子向前散射,多少光子向後散射。
nonuniform:這個參數決定材質是同質的,還是異質的,如果設置為0,表明材質是完全同質的,也就是密度均勻,光線的散射也比較均勻;如果設置為1,材質是完全異質,光線的散射會有較大的變化,渲染出來的效果會顯得材質中“雜質”比較多;當然也可以將這個參數設置為0到1之間的值。
height:決定參與光線散射的模型的厚度。從這個參數的存在,我們也能感覺到SSS材質不再像許多其他材質那樣可以“一次設計,任意移植”,SSS材質的參數設置和模型的尺寸形狀是有密切關係的,通常我們並不能直接將別人設計好的SSS材質拿過來直接使用,而是要根據自己的模型修改一些參數,比如這裏的Height就是其一。注意,如果最開始的mode參數設置為0,height參數是沒有效果的。
min_step_len和 max_step_len:這兩個參數決定光子在異質材質內部散射時的最小步長和最大步長。
小結
SSS材質可以說是最複雜的材質了,在很多場合中,要想達到逼真的渲染效果,經常要使用SSS材質。此類材質的效果是比較難控製的,參數也比較多,含義不像其他材質那麼容易明白,但是一般隻要抓住extinction、scatter和max_step_len就可以製作比較好的效果。
另外如果你在實際操作中沒有實現文中介紹的效果,首先請檢查一下模型的尺寸和材質的參數設置,其次檢查一下光源的設置。檢查光源設置時考慮兩個因素,一是光源的強度要恰當,二是盡量不要使用漫反射光源(Omni),因為這種光源會浪費很多光子(也就是很多光子沒有照射到模型上,渲染器必須對其進行計算,但是又不會得到任何效果),不但會導致渲染速度下降,而且會影響最終的效果。