
開講之前,先普及一點(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)載請私信。