发表日期:5/19/2018 5:09:45 PM 文章编辑:CG猎人 浏览次数:7190 标签:houdini,VEX
很多初学者会被houdini中各种变量的写法搞得晕头转向,特别是houdini15之后对vex的大量使用,很多看老教材的同学发现局部变量不起作用了,被弄得无所适从。
这里,小编就尽所能给大家解释一下,其实这里是两套系统完成同样的功能而已。
本文会部分会收录在即将出版的houdini书本中,敬请期待
1attribute create不起作用了?
这个是最常见的旧版本教程里的问题。添加attribute create节点,创建自定义属性var,使用$VAR就可以进行局部变量访问,但是在houdini15之后就不可以了。
这里最核心的问题在于旧版本的houdini默认是勾选 local variable把创建的属性转化为局部变量,而新版本默认是关闭的。
注意
默认开启后,不输入任何值,那么局部变量就是变量的大写形式 var→$VAR。当然,你也可以手动输入你需要的局部变量名字(一般不会这样操作)。
转化为局部变量后我们在spreads中查看
没有开启local variable的情况下:只有在对应层级多了var这个属性
开启了local variable的情况下:在detail层级还会多了一个把var转化为局部变量VAR的过程
所以,如果大家想按照旧版教程使用attribute create创建局部变量,那么记得勾选这个选项就行了。
2局部变量/全局变量的写法
一般是$符号+大写字母,但是也有不少特殊的写法
比如位置 $TX,$TY,$TZ,还有颜色是$CR,$CB,$CG,这些特殊的写法就需要死记硬背了
除了上面常用的局部变量和全局变量外(从帧开始,因为这些变量不需要任何的局部节点和属性都可以存在的,所以称为全局变量)
还有比较常用的对于copy节点中的局部变量
$CY 表示当前拷贝的顺序(第几份)
$NCY 表示拷贝的总数量
3vex变量的写法
@+变量名字(大部分不需要大写)
当然,vex中也有部分比较特殊的写法(比如@Frame需要开头大写,@P需要缩略大写)
对于特殊vex变量的记忆
直接创建vop(pointvop,attribute vop等都一样)进入内部,找到geometryvop global节点,里面就是常用vex变量写法
也可以通过添加houdini16中的point_old节点,都使用使用了vex变量(旧版本point中使用$TX,$TY,$TZ)
4为什么是vex取代局部变量
1更加直接和简洁,比如上面定义的var,不需要通过转化为$VAR,可以直接使用@var进行调用
2vex电脑运行效率更高(速度更快)
3vex更加统一,比如之前的位置 @P颜色是@Cd,如果要访问里面的分量通道,使用点格式,比如@P.x,@Cd.r(@Cd.x也是可以的)。并且vex除了在sop和shader中广泛使用,在dop中的粒子也是非常常用的,可以贯穿整个houdini,实现统一。
4vex除了调用变量,更多的是一些表达式和函数的调用,使用wrangle节点可以完成绝大部分节点的功能。创建变量非常方便
在houdini中,越来越多的节点除了局部变量外也支持vex变量(除了一些比较旧的节点)并且有很多新的节点只支持vex变量,所以这小编建议大家尽量使用vex变量(即使看到旧教材中做法,试着使用vex变量来实现)
5是不是局部变量/全局变量就没用了?
这倒不是,特别是全局变量还是非常有用的
比如$T,$FF,$HIP,$OS等代表时间,工程文件路径,节点名字,在控制紊乱变化,输出路径中等都非常有用。
某些节点的局部变量比如copy中的$CY和$NCY也是比较常用。
6如何创建属性
创建属性的方法有非常多,这里主要讲解最常用的attributecreate和wrangle节点
attributecreate 注意四个部分
1name 名字
2class 层级
3type 数据类型
4赋值
当然,这里还有是否需要转化为局部变量和size就是里面的元素多少需要注意
对于wrangle中创建属性同样需要上面的几个元素
run over 代表选择层级,f表示浮点类型,@rot变量名字是rot,赋值是1.0,还有分号结尾
常用的vex的数据类型有
i整形
f浮点
s字符
v矢量
marix 矩阵
......
7如何把变量转化为局部变量/全局变量
创建全局变量
除了默认已有的全局变量,我们可以通过Edit/ aliases and variable 别名和变量中进行设定
在这里添加了一个$MYNAME局部字符变量,用来存储我的名字carldrifter
大家还可以存储自己常用的工程文件路径或者数值等。
把已有的属性转化局部变量方法
方法一 attribute create的方法,勾选local vairable进行转化,注意输入同样的名字,激活local variable,并且关闭write value 创建值(否者会覆原来的值)
方法二 wrangle中转化局部变量的方法
使用函数addvariablename(输入端口,原来名字,后来名字)
方法三 在vop中转化成局部变量的方法 add attribute节点
旧版教程中使用add attribute节点进行输出输出自定义属性,现在使用的是bind export节点,而add attribute节点仅保留转化为局部变量的功能。
对于houdini通过多台主机分布式渲染的教程网上几乎找不到,要么都是国外的一些配置方法,要么就是直接购买渲染农场,但是对于手头有几台电脑的童鞋可以采用这种方式大大减少渲染耗费的时间,笔者也是经历重重困难不断测试和研究,配置过程还是较为繁琐的。
Unity3D开发之使用MySql数据库
建筑房地产三维动画解决方案 工业机械三维动画解决方案 产品演示三维动画解决方案 工程施工三维动画解决方案 医疗医学三维动画解决方案 栏目包装三维动画解决方案 3D互动多媒体解决方案 数字展厅解决方案 数字沙盘解决方案 VR虚拟现实解决方案 AR增强现实解决方案 全息投影解决方案
12年专业3D视觉艺术服务经验 深圳专业3D动画团队 中国三维动画制作领先者 最前沿视觉设计、开发能力 时刻最新技术领先创作能力 具有完备的项目管理 完善的售后服务体系 深厚的影视动画制作经验
深信数字一直秉承专业、诚信、服务、进取的价值观,坚持优秀的商业道德,以用户最终价值为导向,向用户提供优质产品和优质服务,从而赢得了用户的信赖。始终以不懈的努力、更高的目标来要求自己。
主营业务:三维动画制作 | 产品广告三维动画 | 工程施工三维动画制作 | 医疗模拟三维动画制作 | 建筑动画设计 | 工业机械动画制作 | AR,VR虚拟现实开发
Copyright © 2015-2018 sx8d.com All Rights Reserved. 深圳市深信数字科技有限公司 版权所有 | 粤ICP备15084676号