Arnold for C4D 15 【材质(九)】User Da
开讲之前,先普及一点小知识,有关数据类型。
下面讲到的数据类型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 [浮点数],在计算机科学中,浮点是一种对于实数的近似值数值表现法,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。
因此,此节点可以用来控制材质的镜面反射(高光)等模糊数据(即使不用整数也可以表示的数据)。
- 【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_rgba和User_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[分割器:循环选项]
设置完成后,将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!
版权所有,禁止私自转载。
转载请私信。