包含6節(jié)視頻教程
關注8.2萬次
本系列使用Unity3D制作一個完整的像素鳥游戲,這種2d游戲是最常見的橫版過關游戲,老師通過簡潔易懂的語言,很完美的詮釋了這一過程。即使是你不會編程,不會美工,仍然可以把這個游戲制作出來,做完之后你可以應用這些技術制作類似的游戲,馬上來學習吧!
導言:大家好,我是戴巍。今天和大家分享的是如何利用Maya基本材質和Mental ray材質實現玻璃效果的教程,希望對大家有所幫助。
(本文部分圖片可右存或復制鏈接看大圖)
本文導讀
材質的基本原理
使用Maya基本材質實現玻璃效果
使用Mental ray材質實現玻璃效果
玻璃的陰影以及焦散
材質的基本原理
能量守恒
在光線照射到某個物體表面的時候,總體上會出現三種反應:吸收,反射以及折射。其中反射又分為漫反射和鏡面反射。
而所謂的能量守恒法則說的則是,能量不可能憑空產生也不可能憑空消失,只可能發(fā)生轉換。
用在光線傳播過程中則可以得到這樣一個公式:入射能量=吸收能量+反射能量+折射能量。其中,吸收的能量一般轉換為熱能,是我們不需要考慮的部分,將這一部分掠去,得到公式:入射能量>=反射能量+折射能量。其中,反射能量可以分為漫反射和鏡面反射,而漫反射在我們cg制作過程中,一般為diffuse,而鏡面反射一般為specular,而折射一般為refraction。令入射能量為100%,即為1,則可以得到最終我們可以使用的公式:1>=diffuse+specular+refraction。
所有反射都具有菲涅爾效應
這里直接引用下Mental ray官方幫助文檔的圖。菲涅爾就是你的視線和你看的面的夾角越垂直,則看到的反射越低;你的視線與你看的面的夾角越接近0度,反射越高。
另外,決定菲涅爾效應的主要是折射率這個屬性。當折射率越靠近1的時候,90度視角與0度視角的反射率之間的差別越大,當折射率數值越高的時候,90度視角與0度視角的反射率越接近1。
一般透明物體的折射率在1.3-1.9之間,塑料、橡膠、烤漆也是這個范圍左右。金屬則是4-10,甚至更高。
使用maya基本材質實現玻璃效果
這里使用大家最熟悉的blinn材質,運用前面講的基本原理來制作玻璃。
首先是設置場景,對于高反射的金屬或者玻璃等物體來說,基本上可以說不存在自身的固有色,這些物體之所以被看見,是因為反射或者折射周圍的環(huán)境,這時環(huán)境對于玻璃的制作來說是萬分重要的,沒有環(huán)境就沒有效果。
這個場景使用HDR來進行照明,在Mental ray中則使用IBL節(jié)點。
關鍵設置如下:
開啟IBL節(jié)點,如果FG沒有自動開啟,請手動開啟。
關閉場景的默認燈光,在common標簽的最后。
啟用色彩管理,如下設置,開啟線性工作流。
渲染得到的結果如下。
給模型一個blinn材質,調節(jié)transparency到全透明。在raytracing option標簽下開啟折射refraction,將折射率調節(jié)到1.7或者類似的一個數值,得到下圖這樣的結果。
這是因為反射折射次數在默認情況下都設置得非常小。為了講解反射和折射次數,我做了一個簡單的場景來說明。
兩面相對的鏡子,中間有個小球。鏡子給的是高反射的材質。
按照我們的生活經驗,兩面相向而立的鏡子應該是無限次反射才對。但是在軟件渲染出來的圖中卻看到,從一面鏡子里面只能看到對面的鏡子和小球,對面鏡子里的反射是沒有的,反觀另一面鏡子也不會有反射。其實這兩面鏡子我給了同樣的材質,那問題在哪里呢,就在反射與折射次數的限制。
當我們在渲染的時候,如果遇到像我現在使用的這個案例,計算機要是按照生活里的經驗去計算,那么就要無限地計算兩面鏡子之間的反射,渲染便永遠不會終止。為了避免這種情況的產生,軟件中引入了反射與折射次數限制來提高性能。這個限制是由兩部分構成的:全局設置以及單個材質的設置。當你打開Mental ray的quality標簽,下面有個raytracing、reflection和refraction的值則分別對應會計算的反射和折射次數,而max trace depth則是這兩個值相加的最大限制。比如兩個值都設為10,但是max trace depth也設為10,那么折射和反射次數則不會達到20,而是不會超過10。
在高反射的場景里,一般會設置為10,10,20。但是渲染了以后,你會發(fā)現結果沒有變化,那是因為雖然你把全局設置改變了,但單個材質下面也是有限制的。
找到這個blinn球的raytrace option,下面有一個reflection limit,這個也是反射次數限制。下圖分別為大家演示了reflectionlimit值為0,1,2,3,4,5時的結果,你會發(fā)現這個數值設為幾,那么反射就會進行幾次。
折射也是一樣的道理,折射一般要9次以上,而blinn材質的折射次數,默認就是9次。反射也要有3-5次左右,將場景里所有的反射折射次數都調高吧。記得當你調高這些數值的時候,渲染時間也會隨之而大幅度增加;仡^看那張玻璃杯的圖,調節(jié)了反射折射次數以后的結果是,黑的地方消失了,不過反射折射還不好看。
要怎么補救呢?首先根據開篇說的能量守恒法則1>=diffuse+specular+refraction,對于玻璃物體來說,是不存在漫反射的,有的都是鏡面反射和折射。所以,先把color或者diffuse關掉,調成0,或者關掉。其次,玻璃是一個遵循菲涅爾反射的高反射物體。我們把反射率和specular color調到最高。在blinn材質中對于反射的控制是reflectivity和specular color共同控制的,只有二者皆為1的時候,才是全反射,任意一個值不為1,都會相應降低反射率,任意一個值為0,則反射率就是0。
然后將specular roll off調節(jié)為0或者接近0。絕大多數人理解這個值為高光強度,這個理解是有偏頗的。這個值真正的作用其實是控制菲涅爾效應的。當該值為1的時候,90度視角與0度視角的反射率皆為specular color與reflection的乘積(90度視角與0度視角參見菲涅爾反射;乘積的原因是這兩個數值共同控制真正的折射率);當該值為0時,0度視角的反射率為specular color與reflectivity的乘積,而90度視角的反射率為0。
所以,這個值可以取代sampler info與ramp節(jié)點來實現對菲涅爾的控制。(不相信的同學可以自己弄一個圓球,把這個值調到0,你會發(fā)現球體的邊緣照樣有反射,并且越靠近你的垂直視線,反射越低。)
上圖是將specular roll off調節(jié)到0所得到的渲染結果,即有了菲涅爾反射的結果。你會發(fā)現杯子正垂直于你視線的面上的反射幾乎已經看不到了,而同你的視線夾角非常小的面,依然有著很高的反射。
另外,在我這個案例中eccentricity這個值不產生作用。一般來說,這個值被翻譯成偏心率,控制的是高光的大小。但是這里所謂的高光,其實是三維軟件虛擬出來的一個東西,因為你用了虛假的燈光,虛假的燈光照射在虛假的材質上面,會形成虛假的高光。但是你要按照我說的一步步地做,你會發(fā)現這時候調整這個數值不起任何改變。
這是因為我沒有使用虛假燈光,這個場景里唯一的默認燈光在開始時已經被我關閉了,并且沒有新建任何燈光,起到照明作用的是一張hdr貼圖,以及FG的計算。所有玻璃上能看到的高亮部分,并不是計算機通過虛假燈光位置計算出來的所謂高光,而是根據光線跟蹤計算出來的真正的反射。這一部分我沒辦法更深入地說明了,這不是這篇教程里想要解決的問題,只是附帶提一下,如果想不明白也不要深究,很多人都不知道這些但依然做出很棒的作品,條條大道通羅馬嘛。
回到玻璃的制作。我們已經制作出菲涅爾現象,這個時候卻有個問題,這個材質并不遵循能量守恒:我的blinn的transparency全是1,在90度視角的面上,反射是0,而在0度視角上反射是1。于是,在接近視角為0的面上,會有1的反射同時有1的折射,打破了能量守恒,也就是說反射與折射的光線反而要比入射的光線強烈,會得到不正確的視覺。
我用一個方法來糾正不同視角的折射能量,也就是透明度。這里使用sampler info加ramp的經典方法。
如上圖,將sampler info的facingRatio插入ramp的vCoord。設置ramp一端為白一端為黑。將這個ramp插入一個lambert給杯子渲染一下,你就知道這一套節(jié)點起什么作用了。
可以看出,杯子的邊緣,也就是接近0度視角的地方是黑的;接近中心,也就是接近90度視角的地方是白的。也就是說,這套節(jié)點可以控制不同視角的地方獲得不同的值。
現在的反射值是在0度視角也就是邊緣的地方比較強,而90度視角,也就是中間地方很弱。為了滿足能量守恒,得插入一個相反的結果到transparency通道中去,也就是讓越靠近邊緣的地方,透明度越低,而越靠近中心的地方,透明度越高。
剛才做的這套節(jié)點剛好合適,插入到之前blinn材質的transparency通道中去。
得到的結果,感覺太黑了點,這個時候可以控制一下ramp上的顏色來調節(jié)到可以接受的結果。有人可能會說,如果這個時候調ramp上的黑白顏色,那么不是打破了能量守恒了嗎?其實你用blinn材質做玻璃,根本無法精確控制能量守恒,可能你能讓標準的90度視角與0度視角獲得正確的結果,但中間過渡的環(huán)節(jié)你并不知道過渡到底該是線性的還是曲線的還是咋樣的。其實菲涅爾現象的數值變化本身就很復雜,即不是線性,也不符合單一曲線,最精確的控制方法是輸入折射率來控制菲涅爾,前文已經提到菲涅爾現象最主要是受到折射率的控制,這是一種物理屬性。而在Maya自帶的簡單blinn模型中,是無法實現用折射率精確控制菲涅爾現象的,更精確的方法將在后文提到。
順便說一下,Maya的blinn材質給人的感覺挺奇怪,尤其是反射是由specular color與refectivity兩個數值共同控制,我覺得這些特性早就應該淘汰了。新版本的Maya從來不更新這些過時的東西,導致Maya這個軟件已經顯得有點尾大不掉,學習起來會相對困難一些。
回到做玻璃上來,原因我已經說明白了,所以這里,我們不得不做一次所謂的藝術家,讓結果看起來“正確”。
你可能注意到,這個結果的杯底特別的黑。這是因為我采用的照明方式是IBL,主要靠的是FG的光子。而FG的光子也是有反射和折射次數的。
如圖打開FG的反射折射次數限制,調高一點點,使光子可以穿透杯壁照亮杯底的地面。
得到結果如下圖。
最后,增加了地面紋理,加強HDR的強度,加強照明,細微調節(jié)材質屬性,得到下面這個純blinn材質的玻璃。
也可以在插入transparency的ramp上面添加一些顏色來制作有色玻璃,但你不要太期待結果。還可以給玻璃增加一點折射模糊,讓CG味少一點。
折射模糊請選擇材質的Mental ray標簽下的Mi Refraction Blur,limit是折射模糊的次數,rays是精度。
調高blur,制造毛玻璃的效果。當然這個屬性會讓渲染速度大大減緩,請慎重使用。
還可以在bump里連入貼圖,讓玻璃看起來不那么規(guī)則。
使用Mental ray材質制作玻璃
Mental ray的建筑材質有很多優(yōu)勢,相對于blinn來說有一個巨大的優(yōu)化就是——內置能量守恒。這是一條強硬的規(guī)則讓你無法打破它,即使你的設置是有問題的,但得到的結果仍舊是一個強制得到的正確結果,和你的設置其實是不同的。當你給材質一個顏色,然后不斷調節(jié)它的反射率你就明白了。
Mia材質的設置主要是讓0度視角與90度視角的反射率都為1,即不產生菲涅爾反射,默認mia是有菲涅爾反射的。再給一個純紅的顏色,并且把反射率給為0。之后的圖都是在不改變diffuse的前提下,只調節(jié)反射率的值得到的。以下分別是Reflectivity=0,0.3,0.6和1時的效果。
簡單來說,當你把mia材質的反射開到1,并且關閉了菲涅爾反射的時候,你的diffuse顏色就沒用了。想象一下吧,反射為1的材質是啥樣的?其實就是鏡子,完美反射周圍的環(huán)境而沒有自己。這個時候,不論你給它黃色藍色綠色,都只能看到周圍的環(huán)境而看不到自己的固有色。
但是Maya的基本材質是沒有這個功能的,你可以自己動手做試驗,Maya材質diffuse和refection得到的結果會向上疊加,最終會超過極限得到過曝的結果,這就是很多人用Maya的基本材質做東西總覺得很假的原因之一。
而且mia材質還有這樣一個特點,就是折射覆蓋反射覆蓋漫反射。像上面的渲染圖,在漫反射固定的情況下,反射屬性越高,漫反射效果會自動降低,到反射為1的時候甚至直接就沒有漫反射了,所以說反射覆蓋漫反射效果。折射也有同樣的效果,開得越高,則反射效果以及漫反射效果都會越低,就算你給的反射值是1,也會隨著折射的強度提高而不斷降低。
這就是mia材質的強制能量守恒,讓你無法得到不正確的結果。
好的,這些是mia材質的一點點基本知識,我們再回到制作玻璃上來。首先還是關閉漫反射。然后將reflectivity即反射調為1,折射率調為1.7,transparency調為1,即全透明,打開brdf卷閘欄,勾選use fresnel reflection,這個選項會讓折射率來控制菲涅爾反射,前文已經闡述過。不用擔心反射和折射之間的能量守恒,mia材質會自動為你處理,這時這個材質就算設置好了。得到的結果如下,非?焖俣倚Ч馨簟
另外,你可能一直注意到,玻璃內壁似乎挺明顯的樣子,Maya基本材質對這個問題是沒辦法的。但是對于mia材質,你可以把advanced reflection卷閘欄下的skip reflection on inside的勾給去掉,會得到內壁不那么清晰的結果。
這個選項勾選的意思是忽略內壁反射,取消勾選的意思是計算內壁反射。意思就是,不光計算法線朝上的那一面的反射,還要計算面的另一邊的反射。其實我一直在想這個是不是搞反了,但后來發(fā)現這個可能和一個叫做TIR(total internal reflection)的東西有關。這個我個人還沒完全弄明白,但我們仍然可以通過這個方法得到不錯的效果。
Mental ray材質做玻璃還有個要在意的地方就是玻璃顏色,這有點像vray的霧顏色。在mia材質中,主要是使用advanced refraction卷閘欄下的屬性來操控顏色。
勾選上use max distance和use color at max distance。Use color at max distance的顏色設置可以理解為你要設置的玻璃的顏色,max distance下面的數值則是說,光線進入介質開始,傳播了多遠的距離會變成你選中的顏色。你可以根據場景的大小來設置這個數值。Maya默認的單位是cm,每一個單元格就是一厘米,如果你自己沒有亂調的話。你可以估算一下你的杯壁大約是多厚,大概傳播多遠的距離變成你要的顏色比較好。
總的來說,max distance越大,則玻璃顏色越淡,max distance越小,則玻璃顏色越深,這個是很容易理解的。而且,你會發(fā)現使用advanced refraction下面的屬性來控制玻璃顏色比你直接用transparency直接控制顏色的優(yōu)勢:顏色并不是均勻地分布在玻璃的每一寸表面上,而是越厚的地方,顏色越深,越薄的地方顏色越淺,這都得益于max distance。
最后我們得到了下面這種效果,很微妙的玻璃顏色。
關于mia材質設置反射模糊或者折射模糊的方法在這里就不再贅述了,有很多地方可以查到資料。
玻璃的陰影以及焦散
關于玻璃的陰影首先第一點要明確的是:玻璃的陰影是實心不透明的!這是客觀世界的真實結果。而軟件里把玻璃陰影調成半透明的做法,其實是一種接近真實的欺詐,但絕對談不上真實,真正的玻璃陰影其實是實心的陰影加上焦散。
先說blinn材質,我個人是不知道如何讓它的陰影變成實心,似乎只要是給它開了透明,它的陰影就開始變得透明起來,并且有個數值可以調整這個陰影的透明程度。
在raytracing options下面的shadow attenuation,值越小,陰影越透明,值越大,陰影越不透明。有一點十分值得注意的是,這個數值默認是0.5,會造成透明貼圖的陰影并不透明。把這個數值調為0,或者把quality標簽下的shadow method 改成segments就可以解決這個問題。相信有人被這個問題困擾過。
另外,你不要去關注上面兩個屬性light absorbance和surface thikness,這兩個數值意思是燈光吸收量和表面厚度,只有在software渲染器里才能好好工作。就算好好工作效果也很不好,以下各圖分別是shadow attenuation=0,0.5和1時的效果。
一般用blinn材質的話,能得到的陰影效果大體就是這種程度的。你會發(fā)現能夠在陰影上看到明顯的杯壁,這時你可以給燈光的陰影加一點點模糊來遮蔽這些視覺效果(這里的所有圖已經給了陰影一點點的模糊,如果不給的話會非常非常硬),基本上得到的效果還是可以接受的。特別是當光源很散,陰影并不像這個例子里直接用聚光燈打出來的話,很可能根本就看不出來效果來。在之前的例子里一直是看不到陰影的,因為光源來自四面八方,陰影并不明確。
現在我們回到mia材質上來。它當然也可以使用類似于blinn的這種陰影計算方式,特別需要注意的一點是,當你使用這種簡單的陰影計算方法,并且使用了max distance時,你的shadow method必須為segments才能得到正確的陰影效果。下圖分別是Shadow method=simple和segments時的效果。
雖然在這個例子中區(qū)別非常微妙。但是在某些復雜的相互交錯的場景中會有致命的差別。我暫時舉不出特別好的例子,只是建議大家盡量使用segaments陰影模式。
現在說明真正貼近自然的玻璃陰影制作方法,首先是使用mia材質,然后注意advanced refraction卷閘欄下面的refractive caustic與transparent shadow兩個選項。默認是勾選后者的,就是簡單的透明陰影,而我們想要使用焦散陰影,于是勾選前者。Caustic就是焦散了。
這個時候你渲染還看不到任何區(qū)別。只有當你勾選上渲染心里的caustic以及燈光上的發(fā)射光子,才會有效果。
實心的陰影已經出現了,并且有一些微弱的焦散效果,對光子等等進行一系列調節(jié),來加強焦散效果。
好的,這樣就得到了不錯的焦散效果。由于模型本身的限制,焦散的形狀并不是特別好看,大家可以拿更好的模型來做做看。焦散的調節(jié)是很簡單的,教程也好找,我就不說了。
朱峰社區(qū)網頁版(手機掃描-分享-添加到屏幕)
朱峰社區(qū)微信公眾號(微信掃一掃-關注)
未知用戶
2005-2025 朱峰社區(qū) 版權所有 遼ICP備2021001865號-1
2005-2025 ZhuFeng Community All Rights Reserved
VIP