【引言】
越来越难了,要又心理准备啊。
这篇研究一下XPRESSO和材质方面的应用。通过四个案例学习几个重要的“节点”。
【研究】
第一案例 制作材质动画。
在《XPRESSO入门-5》中,举例子制作过下图,皮带绕轮子转动的动画。方法是利用XPRESSO控制皮带模型上材质的U和V方向的数值,制作出该材质纹理移动的动画。实际上,利用这种办法可以制作出很多类似的动画,比如管线中的水流动画等。

再比如:
1、理发馆门口的招牌灯的制作。

2、你可以用XPRESSO控制里边“圆柱”,制作旋转动画。但也可以用XPRESSO直接控制“圆柱”的纹理,制作出旋转动画。就看哪个更方便控制,就用哪一个。

第二案例 制作一个能够改变的材质动画。
场景如果有一个模型,我们想把它的材质改变(当然,你必须先制作出不同的材质),使用XPRESSO,会更加方便。
1、在场景中建立一个立方体。

2、建立如下材质(漫反射、玻璃、钢等,随你)

3、添加一个空白物体,建立XP标签。把任意一个材质球赋给立方体。

4、点击空白物体,添加“用户数据”,建立如下数据。

5、打开XPRESSO编辑器,添加-XPRESSO节点--常规--链接列表。在属性栏,把7个材质拖进来。

6、“链接列表”节点
输入端口:
索引[-2147483648..2147483647] 此端口使您可以从列表中访问一个特定的对象。例如,传递的值为 0 到此端口,以访问的列表中第一个对象;输入值为 1 ,来访问列表中第二个对象等等。
如果索引值大于列表中的对象数目,该指数再次循环返回到列表的开头。比如,在列表中有两个对象和索引值为 2,该节点将输出的第一个对象 (从0开始,0为第一个)。
输出端口:
链接:输出链接列表中选定的索引号对应的对象。
数量 :[-2147483648..2147483647] 输出链接列表中的对象的总数。
7、把模型右侧的纹理拖入进来,把空白物体拖入进来,建立如下连接。空白数据节点--用户自己定义--数据,链接“链接列表”的索引节点。链接输出端连接纹理的“材质”输入端口。

8、调整数据输入(0-6),渲染看看:(因为列表里共有7个材质,所以编号从0-6)






9、由于自定义数据,动画的属性是勾选的,所以我们可以K帧制作材质变化的动画。

10、在0帧点,数量为0,在90帧,数量为6,进行K帧。按SHIFT+F3,调出时间线,调整动画的曲线为直线,这样保证材质变化是均匀的。渲染动画就如题图所示。

11、如何让材质随机变化呢?
那么就必须采用“随机”节点,让它随机产生0-6的随机数值出来。打开XPRESSO编辑器,添加一个随机节点。

该节点能够产生随机数。
属性面板:
有两种模式可用于生成这些数字: 自由和时间。在属性管理器中选择所需的模式。
该节点可以输出随机值的下列数据类型: 布尔、 整数、 法线、 实数或矢量。指定通过该节点的输出端口所需的数据类型。
自由模式:在此模式下,将生成随机数,每次计算节点时将产生新的随机值。这将导致每个动画看起来不同。
时间模式:在此模式下,相同的随机数,将生成每帧动画,即,如果动画是停了下来,然后重播它将会前一动画一样,因为,例如,帧 34 始终将输出相同的值。
仅有正的:这个你懂得。
输入端口:只有一个“随机种子”,改变它的值,会产生不同的随机值。(比如种子为“123”,那么你可能在一个流程产生的随机数值不同虽然不同,但是,如果再执行一遍,它产生还是这些随机数值。为了产生变化,每次循环,输入不同的随机种子,那么它产生的随机数值是完全不同的,保证了随机性,这就是它的用处。)
输出端口:
实数:-1.0 ~1.0 可以添加多个输出端口。
整数:-2147483648..2147483647。
布尔:0或1。
法线:用XYZ表示。
矢量:用XYZ表示。
12、如何让它随机产生0-6的随机数值出来?
首先保证随机数节点 RAND()产生的数值范围是: 1>RAND()>0;利用绝对节点,来处理这个问题。

其次:生成一定范围的随机数方法是这样的,假设给定数字范围最小是A,最大是B,公式是:
=A+RAND()*(B-A)。举例来说,要生成大于60小于100的随机数字,因为(100-60)*RAND()返回结果是0到40之间,加上范围的下限60就返回了60到100之间的数字。

添加绝对节点把随机从 -1~1,转换为0~1;数学节点采用乘法,“输入2端口”的数值为6 (6-0),再加上0就不用编写了。最后用通用节点,数据类型为“整数”,保证随机值:0-6。
13、建立连接如下:点击播放,发现材质更换跟“疯”了一样。如何控制变化的节奏看?必须建立一个“时钟”或开关控制随机数产生的频率。这个问题参考上一篇,自己研究一下。

第三案例 另一种改变纹理方法
上面的方法虽然能改变一个模型上的纹理,它的优点是随机性好,但可控性差。下面再举一个案例用另一种方法改变纹理,这个方法比上一个方法的可控性好。
1、在场景中建立如下材质和一个模型”球“。

2、建立反射环境-天空;再建立空白物体,添加XPRESSO标签。

3、点击空白--用户数据
首先“添加群组”--建立“控制组”;在“控制组”下面点击添加数据---建立“材质列表”。 数据类型--整数;用户界面---循环。勾选动画(可以K帧)。
其次,添加数据格式为:数字;列表名称(注意,那个分号为半角分号)。

4、在空白的属性窗口出现--控制--材质列表。

5、把空白物体拖入XP编辑面板;把模型”球“右边的材质标签拖入--纹理;把四种材质从材质编辑窗口拖入,分别选择各自的输出和输入端口,如下。如何一一对应进行连接呢?

6、添加--逻辑--条件节点。把”条件节点“数据类型改为”材质“,这个是关键!建立如下连接。

7、条件节点用法:有点象编程的SWITCH CASE 语句。
”条件节点“就像一个交换开关,具有两个或更多的输入端口。(可以向该节点添加任意数量的”输入端口“)
”开关端口“值确定哪个”输入端口“的值从“输出端口”输出出去。例如,如果开关设置为 0,该节点输出第一 (即最顶部) 输入端口值。如果开关设置为 1,该节点输出第二个输入端口值等。选择”条件节点“的数据类型在属性管理器中改变。
了解该节点以后,还需要解释上面的逻辑吗?
比如材质列表选择塑料材质,塑料材质对应的数值为1,输入到”条件节点“的开关端口,”条件节点“就把对应的“输入2端口”的值通过“输出端口”输出给“纹理节点”材质。输入2端口的值是什么?是塑料材质对象,也就是把塑料材质赋给了”球体模型了。
8、渲染测试:




9、制作材质改变动画,直接点击材质列表进行改变材质,K帧即可。(略)
所以说,这种方式可控性比较好。
第四案例 制作随机纹理
1、制作一个立方体,然后克隆为如下。

2、制作一个凹凸材质,赋予克隆。渲染之后发现,每个立方材质都是一样的。这种感觉太死板。
能否改变一下,使每个立方体的贴图UV有点偏移,从而产生一些变化。

3、在克隆上按C,转化为多个立方体,使每个物体都有该材质。一个一个手工改变UV偏移值吗?当然不能,我们利用XPRESSO帮助我们改变它们。

4、建立一个空白物体,添加XPRESSO标签。把任意立方体的右侧材质标签拖进来。为纹理的偏移U和偏移V添加一个随机标签。

5、因为“随机节点”输出端口如果为实数,那么数的范围为-1~1之间的随机数,对于立方体来说偏移太小了(模型为200CM),所以,添加一个数学节点用乘法,“输入2端口”为100。再利用一个随机节点连接纹理的“连续输入端”,这个输入端是布尔值,不是1就是0,如果随机节点产生为0,则纹理不连续,否则,只要“随机节点”产生的数据不是零,纹理就当为“真”,产生连续。

6、不好理解是吧,复制一个结果,数据类型改为布尔看看。只要“随机“节点实数输出的不是0,连续就当为”真“。

7、现在有一个立方体的纹理发生偏移了。如何让这些立方体的纹理都发生偏移呢?用上边的“链接列表”节点吗?
太没意思了,学习几个新的节点,在几个节点配合下,逐步选出每个材质。
先给出逻辑关系图吧,这里有三个新节点:层级,对象索引,标签,连接如下:

8、点击播放,或点击场景,你会发现纹理发生了不同的偏移,形成”随机“纹理,目的达到了。
关于这三个新节点的详细说明和使用原理,请见下一篇,这篇内容太多了。我猜你的头都“痛”了吧?
下图是“层级节点”的属性设置:

纹理随机了很多。

【感悟】
通过以上XPRESSO学习,问你一个问题,XPRESSO标签是什么?
我感觉:它是一个“万能”,又是一个“自定义”标签,什么都没有,什么都可能,什么都能做,非常自由自在,随你如何编辑,它的功能就会改变,正如老子的话“玄而又玄,变化出焉”,这不像如“平滑”标签那样功能那样固定和有限。所以,从事动画的CG人,一定要好好学习它啊!
天下一理。我最近学习中医,我的感悟是:中医配伍中药的理论基本都来自《神农本草经》。本草经用简明的语言只记录不同的药物药性(四气:温热寒凉,五味酸苦甘咸辛)和归经,并没有说明什么东西治疗什么病;而李时珍的《本草纲目》,却详细的把什么药物治疗什么病都列出来了,限制了药物的灵活使用,中医很少用。(李时珍的最大贡献不仅是《本草纲目》一书,而是《濒湖脉学》)人之所以得病,是人的的阴阳平衡被破坏了(外部和内部的影响),中医治病就是通过药物(这只是其中一种办法之一)的药性和归经,通过人体来调整自身的阴阳平衡,使之“升降出入”正常。
跑题了,我的意思是说XPRESSO标签虽然没有直接什么功能,但是,那里边能添加各种不同的节点,经过不同的逻辑组合,就会使XPRESSO标签具有不同的功能,就像中医配伍中药一样,能解决很多不同的问题。
网友评论