Arnold for C4D 15 【材質(zhì)(九)】User Date Shader

開講之前,先普及一點(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ì)擁有多種變化。

圖中三個(gè)模型使用的是同一種材質(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ù))。

User_date_float屬性菜單
  • 【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),老師說我把人砍成兩半了。。。)

User_date_int屬性菜單
  • 【Attribute】從當(dāng)前曲面著色點(diǎn)中讀取integer value[整數(shù)值]。
  • 【Default】具有指定名稱的用戶數(shù)據(jù)不可用時(shí),自動(dòng)輸出一個(gè)可用值。
User_data_rgb

此節(jié)點(diǎn)可控制材質(zhì)的RGB色彩。

User_date_rgb屬性菜單
  • 【Attribute】從當(dāng)前曲面著色點(diǎn)中讀取RGB顏色。
  • 【Default】具有指定名稱的用戶數(shù)據(jù)不可用時(shí),自動(dòng)輸出一個(gè)可用值。
User_data_rgba

此節(jié)點(diǎn)可控制材質(zhì)的RGB色彩以及透明度。

User_date_rgba屬性菜單
  • 【Attribute】從當(dāng)前曲面著色點(diǎn)中讀取RGB顏色值以及Alpha值(透明度)。
  • 【Default】具有指定名稱的用戶數(shù)據(jù)不可用時(shí),自動(dòng)輸出一個(gè)可用值。
User_data_string

emmmm....這個(gè)咋說呢....請看后面的實(shí)例吧。

User_date_string屬性菜單
  • 【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。我們先來為場景中的球體添加:

選中該模型→打開Uaer data>Add User Data...→會自動(dòng)跳出Manage User Data對話框(如下圖)
Name:bcolor / Data Type:Color,點(diǎn)擊OK,確認(rèn)

⑤ 現(xiàn)在我們可以在球體模型的屬性欄中看到 User Data的屬性了,將顏色修改成“原諒綠”(不喜歡原諒綠的可以改成別的 嘻嘻),運(yùn)行 IPR Window就可以看到顏色變化了:

其余兩個(gè)模型依舊是黑色,這是由節(jié)點(diǎn)的默認(rèn)顏色定義的

⑥ 將設(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é)果啦:

可以在材質(zhì)欄中看到,真的只使用了這一個(gè)材質(zhì),童叟無欺

至此,你已經(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_rgbaUser_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顏色:

別著急 ,這還不是我們的最終目的,請繼續(xù)往下看

⑥ 新建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)]

Cycle Option值對應(yīng)flat,“1;pink”指命名為pink的flat控制Input1接口

設(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è)效果↓

請自動(dòng)忽略噪點(diǎn)

使用的場景也是很簡單的場景,準(zhǔn)備了10個(gè)球,以及10張材質(zhì)貼圖↓

場景中包含10個(gè)編組的球體,已經(jīng)新建一個(gè)standard_surface,并賦予給了10個(gè)球體模型
準(zhǔn)備好的材質(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

命名規(guī)則同前面例子,可以隨意命名,最好是有意義的名字

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:

numtex輸入框里輸入的是準(zhǔn)備好的貼圖路徑,路徑中不要出現(xiàn)中文,容易出現(xiàn)錯(cuò)誤

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ù)值,就大功告成啦~

選擇貼圖工具,選中要調(diào)整的材質(zhì),調(diào)出貼圖屬性標(biāo)簽




敲黑板:
以上參數(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)載請私信。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Unity shader 官網(wǎng)文檔全方位學(xué)習(xí)(一)What?? Shader,看起來好高級的樣子,是的,這是Uni...
    狼之獨(dú)步閱讀 6,297評論 0 12
  • <轉(zhuǎn)>我也忘了轉(zhuǎn)自哪里,抱歉,感謝原作者 什么是Shader Shader(著色器)是一段能夠針對3D對象進(jìn)行操作...
    星易乾川閱讀 5,861評論 1 16
  • 這是一個(gè)真實(shí)的故事,故事名稱我們叫它做“一碗湯面”。 這個(gè)故事是17年前的12月31日,也就是除夕夜,發(fā)生在日本札...
    何須灑酒閱讀 397評論 0 3
  • 最近,佛系生活,突然就火了,感覺無欲無求似乎是一種很好的生活狀態(tài),當(dāng)生活沒有目標(biāo),沒有方向的時(shí)候,安逸于是從心...
    yyfyyf閱讀 379評論 0 0
  • 今日心得:突發(fā)奇想的拍照。感覺還是很有創(chuàng)意的
    然谷中醫(yī)閱讀 187評論 0 0

友情鏈接更多精彩內(nèi)容