为什么上一篇用集成电图,这一篇用电子积木图呢?比喻它的功能和特点:XP(以下简称)每个节点的输入输出端口以及他们相互的逻辑连接,就像集成电路一样;XP每个节点可以按照逻辑自由地连接,实现不同的功能就像电子积木一样。总之,我是非常喜欢用XP,好用又好玩,这也是我喜欢C4D之一。
通过上一篇的几个实例,进一步了解XPRESSO,又增加了学习它的信心,是吧? 那么好,这一篇举例子谈谈使用XPRESSO应该掌握的一些知识。
需要声明的是:以下内容不是从官方资料得到的,而是自己在学习中摸索中得到的,水平有限,有可能理解错误。不对的地方,请高手们批评指正。也给初学者一个参考,你在实际运用中去检验是否正确。
第一个注意问题:每个节点输入唯一,输出可多。
每个节点就像一个模块:从不同输入端口进来数据,进行处理。处理之后,在从不同输出端口输送出去。注意的是:每个输入端口输入是唯一的,不能有多个输入,进入一个输入端口,保证数据唯一性。而每一个输出端口却可以输出很多。
第二个注意问题:优先级
在编程中有优先级说法,哪个先计算,哪个后计算。比如,运算符中括号优先级比乘除高,乘除比加减高等。
xpresso标签可以加载对象上,可以加载空物体上。可以每个对象都可以分别加载,一个对象也可以加载两个以上的XPRESSO标签。但是C4D系统在计算的时候,是有优先顺序的。
首先看上下顺序:
1、在场景中建立下列物体,为下面的三个加入XP标签(文字也可以加)
2、双击宝石XP标签。建立如下节点,把常数节点的数据类型设为“字串”,数值为“宝石”
(每个节点你应该在XP中能够找到吧,看一看)
3、在编辑窗口中,选择全部节点,点击菜单--编辑--复制。双击立方体的XP, 进入其编辑窗口,然后粘贴。点击常数,更改数值为“立方体”。同理,更改空白的XP。
4、看下图,那个在下面,文字就显示哪一个。哪个优先级高?
答案:当然是上面的优先级高。C4D先算上面的,依次从上到下计算,到最后一个,最后计算。所以场景中的文字只显示最后一个。(那为什么,我没有看到每个文字的闪现呢?C4D计算太快了)
5、同理,把文字加入两个XP标签,左边的为“左标签”,右边的为“右标签”。C4D显示的是如下,哪个优先级高?
答案:当然是左边的优先级高。先计算左边的,最后计算右边的,结果显示的是最后右边计算的结果。可以理解:后计算的结果把前计算的结果覆盖了。
(材质标签赋予也是这样:右边的材质总是要覆盖左侧的)
虽然XPRESSO标签什么地方都能加,但是我还是建议你:把它添加在一个空物体上面,一是不占资源;二是好检查。
第三个注意问题:“数据类型”保持一致性。
每个节点的输入输出端口,你要注意“数据类型”。尤其是在两个节点相互连接的时候,要保证前后数据类型一致,否则容易出错。用“常数”节点展示,看看它的数据类型有多少。(比程序语言还多)
数据类型的理解可以是这样:这个常数节点可以想象为容器,不同的数据类型好比是能呈装不同的物质,如水、金属、木头等。
1、建立一个文字,添加XP标签。在XP中做如下设定:首先,设置常数节点数据类型为字符串(字符串类型就是字符类型),输入数值如下。而文本节点的文本输入要求的数据类型恰恰是字符串类型,所以正常显示。
2、在常数节点数值中输入数字。由于数据类型是字串,所以这些“数字”是字符,是不能计算的,也正常显示。
3、把常量的数据类型改为颜色,默认为黑色。这与文本的节点不匹配。所以,不能显示颜色,文本节点就把常数节点黑色的数据RGB的数值以字符的形式显示出来。
4、再如,常数节点数据类型改为布尔(逻辑:真 TRUE 或1 表示;假 FALSE 或0 表示,默认为假)。由于类型不匹配,系统自动转换把布尔的值以字符形式显示出来了。
所以,要注意不同节点相互连接的端口之间,数据类型要匹配。否则,结果不是你想要的结果。当节点很多的时候,你都不知道错在什么地方。
第四个注意问题:数据的监测。(DEBUG)
在编程中总是在不影响程序运行过程中,要监视每个变量的数据变化,看看是否符合预期。
功能好似这个化工流程的各种仪表一样。
在XP中常规选项中,有两个节点:一个是“结果”节点,一个是“探测”节点(英文为SPY间谍)。他们有什么区别吗?
通过以下可知:
用“结果”,它没有输出,到此为止,就是显示。
而“探测”不但可以显示还可以输出数据。
总之,这两个节点,在监视整个程序运行中,非常有用。但你要注意它的输入端口和上一节点的输出端口数据类型要匹配啊。
第五个注意问题:位置和全局位置的区别
在对象节点,有两个位置,一个是全局位置,一个是位置(局部位置或相对位置)有什么区别?
1、其实,如果场景中没有父子关系,他们的数据是一样的。
用场景中球体为例:这个球体的位置和全局位置是一样的。
2、下面把场景中球体作为立方体的“儿子”
3、仔细看下图,首先注意的是“父亲”立方体不在世界中心。球体的位置坐标是相对立方体的坐标,全局坐标是相对世界坐标原点(0,0,0)的坐标。
这个问题一定弄明白,否则在场景中涉及父子关系的时候,容易出错。
第六个注意问题:数据的映射和转换
有时候,一个物体的位置移动去控制另一个物体的变化(转动、移动、缩放),可能不是线性的(成比例的),而是非线性的(不成比例的)变化。如何做到数据映射和转化呢?
举例子谈谈数据映射问题:用油桶制作一个飞碟,用圆盘制作一个门。当飞碟从Y=200位置往下降落时,圆盘的门洞打开(控制圆盘的内半径大小)。
1、场景建立如下:
2、直接相连一定不行。飞碟Y目前有高度,门的内半径等于飞碟高度,所以门已经打开,随着飞碟降落,Y值减小,门半径也减小,门关上了。所以这个逻辑不对。
3、解决的办法就是在中间添加一个“范围映射”就像汽车发动机和轮子之间有个变速器一样。
4、范围映射能找到吧?右键
5、点击“范围映射”在属性面吧做如下设置,首先注意数据类型:实数(实数你应该知道吧?)
6、它的映射逻辑下图所示:(不用解释了吧,我画的这个图能看明白吧?)
飞碟高度为200时,门的内半径为0,当飞碟高度值减小,而门的内半径增大。当飞碟高度将为0时,而门的内半径增大到300最大。而这个转换完全是由该节点自动完成的,多好啊!
7、移动关系建立以后,移动飞碟延Y轴向下,(发现虽然有漏洞,但大体效果是对的)当然你可以对飞碟进行动画K帧。
第七个注意问题:用户数据
还是用上面飞碟举例子,我们控制飞碟下落,是用鼠标拖动飞碟,延Y向下移动来完成的,能否用更简单的办法控制飞碟下落呢?
C4D利用“用户数据”提供了一个在XPRESSO之外的输入数据的方法。
1、点击“空白”,在菜单--用户数据--增加用户数据
2、用户数据里,系统自动添加一个“数据”,所以你也不用在'添加数据“,直接更改这个数据如下:
注意默认为200。
3、当确定以后,在点击空白,发现”飞行高度“控制条出现了。
4、双击XPRESSO进入编辑窗口,把空白拖进来。
5、点击空白节点右上角,选择如下:
6、作如下连接。为什么这样?直接把飞行高度与范围映射输入连接起来,绕过飞船行不行?不行为什么?
7、由于默认为200,所以飞船就停在200高度。
8、当往回移动飞行高度数据时,变化了。
9、当然,我们还可以把”飞行高度“控制条,拖入场景中,方便吧。
10、发现上面的飞行高度不能K帧,这是咋么回事?回头看第2步。点击菜单”用户数据“---编辑用户数据,发现”动画“选项没有勾选。现在看看可以用CTRL进行K帧动画了。
【补充】
不知不觉写的不少了。以上这些东西不谈明白,以后的实例就没办法讲。
最后再简单谈谈以下内容:
1、xpresso的编辑窗口,是对各个节点进行管理的,都是中文,自己看一看。
比如,你发现用曲线连接不好看
点击编辑窗口菜单--布局--连接--直接。(有点标注化意思)
系统默认节点左边是输入,右边是输出。你也可以通过菜单更改反过来。你是左撇子吗?
2、掌握快捷键。在XP编辑窗口,平移也是ALT+鼠标中键;ALT+右键为缩放;正好符合视窗大小,用H键;复制节点按CTRL拖动;去除连线,直接用鼠标点击连线即可;删除更改端口,在端口按右键,会出现一个小菜单,命令就在上面。
3、注意,在测试动画的时候,发现你设置”结果“和”探测“节点的数据没有变化,那是咋回事?
那是因为你没有勾选下面的选项。C4D默认是不勾选的,可能是为了节约计算资源吧。
4、熟悉各个节点的分类。XPRESSO是按照功能进行划分,经常看一看,知道每个节点的位置,这是第一步。
第二步,查看帮助,一定要弄清楚每个节点的作用,甚至每个端口的数据类型是什么。
【后记】
还有很多,饭不是一天都吃完的,活也不是一天都完成的。
不写了
绝对不写了
出去走走
晒晒太阳
闻闻泥土的芳香
看看树叶的绿芽
春姑娘来了
我去找她