Arnold for C4D 15 【材质(九)】User Date Shader

开讲之前,先普及一点小知识,有关数据类型
下面讲到的数据类型rgb部分很好理解,float/int/string会有些不好懂。

float 是浮点型(浮点数),能记录小数点,很多信息变量都是用这个记录的;
int 是integer,整数,你可以简单理解为不含小数点;
vector 向量,其实就是三个float组成的(三个方向xyz);
string 字符串,就是文本信息;
所以float to vector就是需要用三个float组装一个vector。

User Date Shader也是个神奇的着色器。当为多个模型添加同一种材质时,利用User Date可以使这多个模型产生不一样的变化,比如不一样的颜色、高光、漫反射等,也就是说,User Date可以允许一种材质拥有多种变化

图中三个模型使用的是同一种材质

User Date Shader中有5个节点,控制不同元素:

下面我们来分别讲解一下这几个节点的用法。

节点中的 【int(integer)】/【rgb】/【rgba】/【string】,指数据类型,不同数据类型能够控制不同属性,通过后面的实例运用会比较好理解,前面的参数介绍了解即可(有些可能不太好理解,可自动略过)。

User_data_float

Float [浮点数],在计算机科学中,浮点是一种对于实数的近似值数值表现法,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。
因此,此节点可以用来控制材质的镜面反射(高光)等模糊数据(即使不用整数也可以表示的数据)。

User_date_float属性菜单
  • 【Attribute】从当前曲面着色点中读取 float value[浮点值]
  • 【Default】具有指定名称的用户数据不可用时,自动输出一个可用值。
User_data_int

Integer [整数],在计算机科学中,整数的概念指数学上整数的一个有限子集它也称为整数数据类型,或简称整型数、整型。通常是程序设计语言的一种基础数据类型,例如java及C编程语言的int 数据类型然而这种基础数据类型只能表示有限的整数,其范围受制于计算机的一个字组所包含的比特数所能表示的组合总数。(维基百科抄的

比如几个人/几盏灯。。。就要用整数来表示,不能说有1.5个人。(记得小学应用题,有道题算人数,我居然算出了小数点,老师说我把人砍成两半了。。。)

User_date_int属性菜单
  • 【Attribute】从当前曲面着色点中读取integer value[整数值]
  • 【Default】具有指定名称的用户数据不可用时,自动输出一个可用值。
User_data_rgb

此节点可控制材质的RGB色彩。

User_date_rgb属性菜单
  • 【Attribute】从当前曲面着色点中读取RGB颜色。
  • 【Default】具有指定名称的用户数据不可用时,自动输出一个可用值。
User_data_rgba

此节点可控制材质的RGB色彩以及透明度。

User_date_rgba属性菜单
  • 【Attribute】从当前曲面着色点中读取RGB颜色值以及Alpha值(透明度)。
  • 【Default】具有指定名称的用户数据不可用时,自动输出一个可用值。
User_data_string

emmmm....这个咋说呢....请看后面的实例吧。

User_date_string属性菜单
  • 【Attribute】从当前曲面着色点中读取字符串。
  • 【Default】具有指定名称的用户数据不可用时,自动输出一个可用值。

这几个节点的属性都很简单,翻来覆去就俩,但是人家却可以实现很炫酷的效果呢~。

举几个栗子:

NO.1

User_data_float + User_data_rgb

准备好的场景中有三个模型,赋予了同一种材质,此例子中要实现这三个模型产生不同颜色以及镜面反射。

所用场景

① 新建一个标准材质赋予场景中三个模型;

② 打开标准材质网络编辑器,新建 User_data_rgb 节点,并连接到standard_surface>Main>Base>Color;默认颜色为黑色;

③ 为user_data_rgb的属性[Attribute]输入一个恰当的名称(可以任意输入,为了便于调用,最好使用有意义的名称),此处我们要修改对象基本颜色,可命名为bcolor


④ 需要为场景中的模型添加同样的User data——名称为bcolor,数据类型为color。我们先来为场景中的球体添加:

选中该模型→打开Uaer data>Add User Data...→会自动跳出Manage User Data对话框(如下图)
Name:bcolor / Data Type:Color,点击OK,确认

⑤ 现在我们可以在球体模型的属性栏中看到 User Data的属性了,将颜色修改成“原谅绿”(不喜欢原谅绿的可以改成别的 嘻嘻),运行 IPR Window就可以看到颜色变化了:

其余两个模型依旧是黑色,这是由节点的默认颜色定义的

⑥ 将设置好的User Data直接复制到另外两个模型中:鼠标放到 bcolor上(注意,是放到这个字上面,不是色块上,放到色块上会调出其他属性菜单)→ 右键>User Interface>Copy User Data Interface:

先来粘贴到玻璃杯:选中Glass模型→单击User Data → 选择Paste User Data Interface:

选中Paste User Data Interface之后,会自动跳出Manage User Data对话框,单击bclor,可以在右侧的属性栏中看到,数据已经粘贴过来:

单击OK,完成复制;

重复一次,将数据粘贴到另外一个模型中即可;

⑦ 现在就可以像调节球体模型颜色一样,来调节其他两个模型了,设置你喜欢的任意颜色,设置完成后,就可以在IPR Window中看到结果啦:

可以在材质栏中看到,真的只使用了这一个材质,童叟无欺

至此,你已经学会了一个材质多种颜色表现大法。

下面,我们来改变一下镜面反射权重(Specular Weight):

接以上步骤:
①' 打开材质网络编辑器→新建user_data_float节点→连接到standard_surface>Main>Specular>Weight → Attribute:sweight:

②' 同改变颜色一样,这里我们也要给模型赋予相同的用户属性:选中要添加的模型→属性栏中选择User Data>Add User Data(和上面添加用户数据一样样的);

③' 自动跳出Manage User Data对话框,修改:
Name:sweight [名称:sweight] /
Data Tyupe:Float [数据类型:浮点] /
Interface:Float Slider [控制界面:浮点滑块] /
Unit:Real [单位:实数] /
Step:0.05 [步幅:0.05] /
Max:1 [最大值:1]


这地方之所以这么改,是因为我们现在用它来控制Specular Weight,参数设置就要和Specular Weight的属性保持一致,比如Specular Weight的最大值是1,因此将Default Value Max设置为1。

同上面复制方法一样,将设置好的用户数据复制给其他两个模型。

现在我们就可以愉快的来控制模型的Specular Weight啦~


童叟无欺~~

User_data_rgbaUser_data_rgb 差不多,只是多了个alpha通道,我就不过多演示了,大家可以多试一下,很简单。



NO.2

User_data_int

这个节点用的频率很低,我自己也不常用,这里稍微讲一下,大家可以自由拓展更多用法。
本颗栗子,我们将来展示如何用User_data_int控制Switch rgba [rgba开关]

所用节点:flat / switch_raba / user_data_int

① 打开准备好的场景,场景很简单,包含演示用的一个球体,一个立方体,一个六面体;
② 新建一个标准材质 standard_surface,并赋予给球体和立方体、六面体;
③ 打开标准材质的网络编辑器 Shader Network Editor,新建switch_rgba节点,连接到standard_surface>Main>Base>Clor;


④ 新建三个falt节点,分别重命名为pink/orange/blue(自由命名,最好是有意义的,否则几季都忘了,此处我使用颜色来命名),将flat颜色修改为对应颜色,分别连接到switch_rgba>Default>Input1/2/3:


⑤ 此时用Switch_rgba已经可以控制变换设置好的flat颜色:

别着急 ,这还不是我们的最终目的,请继续往下看

⑥ 新建User_data_int节点,连接到 switch_rgba>Default>Index,并将user_data_int节点的 Attribute命名为cswitch:


⑦ 为模型添加User Data,方法同上;点击Add User Data之后自动跳出Manage User Data对话框;

修改属性:
Name:cswitch [名称:cswitch] /
Data Tyupe:Integer [数据类型:整数] /
Interface:Quicktab Radio [控制界面:快速标签] /
Separator:Cycle Option:1;pink / 2;orange / 3;blue[分割器:循环选项]

Cycle Option值对应flat,“1;pink”指命名为pink的flat控制Input1接口

设置完成后,将User Data复制给其他两个模型,就可以在模型的 User Data属性中看到设置好的快速标签了:


⑧ 接下来是见证奇迹的时刻、、、、开始愉快的改变模型颜色吧~

我变~我变~我变变变~

以上,User_data_int 》》》》OVER



NO.3

User_data_string

此节点有一种大规模生化武器既视感 》》》》》

接下来,我们将运用User_data_string快速实现这个效果↓

请自动忽略噪点

使用的场景也是很简单的场景,准备了10个球,以及10张材质贴图↓

场景中包含10个编组的球体,已经新建一个standard_surface,并赋予给了10个球体模型
准备好的材质贴图,注意贴图文件储存路径,后面会用到

接下来是展示技术的时刻:

① 打开standard_surface的Shader Network Editor,新建Layer_rgba节点,连接到standard_surface>Main>Base>Color;

② 新建utility节点,连接到 layer_rgba节点Main>Layer2>Input,调整utility参数,此处我们用utility控制球的底色,因此设置如下:


③ 新建image节点,连接到 layer_rgba节点Main>Layer1>Input,image会自动跳出载入贴图对话框,选择取消即可,此处我们要使用user_data_string来控制多张贴图;image各项参数保持默认即可;

④ 新建user_data_string节点,连接到 image节点Image attribute>Image name,并为string设置Attribute,此处我使用的是 numtex

命名规则同前面例子,可以随意命名,最好是有意义的名字

P.S.我在使用是user_data_string的时候,最初没有设置Default的值,就一直出现渲染错误,刚开始以为是对象的user_data路径或者名字含有特殊字符,但是都不是,怎么修改都还是出现错误提示: ERROR| [texturesys] Invalid image file"",后来给Default添加值以后,就奇迹般的变好了,在Arnold官方论坛问开发大神们,也没能给出一个合理的解释ㄟ( ▔, ▔ )ㄏ我猜这是个bug,嘘——
user_data其他节点都不用添加Default可以直接使用。真是个神奇的节点,反正。。。如果你也遇到了同样的问题,添加一个Default就好了。

全部节点连接逻辑如下图:


⑤ 接下来,可以暂时不用管节点了,回到C4D主界面,为10个球体对象分别添加user_data,添加方法同前面例子相同,参数设置如下:


添加成功之后,便可以在对象的属性栏看到user_data:

numtex输入框里输入的是准备好的贴图路径,路径中不要出现中文,容易出现错误

P.S. 贴图路径查找方法:在文件夹中选择你要用的那张图片,右键>属性,在属性对话框中直接复制路径,注意,此处复制的只有路径,没有该图片名称,在user_data输入的时候要自己加上图片名称,注意用 ‘ \ ’ 分割。

⑥ 将user_data值复制给剩下的9个对象,numtex路径对应之前准备好的10张数字贴图路径,例如Sphere.1对应贴图num-01.png,就将numtex路径改为num-01.png的路径,Sphere.2对应贴图num-02.png,Sphere.3对应贴图num-03.png....以此类推,如果前面贴图名称设置的很统一,就只需要修改路径最后的数字即可:

⑦ 以上步骤都完成之后,运行IPR Window就可以看见大概的样子了;

⑧ 最后再调整贴图UV,调整到自己觉得满意的数值,就大功告成啦~

选择贴图工具,选中要调整的材质,调出贴图属性标签




敲黑板:
以上参数,包括最终实现的这个效果,只是为了给大家演示user_data_string的用法,大家可以自由尝试各种效果,比如你可以尝试怎么给一副象棋用user_data_string添加贴图,等等等。
请尽情发挥自己的想象力并多动手实践。



以上~
Good good study!Day day up!

版权所有,禁止私自转载。
转载请私信。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容

  • Unity shader 官网文档全方位学习(一)What?? Shader,看起来好高级的样子,是的,这是Uni...
    狼之独步阅读 5,901评论 0 12
  • <转>我也忘了转自哪里,抱歉,感谢原作者 什么是Shader Shader(着色器)是一段能够针对3D对象进行操作...
    星易乾川阅读 5,501评论 1 16
  • 这是一个真实的故事,故事名称我们叫它做“一碗汤面”。 这个故事是17年前的12月31日,也就是除夕夜,发生在日本札...
    何须洒酒阅读 323评论 0 3
  • 最近,佛系生活,突然就火了,感觉无欲无求似乎是一种很好的生活状态,当生活没有目标,没有方向的时候,安逸于是从心...
    yyfyyf阅读 264评论 0 0
  • 今日心得:突发奇想的拍照。感觉还是很有创意的
    然谷中医阅读 153评论 0 0