C4D材質(zhì)原理揭秘筆記
前言】
本文轉(zhuǎn)載網(wǎng)絡(luò),文章鏈接再文末??芍苯荧@取原文鏈接。模型建立好了以后,通常都要賦予材質(zhì),這意味著給這個(gè)模型對(duì)象(這些模型本質(zhì)就是一個(gè)由面組成的空殼)賦予了表面的屬性,用于計(jì)算模擬真實(shí)的物理效果。
聽說過“三分模型七分貼圖”的說法嗎?模型制作的再好(當(dāng)然它是基礎(chǔ)),如果沒有紋理貼圖,那它也缺少表面的細(xì)節(jié),更缺少“靈氣”和“神韻”不是嗎?也就是大家所說,沒有質(zhì)感。



質(zhì)感是什么?光線照射物體所表現(xiàn)出來的視覺效果。在三維軟件中是通過設(shè)定材質(zhì)、燈光、陰影和環(huán)境等要素,由渲染器調(diào)用不同的著色器進(jìn)行渲染(模擬計(jì)算),對(duì)視覺形態(tài)的再現(xiàn)的過程。
說到渲染(Render)涉及很多要素,這里為了將來學(xué)習(xí)紋理繪制打基礎(chǔ),所以簡(jiǎn)單談?wù)劜馁|(zhì)、重點(diǎn)研究學(xué)習(xí)貼圖原理和應(yīng)用。下面我以CG人能理解的方式進(jìn)行研究,盡量回避數(shù)學(xué)算法。(太深了,我也不會(huì),嘿嘿)
【研究】
一、明確幾個(gè)概念:
1、 渲染 Render:使用軟件從模型生成圖像的過程。說白了就是把三維場(chǎng)景特殊數(shù)據(jù)格式計(jì)算,轉(zhuǎn)化為位圖圖像或圖像序列的過程。(XYZ到XY,從三維到二維)。
2、渲染器(renderer) :渲染工作是通過渲染器完成的。是實(shí)現(xiàn)渲染的特定算法(mental ray ,vray,Arnold)。主要兩類:一個(gè)光線跟蹤,一個(gè)是光能傳遞。每個(gè)獨(dú)立渲染器都有適合自己的材質(zhì)和燈光,當(dāng)然它也支持它所依賴的三維環(huán)境的標(biāo)準(zhǔn)燈光和材質(zhì),但效果沒有它自己的好。
3、著色器(shader)是一組提供計(jì)算機(jī)圖形資源在執(zhí)行渲染時(shí)使用的指令,負(fù)責(zé)計(jì)算目標(biāo)顏色。分為定點(diǎn)著色器,幾何著色器,像素著色器等,應(yīng)用于GPU流水線的。在一般情況下,著色器是可以直接在圖形處理單元(GPU)上運(yùn)行的程序。換句話說,著色器類似一個(gè)匯編程序。你可以通過使用匯編編程的CPU,你也可以使用頂點(diǎn)和像素著色器的GPU編程。
糊涂了吧? 說白了Shader(著色器)實(shí)際上就是一小段程序,它負(fù)責(zé)將輸入的Mesh(網(wǎng)格模型)以指定的方式和輸入的貼圖或者顏色等組合作用,然后輸出。繪圖單元可以依據(jù)這個(gè)輸出來將圖像繪制到屏幕上。輸入的貼圖或者顏色等,加上對(duì)應(yīng)的Shader,以及對(duì)Shader的特定的參數(shù)設(shè)置,將這些內(nèi)容(Shader及輸入?yún)?shù))打包存儲(chǔ)在一起,得到的就是一個(gè)Material(材質(zhì))。所以說Shader并沒有什么特別神奇的,它只是一段規(guī)定好輸入(顏色,貼圖等)和輸出(渲染器能夠讀懂的點(diǎn)和顏色的對(duì)應(yīng)關(guān)系)的程序。而Shader開發(fā)者要做的就是根據(jù)輸入,進(jìn)行計(jì)算變換,產(chǎn)生輸出而已。C4D中已經(jīng)由官方開發(fā)好了的Shader為你服務(wù),等你調(diào)用。如果你對(duì)渲染效果不滿意,總想渲染出自己想要的風(fēng)格,而這些現(xiàn)成的Shade又滿足不了你,怎么辦?有能力自己寫一個(gè)吧!
二、C4D材質(zhì)
第一部分:材質(zhì)(Material)用來表述物體表面所呈現(xiàn)的顏色、光澤、透明度、凹凸、反射等屬性的著色器集合。C4D基本材質(zhì)的各個(gè)通道就對(duì)應(yīng)著物體的不同屬性的數(shù)據(jù)描述。(描述材質(zhì)實(shí)際上是只是一種材質(zhì)函數(shù),全名為BRDF(Bidirectional Reflectance Distribution Function)雙向反射分布函數(shù),數(shù)學(xué)上,完全的材質(zhì)函數(shù)應(yīng)當(dāng)是BxDF,即包括了反射透射等等所有的效應(yīng)。因此BRDF只是BxDF的一種,除此之外,還有透射函數(shù),散射函數(shù)等等。但考慮到我們處于實(shí)時(shí)的框架下,故近似為BRDF,忽略其他的BxDF。)
通過材質(zhì)各個(gè)通道的屬性來模擬描繪現(xiàn)實(shí)世界的不同物體。
第二部分原理:
材質(zhì)的各種屬性是如何模擬現(xiàn)實(shí)的光學(xué)物理現(xiàn)象的呢?這必須從物理學(xué)上談起。
一、光與物質(zhì)的交互
光是一種橫向傳播的電磁波,電磁波的波長(zhǎng)范圍非常廣,但只有390~760nm之間的一段波譜是人眼可見到的,也就是在圖形學(xué)里對(duì)渲染著色起作用的部分。另外因?yàn)楣庥胁6笮缘木壒?,有時(shí)候我們?cè)趫D形學(xué)里也會(huì)把光做為光子(photon)來處理。
1、當(dāng)光投射到傳感器(眼睛,照相機(jī)等)上時(shí),顏色和亮度就會(huì)被吸收并感知,而光與物質(zhì)交互后被感知的,就是物體的顏色。
2、均勻介質(zhì)
內(nèi)部密度相同的物質(zhì),意味著它有唯一的折射率,對(duì)應(yīng)透明的均勻物質(zhì)來講(如水,玻璃),光通過時(shí),并不會(huì)改變光的顏色或強(qiáng)度。

3、光被吸收(absorption)。
而當(dāng)物質(zhì)對(duì)某一種可見光譜有吸收率的時(shí)候,那么,光就會(huì)隨著在物質(zhì)內(nèi)的傳播距離而逐漸被吸收,而光的方向并不發(fā)生改變。

4、非均勻物質(zhì)
當(dāng)非均勻物質(zhì)內(nèi)部的折射率非常突然的時(shí)候,這時(shí)就會(huì)發(fā)生散射(Scattering)現(xiàn)象,光會(huì)被分割為多個(gè)方向,但光的總量并不會(huì)發(fā)生變化。


5、自發(fā)光”emission“。物質(zhì)還可能因?yàn)槠渌芰堪l(fā)出新的光。

總之,光與物質(zhì)交互的三種方式,吸收,散射,發(fā)光。

二、光與平面的交互
光與物質(zhì)交互發(fā)生在物體表面時(shí),關(guān)于光與空氣和物質(zhì)之間的散射效果。這個(gè)時(shí)候平面散射光會(huì)分為兩部分:一部分進(jìn)入平面的部分(折射,在物體內(nèi)部傳播中被吸收或散射),另一部分從平面出去的部分(反射)。
1、鏡面反射:一個(gè)假設(shè)完美無限光學(xué)平坦的平面(簡(jiǎn)稱光學(xué)平面)反射效果,平面兩側(cè)的空氣和物體有各自的折射率。(注意模型底下反射的是地面)
2、非鏡面反射:但實(shí)際上,平面大多都不是光學(xué)平面(除了鏡子或鏡頭等),而是一種微幾何體(Microgeometry),表面都會(huì)有一些比可見光波長(zhǎng)要大的不規(guī)則凹凸,但又小到無法覆蓋一個(gè)像素或者采樣點(diǎn),所以,我們就把這種非光學(xué)平面。


3、光滑 roughness
平面相對(duì)平滑時(shí),表面方向的變化也比較輕微,從而反射光的方向變化也較小,有了較清晰的反射。而下面的表面粗糙,表面方向的變化范圍也較廣泛,反射光的方向變化也比較大,出現(xiàn)了模糊的反射。
4、漫反射光與鏡面光(diffuse and specular)
從平面直接反射的部分稱為鏡面反射光(Specular),來源于拉丁語的“Mirror”,鏡面光的顏色,通常就是燈光的顏色,只有照射在金屬上才會(huì)改變顏色(實(shí)際是金屬吸收了特定波長(zhǎng)的光),傳入到物體內(nèi)部,而經(jīng)過折射,被材質(zhì)吸收(轉(zhuǎn)變?yōu)闊崮埽?,或者?nèi)部進(jìn)行散射,一些散射光最終會(huì)重新返回從平面折射出來,并被攝像機(jī)或眼睛所捕捉到,稱為漫反射光(Diffuse)。
漫反射光被物質(zhì)吸收并散射后,會(huì)成為不同波長(zhǎng)的光,這也就給予了物體顏色,比如物體吸收了藍(lán)色以外的光,那物體就是藍(lán)色的,而因?yàn)樯⑸涞幕靵y比較均勻,從每個(gè)方向看起來都是一樣,所以這點(diǎn)和鏡面光不一樣。也可以使用這個(gè)名字albedo來描述。

5、金屬和非金屬
物體內(nèi)部的折射光的作用,取決于物體內(nèi)部的組成,內(nèi)部組成的不同,可以分為,金屬(metal)導(dǎo)體,電介質(zhì)(Dielectrics)絕緣體和半導(dǎo)體(Semiconductors ),在處理物體時(shí)簡(jiǎn)單的分組為金屬和非金屬就可以了。金屬會(huì)吸收所有的折射光,而且通常會(huì)被絕緣體的反射率要高,通常的反射率要達(dá)到60%~90%,而絕緣體則是0%~20%,反射率高,就防止了入射光被吸或折射,這樣,金屬就有了”閃亮“的外觀。

金屬的折射光能量都立刻被自由電子吸收,而非金屬(絕緣體),光會(huì)在內(nèi)部進(jìn)行吸收和散射活動(dòng),最后,一些折射光會(huì)通過散射,重新從入射平面反方向射出
6、非金屬的折射光會(huì)進(jìn)行散射
導(dǎo)體的反射會(huì)跨越光譜,所以反射是有顏色的,雖然顏色反射在導(dǎo)體里比較罕見的,但在一些日常的材質(zhì)里(金,銅,黃銅)還是可以看到這種效果,而絕緣體的反射通常是他們的本來顏色,因?yàn)榻饘贂?huì)吸收所有的穿透光,也就沒有任何漫反射(diffuse)部分,但金屬氧化的部分和一些表面殘留物還是會(huì)散射少量的光。不同材質(zhì)的漫反射顏色,金屬為0。
7、次級(jí)表面散射(Subsurface Scattering)
從前面的圖中,可以看到折射后的散射光從平面不同的點(diǎn)發(fā)射出來,和原始的入射點(diǎn)的距離也各不相同,可以統(tǒng)稱為次級(jí)表面散射光,根據(jù)散射出的距離和入射點(diǎn)像素的大小的關(guān)系,可以分為兩種情況:
如左圖所示,當(dāng)像素的尺寸大于入射到出射點(diǎn)的距離時(shí),這個(gè)距離就可以被忽略,可以認(rèn)為這個(gè)平面散射出的光和入射光是在相同點(diǎn)上,也就是右圖的樣子,也就是我們常說的漫反射。

當(dāng)像素小于出射到入射距離時(shí),每個(gè)點(diǎn)的著色就會(huì)受到其他光入射到其他點(diǎn)的影響,也就是常說的“次級(jí)表面散射”技術(shù),很重要的一點(diǎn)是,它和普通的漫反射著色是一種物理現(xiàn)象(都是折射光的次級(jí)表面散射),唯一不同的就是散射的距離與觀察點(diǎn)大小的關(guān)系,一個(gè)通常被認(rèn)為是“次級(jí)表面散射”的表現(xiàn),當(dāng)在較遠(yuǎn)的距離觀察時(shí),就可以被認(rèn)為是漫反射著色(例如遠(yuǎn)距離角色的皮膚),而“正規(guī)的漫反射著色”在很近距離觀察時(shí),也會(huì)有次級(jí)表面散射的效果。
8、Fresnel現(xiàn)象
菲尼爾表現(xiàn)的是材質(zhì)的反射率和入射角(也就是光源入射向量和平面法線向量的夾角)的對(duì)應(yīng)關(guān)系,也就是說,入射光的角度越大,反射率也會(huì)越強(qiáng)。以水面為例,正常入射時(shí)只有3%的反射,而水平時(shí)則幾乎到100%。
下圖是水折射的菲尼爾現(xiàn)象,看近處和遠(yuǎn)處對(duì)比。離觀測(cè)者越近折射越強(qiáng)烈,越遠(yuǎn)越模糊。

下圖是水表面反射菲尼爾現(xiàn)象,離觀測(cè)者越遠(yuǎn)反射越強(qiáng)烈,越近越模糊。

8、各向異性
前文已經(jīng)提到了表面的微幾何體。從宏觀來看,在我們渲染模型網(wǎng)格時(shí),使用凹凸貼圖或法線貼圖就可以描述表面小的細(xì)節(jié)。但還是有一些微小的凹陷,裂縫或突起,而用肉眼是很難看清楚的,而且這些微幾何體是有規(guī)律分布的,它小到連正常大小的法線貼圖也無法來表現(xiàn),雖然肉眼無法看到,但這些微觀特征,還是對(duì)Diffuse和Specular產(chǎn)生了影響。光雖然向四處反射,但是有規(guī)律的,在模型表面有的地方強(qiáng),有的地方弱,有的沒有,這就是各個(gè)方向不同。
第三部分材質(zhì)和通道的優(yōu)先級(jí):
C4D標(biāo)準(zhǔn)材質(zhì)的各通道計(jì)算的優(yōu)先級(jí),一般是從上到下。先計(jì)算顏色通道,然后再計(jì)算漫射通道,依次類推,這樣最后顯示的結(jié)果,卻是后計(jì)算的通道要影響先計(jì)算的通道效果。仔細(xì)看下圖:

1、顏色通道設(shè)置為紅色,其他不勾選,渲染器計(jì)算,最后顯示結(jié)果,當(dāng)然是紅色。
2、如果再勾選漫射通道,為其添加一個(gè)噪波貼圖(SHADE程序貼圖)。渲染器先計(jì)算顏色通道為紅色,后計(jì)算漫射通道的噪波,顯示的結(jié)果是后者影響了顏色通道紅色的顯示,你也可以簡(jiǎn)單理解這是一種層與層之間的混合覆蓋。
3、如果繼續(xù)勾選發(fā)光通道,參數(shù)設(shè)為最大。那么最后計(jì)算的結(jié)果,它把前兩個(gè)通道的效果全部覆蓋掉了。

4、再繼續(xù)勾選透明通道,把亮度設(shè)為100%,它的影響簡(jiǎn)直是太大了,全部透明。也就是說顏色、漫射、發(fā)光通道計(jì)算完之后,沒有被顯示,最后顯示的是透明通道的結(jié)果。但是CPU的活還是干了。

5、不選擇透明,勾選反射,你會(huì)發(fā)現(xiàn)它的影響也是很大的。顏色、漫射、發(fā)光通道白忙活了,但是CPU的活還是干了。
6、勾選環(huán)境通道,它其實(shí)是一個(gè)優(yōu)化計(jì)算方法。它是假的反射,特點(diǎn)速度快,缺點(diǎn)是假。在其紋理通道載入一個(gè)貼圖,它就會(huì)顯示反射的樣子。如果你勾選反射通道,它就不顯示。如何同時(shí)顯示呢?仔細(xì)看圖就知道了。
(答案:把發(fā)射通道的衰減一定設(shè)為添加)
7、繼續(xù)向下勾選煙霧,它的影響也不小啊。雖然它是最后計(jì)算的,但效果覆蓋掉了上邊其他通道的效果。
8、勾選凹凸通道,添加一個(gè)噪波文件。它影響上邊的各個(gè)通道,顏色、高光、反射通道。

9、下邊這個(gè)更厲害,阿爾法通道。
10、輝光實(shí)際上是后期渲染運(yùn)算。它的效果影響上面的各個(gè)通道。

11、這是置換通道,也是如此。

以上,簡(jiǎn)單研究一個(gè)材質(zhì)的各個(gè)層之間的相互影響。
不同的材質(zhì)如果賦予一個(gè)模型,在渲染的時(shí)候如何呢?
12、建立三個(gè)材質(zhì),紅綠藍(lán)。

13、把它們都賦予一個(gè)模型球體。渲染結(jié)果會(huì)是什么呢?渲染器的計(jì)算的優(yōu)先級(jí)是從左到右,那么最后的顯示效果一定是右側(cè)的藍(lán)色了。因?yàn)檫@些材質(zhì)都不透明,也沒有阿爾法通道,他們之間也沒有設(shè)置混合運(yùn)算。最后計(jì)算的藍(lán)色就會(huì)覆蓋前面的。
14、測(cè)試一下,果然如此。(場(chǎng)景中沒有用燈光,用全局光渲染,場(chǎng)景是HDRI貼圖照亮的)

三、C4D貼圖
才說道重點(diǎn)。
為什么要用貼圖?雖然材質(zhì)定義了物體表面的顏色、光澤、透明度、凹凸等屬性,但各個(gè)通道中的設(shè)置:一是非常簡(jiǎn)單,二是它是對(duì)整體進(jìn)行控制的。對(duì)于模型不同地方不同的屬性,很難描述復(fù)雜情況。所以用貼圖來實(shí)現(xiàn)對(duì)復(fù)雜世界的描述。
貼圖(Texture 或Map),在C4D中其實(shí)就是一種SHADE。在標(biāo)準(zhǔn)材質(zhì)的各個(gè)通道,除了有基本屬性設(shè)置之外,幾乎都有一個(gè)紋理通道,可以填充可以是texture或shader。

1、Texture(紋理)通常與2D 位圖圖像或圖像序列(視頻)相聯(lián)系。而2D圖像有一些局限性,因?yàn)樗鼈円蕾囉趫D像的精度。所以當(dāng)一個(gè)物體的貼圖精度較低而渲染出的圖要求精度較高時(shí),紋理貼圖會(huì)不清晰或不真實(shí),因?yàn)樗怯梢粋€(gè)小的圖拉伸而來的。(其實(shí)它也是通過SHADE載入的)
2、 Shader也就程序紋理,是一段程序生成的。它的精度可以由參數(shù)決定,在渲染時(shí)按照燈光、環(huán)境等因素計(jì)算呈現(xiàn)效果。一是不會(huì)產(chǎn)生上述精度的麻煩,二是能夠隨著環(huán)境而變化。
它分為2Dshader 3Dshader。2Dshader似于2D圖像紋理。除了沒有精度問題,它在物體上的投影方式與2D 的圖片一樣有平面、柱體、球體等。它依據(jù)U、V 將圖片投射在物體表面。3Dshader 可以在真實(shí)的空間中分布,因?yàn)樗腔赨、V、W 三個(gè)坐標(biāo)方向的,W 給了3D shader體積感。由于3Dshader使用UVW 投影,所以它不會(huì)拉伸或扭曲。3D shader 是面對(duì)復(fù)雜物體時(shí),代替2D texture 和2D shader 的最佳方案。
3、Shader包含Channelshader和Volumetric Shaders 。
一是Channelshader:
可以被材質(zhì)的某個(gè)單獨(dú)的通道載入。如噪波、菲尼爾等。這些shader 被稱為通道shader

噪波是通道SHADE,它是程序紋理,可以通過參數(shù)控制紋理的形態(tài)。

通道SHADE所在的位置:
二是Volumetric Shaders :
C4D 有一套內(nèi)建的高級(jí)shader包:volumetric shaders,它們?cè)鰪?qiáng)了C4D 的材質(zhì)系統(tǒng)。volumetric shaders也包括了2D 和3D 的shader,它們提供了高級(jí)的特別控制用于制作基本材質(zhì)無法做到的效果,如金屬表面的刮痕,真實(shí)的透明、半透明等。它們?nèi)绮馁|(zhì)一樣獨(dú)立使用,不能被標(biāo)準(zhǔn)材質(zhì)載入紋理通道使用。
位置在于:
官方幫助截圖:
1、玻璃材質(zhì)

2、木紋材質(zhì)

3、有機(jī)生物材質(zhì)

4、金屬材質(zhì):

5、大理石材質(zhì)

6、NUKEI復(fù)合物材質(zhì)

多么好的材質(zhì),怎么就不用呢?初學(xué)者總是用標(biāo)準(zhǔn)材質(zhì)費(fèi)勁調(diào)試,效果也不見得比這個(gè)好。
個(gè)人理解總結(jié)如下:

程序紋理Shade:能夠生成一個(gè)變化紋理的著色器,又能保持圖像精度,如表面里的木紋、大理石、星空等等,可以通過參數(shù)改變形態(tài)。
功能性Shade:該Shade不能直接生成程序紋理,有的如PS濾鏡,對(duì)紋理起著調(diào)整和混合作用;有的有管理作用,如圖層、過濾等是泛稱。
舉例子說明,如下所示:
1、在材質(zhì)的凹凸通道中添加一個(gè)噪波,這是一個(gè)程序紋理Shade。
2、在此基礎(chǔ)上,再添加一個(gè)圖層,這是一個(gè)功能Shade(我這么叫)。
3、點(diǎn)擊圖層,進(jìn)入再點(diǎn)擊著色器(Shade),再添加一個(gè)棋盤(程序紋理Shade)。
4、然后,改變混合模式為變暗。

5、這個(gè)圖層所起到的作用就是“功能性”的,如同進(jìn)入PS一樣,處理多個(gè)紋理進(jìn)行混合管理,再生成一個(gè)新的紋理。
【后記】
1、C4D不支持PBR基于物理渲染,只能近似模擬光的物理現(xiàn)象。
這些知識(shí)是我學(xué)習(xí)的心得,不一定完全正確。但我認(rèn)為任何一個(gè)CG培訓(xùn)的老師如果進(jìn)行渲染教學(xué),首先應(yīng)該談光的物理原理,然后談渲染器利用材質(zhì)是如何模擬的,這個(gè)真是很重要。
追本溯源,才能融會(huì)貫通,最后才能隨心所欲不是嗎?
如果紋理貼圖的原理你都不知道,你還想學(xué)“紋理貼圖的繪制“,那簡(jiǎn)直是笑話!
作者:DIGITALMAN