開講之前,先普及一點(diǎn)小知識贱鄙,有關(guān)數(shù)據(jù)類型劝贸。
下面講到的數(shù)據(jù)類型rgb部分很好理解,float/int/string會有些不好懂逗宁。
float 是浮點(diǎn)型(浮點(diǎn)數(shù))映九,能記錄小數(shù)點(diǎn),很多信息變量都是用這個(gè)記錄的瞎颗;
int 是integer件甥,整數(shù),你可以簡單理解為不含小數(shù)點(diǎn)哼拔;
vector 向量引有,其實(shí)就是三個(gè)float組成的(三個(gè)方向xyz);
string 字符串管挟,就是文本信息;
所以float to vector就是需要用三個(gè)float組裝一個(gè)vector轿曙。
User Date Shader也是個(gè)神奇的著色器。當(dāng)為多個(gè)模型添加同一種材質(zhì)時(shí)僻孝,利用User Date可以使這多個(gè)模型產(chǎn)生不一樣的變化,比如不一樣的顏色守谓、高光穿铆、漫反射等,也就是說斋荞,User Date可以允許一種材質(zhì)擁有多種變化荞雏。
User Date Shader中有5個(gè)節(jié)點(diǎn),控制不同元素:
下面我們來分別講解一下這幾個(gè)節(jié)點(diǎn)的用法。
節(jié)點(diǎn)中的 【int(integer)】/【rgb】/【rgba】/【string】凤优,指數(shù)據(jù)類型悦陋,不同數(shù)據(jù)類型能夠控制不同屬性,通過后面的實(shí)例運(yùn)用會比較好理解筑辨,前面的參數(shù)介紹了解即可(有些可能不太好理解俺驶,可自動(dòng)略過)。
User_data_float
Float [浮點(diǎn)數(shù)]棍辕,在計(jì)算機(jī)科學(xué)中暮现,浮點(diǎn)是一種對于實(shí)數(shù)的近似值數(shù)值表現(xiàn)法,這種運(yùn)算通常伴隨著因?yàn)闊o法精確表示而進(jìn)行的近似或舍入楚昭。
因此栖袋,此節(jié)點(diǎn)可以用來控制材質(zhì)的鏡面反射(高光)等模糊數(shù)據(jù)(即使不用整數(shù)也可以表示的數(shù)據(jù))。
- 【Attribute】從當(dāng)前曲面著色點(diǎn)中讀取 float value[浮點(diǎn)值]抚太。
- 【Default】具有指定名稱的用戶數(shù)據(jù)不可用時(shí)塘幅,自動(dòng)輸出一個(gè)可用值。
User_data_int
Integer [整數(shù)]尿贫,在計(jì)算機(jī)科學(xué)中晌块,整數(shù)的概念指數(shù)學(xué)上整數(shù)的一個(gè)有限子集它也稱為整數(shù)數(shù)據(jù)類型,或簡稱整型數(shù)帅霜、整型匆背。通常是程序設(shè)計(jì)語言的一種基礎(chǔ)數(shù)據(jù)類型,例如java及C編程語言的int 數(shù)據(jù)類型然而這種基礎(chǔ)數(shù)據(jù)類型只能表示有限的整數(shù)身冀,其范圍受制于計(jì)算機(jī)的一個(gè)字組所包含的比特?cái)?shù)所能表示的組合總數(shù)钝尸。(維基百科抄的)
比如幾個(gè)人/幾盞燈。搂根。珍促。就要用整數(shù)來表示,不能說有1.5個(gè)人剩愧。(記得小學(xué)應(yīng)用題猪叙,有道題算人數(shù),我居然算出了小數(shù)點(diǎn)仁卷,老師說我把人砍成兩半了穴翩。。锦积。)
- 【Attribute】從當(dāng)前曲面著色點(diǎn)中讀取integer value[整數(shù)值]芒帕。
- 【Default】具有指定名稱的用戶數(shù)據(jù)不可用時(shí),自動(dòng)輸出一個(gè)可用值丰介。
User_data_rgb
此節(jié)點(diǎn)可控制材質(zhì)的RGB色彩背蟆。
- 【Attribute】從當(dāng)前曲面著色點(diǎn)中讀取RGB顏色鉴分。
- 【Default】具有指定名稱的用戶數(shù)據(jù)不可用時(shí),自動(dòng)輸出一個(gè)可用值带膀。
User_data_rgba
此節(jié)點(diǎn)可控制材質(zhì)的RGB色彩以及透明度志珍。
- 【Attribute】從當(dāng)前曲面著色點(diǎn)中讀取RGB顏色值以及Alpha值(透明度)。
- 【Default】具有指定名稱的用戶數(shù)據(jù)不可用時(shí)垛叨,自動(dòng)輸出一個(gè)可用值伦糯。
User_data_string
emmmm....這個(gè)咋說呢....請看后面的實(shí)例吧。
- 【Attribute】從當(dāng)前曲面著色點(diǎn)中讀取字符串点额。
- 【Default】具有指定名稱的用戶數(shù)據(jù)不可用時(shí)舔株,自動(dòng)輸出一個(gè)可用值。
這幾個(gè)節(jié)點(diǎn)的屬性都很簡單还棱,翻來覆去就倆载慈,但是人家卻可以實(shí)現(xiàn)很炫酷的效果呢~。
舉幾個(gè)栗子:
NO.1
User_data_float + User_data_rgb
準(zhǔn)備好的場景中有三個(gè)模型珍手,賦予了同一種材質(zhì)办铡,此例子中要實(shí)現(xiàn)這三個(gè)模型產(chǎn)生不同顏色以及鏡面反射。
① 新建一個(gè)標(biāo)準(zhǔn)材質(zhì)賦予場景中三個(gè)模型琳要;
② 打開標(biāo)準(zhǔn)材質(zhì)網(wǎng)絡(luò)編輯器寡具,新建 User_data_rgb 節(jié)點(diǎn),并連接到standard_surface>Main>Base>Color;默認(rèn)顏色為黑色稚补;
③ 為user_data_rgb的屬性[Attribute]輸入一個(gè)恰當(dāng)?shù)拿Q(可以任意輸入童叠,為了便于調(diào)用,最好使用有意義的名稱)课幕,此處我們要修改對象基本顏色厦坛,可命名為bcolor:
④ 需要為場景中的模型添加同樣的User data——名稱為bcolor,數(shù)據(jù)類型為color乍惊。我們先來為場景中的球體添加:
⑤ 現(xiàn)在我們可以在球體模型的屬性欄中看到 User Data的屬性了润绎,將顏色修改成“原諒綠”(不喜歡原諒綠的可以改成別的 嘻嘻)撬碟,運(yùn)行 IPR Window就可以看到顏色變化了:
⑥ 將設(shè)置好的User Data直接復(fù)制到另外兩個(gè)模型中:鼠標(biāo)放到 bcolor上(注意莉撇,是放到這個(gè)字上面呢蛤,不是色塊上,放到色塊上會調(diào)出其他屬性菜單)→ 右鍵>User Interface>Copy User Data Interface:
先來粘貼到玻璃杯:選中Glass模型→單擊User Data → 選擇Paste User Data Interface:
選中Paste User Data Interface之后稼钩,會自動(dòng)跳出Manage User Data對話框顾稀,單擊bclor,可以在右側(cè)的屬性欄中看到坝撑,數(shù)據(jù)已經(jīng)粘貼過來:
單擊OK静秆,完成復(fù)制;
重復(fù)一次巡李,將數(shù)據(jù)粘貼到另外一個(gè)模型中即可抚笔;
⑦ 現(xiàn)在就可以像調(diào)節(jié)球體模型顏色一樣,來調(diào)節(jié)其他兩個(gè)模型了侨拦,設(shè)置你喜歡的任意顏色殊橙,設(shè)置完成后,就可以在IPR Window中看到結(jié)果啦:
至此,你已經(jīng)學(xué)會了一個(gè)材質(zhì)多種顏色表現(xiàn)大法季研。
下面敞葛,我們來改變一下鏡面反射權(quán)重(Specular Weight):
接以上步驟:
①' 打開材質(zhì)網(wǎng)絡(luò)編輯器→新建user_data_float節(jié)點(diǎn)→連接到standard_surface>Main>Specular>Weight → Attribute:sweight:
②' 同改變顏色一樣,這里我們也要給模型賦予相同的用戶屬性:選中要添加的模型→屬性欄中選擇User Data>Add User Data(和上面添加用戶數(shù)據(jù)一樣樣的)与涡;
③' 自動(dòng)跳出Manage User Data對話框惹谐,修改:
Name:sweight [名稱:sweight] /
Data Tyupe:Float [數(shù)據(jù)類型:浮點(diǎn)] /
Interface:Float Slider [控制界面:浮點(diǎn)滑塊] /
Unit:Real [單位:實(shí)數(shù)] /
Step:0.05 [步幅:0.05] /
Max:1 [最大值:1]:
這地方之所以這么改,是因?yàn)槲覀儸F(xiàn)在用它來控制Specular Weight驼卖,參數(shù)設(shè)置就要和Specular Weight的屬性保持一致氨肌,比如Specular Weight的最大值是1,因此將Default Value Max設(shè)置為1酌畜。
同上面復(fù)制方法一樣怎囚,將設(shè)置好的用戶數(shù)據(jù)復(fù)制給其他兩個(gè)模型。
現(xiàn)在我們就可以愉快的來控制模型的Specular Weight啦~
User_data_rgba和User_data_rgb 差不多桥胞,只是多了個(gè)alpha通道恳守,我就不過多演示了,大家可以多試一下埠戳,很簡單井誉。
NO.2
User_data_int
這個(gè)節(jié)點(diǎn)用的頻率很低,我自己也不常用整胃,這里稍微講一下颗圣,大家可以自由拓展更多用法。
本顆栗子屁使,我們將來展示如何用User_data_int控制Switch rgba [rgba開關(guān)]
所用節(jié)點(diǎn):flat / switch_raba / user_data_int
① 打開準(zhǔn)備好的場景在岂,場景很簡單,包含演示用的一個(gè)球體蛮寂,一個(gè)立方體蔽午,一個(gè)六面體;
② 新建一個(gè)標(biāo)準(zhǔn)材質(zhì) standard_surface酬蹋,并賦予給球體和立方體及老、六面體抽莱;
③ 打開標(biāo)準(zhǔn)材質(zhì)的網(wǎng)絡(luò)編輯器 Shader Network Editor,新建switch_rgba節(jié)點(diǎn)骄恶,連接到standard_surface>Main>Base>Clor;
④ 新建三個(gè)falt節(jié)點(diǎn)食铐,分別重命名為pink/orange/blue(自由命名,最好是有意義的僧鲁,否則幾季都忘了虐呻,此處我使用顏色來命名),將flat顏色修改為對應(yīng)顏色寞秃,分別連接到switch_rgba>Default>Input1/2/3:
⑤ 此時(shí)用Switch_rgba已經(jīng)可以控制變換設(shè)置好的flat顏色:
⑥ 新建User_data_int節(jié)點(diǎn)春寿,連接到 switch_rgba>Default>Index,并將user_data_int節(jié)點(diǎn)的 Attribute命名為cswitch:
⑦ 為模型添加User Data朗涩,方法同上;點(diǎn)擊Add User Data之后自動(dòng)跳出Manage User Data對話框堂淡;
修改屬性:
Name:cswitch [名稱:cswitch] /
Data Tyupe:Integer [數(shù)據(jù)類型:整數(shù)] /
Interface:Quicktab Radio [控制界面:快速標(biāo)簽] /
Separator:Cycle Option:1馋缅;pink / 2;orange / 3绢淀;blue[分割器:循環(huán)選項(xiàng)]
設(shè)置完成后皆的,將User Data復(fù)制給其他兩個(gè)模型覆履,就可以在模型的 User Data屬性中看到設(shè)置好的快速標(biāo)簽了:
⑧ 接下來是見證奇跡的時(shí)刻、费薄、硝全、、開始愉快的改變模型顏色吧~
以上楞抡,User_data_int 》》》》OVER
NO.3
User_data_string
此節(jié)點(diǎn)有一種大規(guī)模生化武器既視感 》》》》》
接下來伟众,我們將運(yùn)用User_data_string快速實(shí)現(xiàn)這個(gè)效果↓
使用的場景也是很簡單的場景,準(zhǔn)備了10個(gè)球召廷,以及10張材質(zhì)貼圖↓
接下來是展示技術(shù)的時(shí)刻:
① 打開standard_surface的Shader Network Editor先紫,新建Layer_rgba節(jié)點(diǎn),連接到standard_surface>Main>Base>Color;
② 新建utility節(jié)點(diǎn)筹煮,連接到 layer_rgba節(jié)點(diǎn)Main>Layer2>Input遮精,調(diào)整utility參數(shù),此處我們用utility控制球的底色败潦,因此設(shè)置如下:
③ 新建image節(jié)點(diǎn)本冲,連接到 layer_rgba節(jié)點(diǎn)Main>Layer1>Input准脂,image會自動(dòng)跳出載入貼圖對話框,選擇取消即可眼俊,此處我們要使用user_data_string來控制多張貼圖意狠;image各項(xiàng)參數(shù)保持默認(rèn)即可粟关;
④ 新建user_data_string節(jié)點(diǎn)疮胖,連接到 image節(jié)點(diǎn)Image attribute>Image name,并為string設(shè)置Attribute闷板,此處我使用的是 numtex:
P.S.我在使用是user_data_string的時(shí)候遮晚,最初沒有設(shè)置Default的值性昭,就一直出現(xiàn)渲染錯(cuò)誤,剛開始以為是對象的user_data路徑或者名字含有特殊字符县遣,但是都不是糜颠,怎么修改都還是出現(xiàn)錯(cuò)誤提示:
ERROR| [texturesys] Invalid image file""
,后來給Default添加值以后萧求,就奇跡般的變好了其兴,在Arnold官方論壇問開發(fā)大神們,也沒能給出一個(gè)合理的解釋ㄟ( ▔, ▔ )ㄏ我猜這是個(gè)bug夸政,噓——user_data其他節(jié)點(diǎn)都不用添加Default可以直接使用元旬。真是個(gè)神奇的節(jié)點(diǎn),反正守问。匀归。。如果你也遇到了同樣的問題耗帕,添加一個(gè)Default就好了穆端。
全部節(jié)點(diǎn)連接邏輯如下圖:
⑤ 接下來,可以暫時(shí)不用管節(jié)點(diǎn)了仿便,回到C4D主界面体啰,為10個(gè)球體對象分別添加user_data,添加方法同前面例子相同,參數(shù)設(shè)置如下:
添加成功之后探越,便可以在對象的屬性欄看到user_data:
P.S. 貼圖路徑查找方法:在文件夾中選擇你要用的那張圖片钦幔,右鍵>屬性枕屉,在屬性對話框中直接復(fù)制路徑,注意鲤氢,此處復(fù)制的只有路徑搀擂,沒有該圖片名稱西潘,在user_data輸入的時(shí)候要自己加上圖片名稱,注意用 ‘ \ ’ 分割哨颂。
⑥ 將user_data值復(fù)制給剩下的9個(gè)對象喷市,numtex路徑對應(yīng)之前準(zhǔn)備好的10張數(shù)字貼圖路徑,例如Sphere.1對應(yīng)貼圖num-01.png威恼,就將numtex路徑改為num-01.png的路徑品姓,Sphere.2對應(yīng)貼圖num-02.png,Sphere.3對應(yīng)貼圖num-03.png....以此類推箫措,如果前面貼圖名稱設(shè)置的很統(tǒng)一缀蹄,就只需要修改路徑最后的數(shù)字即可:
⑦ 以上步驟都完成之后挑格,運(yùn)行IPR Window就可以看見大概的樣子了境钟;
⑧ 最后再調(diào)整貼圖UV漱挚,調(diào)整到自己覺得滿意的數(shù)值,就大功告成啦~
敲黑板:
以上參數(shù),包括最終實(shí)現(xiàn)的這個(gè)效果驾锰,只是為了給大家演示user_data_string的用法卸留,大家可以自由嘗試各種效果,比如你可以嘗試怎么給一副象棋用user_data_string添加貼圖稻据,等等等艾猜。
請盡情發(fā)揮自己的想象力并多動(dòng)手實(shí)踐。
以上~
Good good study捻悯!Day day up匆赃!
版權(quán)所有,禁止私自轉(zhuǎn)載今缚。
轉(zhuǎn)載請私信算柳。