开始使用houdini,第一个想法就是使用工具架上的工具,当然,这个是创建基本网络的很好的方法,你可以进入里面查看各种节点,一步步细分研究。这是开始研究houdini的好方法。
问题是,接下来你得不到你预想的结果,然后你就迷失了。
所以,回想我一下我直接的经验,我在转化到houdini到时候学到了什么--那些我希望可以早点知道的方法。
学**如何使用attribute 属性是一个很好的开始。我的想法是,当你对属性有更好的了解,对于你整理理解houdini和它与其他三位软件的不同之处会有更大的帮助。
houdini的思维方式
让我们回到三维的挤出。拿一个物体,可以是一个简单的小球或者粒子系统,它是由每个部分组合成的整体,我们虽然知道这个,但是我们思考过这些吗?
左边带有序号的点,面,法线和右边图钉头
对于操控物体原理是一样的。比如一个常见的任务就是使用噪波贴图置换一个平面。你思考过实际上发生了什么吗?如果把紊乱的颜色转化为数据,然后怎么样这些数据驱动点的位置?
回顾那些年我使用不同的3D软件,我当然知道那些3D物体是由点,曲线,多边形等构成,但是我并没有认真思考过它们。知道我不得不。同样的,制作紊乱置换效果,虽然我知道发生了什么,我并没有从原理技术上思考过它,知道我必须这样做的时候。
但是当我使用hoduini的时候我很快意识到我必须开始积极思考这些事情。我意识到我必须改变我的思考方式并且开始把他们单独看待,然后从这部分如何操控另外一部分。
我相信这些思维方式对于houdini非常重要
什么是点?
我们都知道所有的3D物体都是基于点创建的;一边(至少2个点)是点通过线连接。一个多边形(在houdini叫做primitive)是由3个或者多个点连接形成的面
但是什么是点?我的意思,点的真实含义?
其实,在简单的定义里面,一个点就是一个位置,在3D空间中每个轴向向上的数值。如果一点没有数值,那么他不存在;如笛卡尔(发过哲学家,数学家)所述,我有个位置,所以我存在。
0.0.0 -恭喜你,你在宇宙的中心
这个简单的认识非常重要,因为它把我们引导到属性这个概念 - 他们是如何累计成houdini的工作流的
点属性
点属性是附着于点的数据。正如你需要一个位置属性来定义一个点,你需要知道这个点和其他点的关系,你需要最基本的属性就是位置和它的序号。
现在,你有一个点,你可以把任何类型的数据作为属性附着于这个点上。最常用的属性当然是那些通过其他不同节点创建的比如颜色,速度,分组关系,但是对于我们输入什么数据类型是没有任何限制的。
其他属性层级
点属性仅仅是houdini中几个属性层级中的一个,你还有顶点,面和整体属性
点和面的属性工作原理相同;顶点是点的细分,通过多边形分组,顶点属性多用于UV 和表面法线控制
然后就是整体属性。整体属性并不附属于任何几何体;相反,它是对整个物体。他们用于属性的不同mapping。我后面会介绍一下变量和别名。
属性类型
基于属性中不同的数据类型存储,需要不同的数据类型,最常见的是整形,浮点和矢量。
点序号是一个整形类型,一个整数,所以你不用浪费时间去序号第3.6个点。浮点类型就是带有小数的值,所以这里有个点的属性是3.6,那么他的类型就是一个浮点。对于矢量类型的例子就是速度,三个浮点值定义了一个方向和大小的值。
需要注意到的是,一个属性可以包含3个浮点但是并不一定是矢量,比如你可以定义一个三个浮点的属性或者使用矢量数据类型。比如position位置,技术上说他并不是一个矢量,但就是如果你想存储在某一帧的时候某个点的位置,你还是会使用到矢量,因为位置是由三个浮点定义的,每个轴向一个。对于颜色也是一样。像位置,颜色这些并不是矢量,但是由于它是由三个浮点构成,你依旧可以使用矢量类型来存储数据。
还有,如果你想给存储一个名字,你还可以使用字符类型。
查看属性数据
由于属性是houdini工作流的基石,能够获取到这些属性是非常关键的。这里就需要用到houdini中的geometryspreedsheet。现在,对于仅仅想查看在某一帧时候某个物体有哪些属性,可以在节点中鼠标中键会弹出在这个节点流中包含的 组和属性等信息。
但是如果你想经常查看里面的值,你可以使用spreedsheet,你可以通过右击节点通过弹出的快捷菜单选择spreadsheet,这样会以独立窗口的形式打开spreadsheet。你也可以在在默认的houdini的布局中找到这个spreadsheet面板,然后放到你想要的位置。
当然,看来像电话本一样,但是,当你进入houdini的工作流后,你会很快发现快速获得这些属性的值是多么的重要
spreedsheet的正确打开方式
当然你还以使用spreadsheet来做这样的动画,如果你是技术大牛
自动调用属性
因为属性在houdini的方法流程中是如此的基础,很多节点参数会自动继承特定的属性。
例如polywire 节点,使用mesh曲线。如果这个曲线上的点带有pscale属性,这个自动用于模型的半径厚度。下面是我做一个例子拖尾生成模型的案例。我把粒子的年龄转化为pscale属性和颜色属性,使用colormap来控制颜色变化,但我连接polywire节点,最后的结果会自动使用pscale属性控制截面的半径(底宽上细)。
对于某些节点,比如copy节点,可以使用更多的属性制作相同的功能。下面这个案例我手动随机控制静态点云的pscale的值和点的法线值。圆锥拷贝到每一个点,并且会自动使用pscale缩放和使用点法线控制旋转。
但是如果你把圆锥拷贝到粒子系统,它会自动基于速度属性控制圆锥的旋转。
这种类型的自动化当然非常方便并且在许多sop节点中都内置有,比如哪里使用法线,速度,宽度和缩放参数等,都会被自动调用
如果你不想使用这些继承的点属性,在某些节点,比如copy节点,可以直接去掉勾选 “use point attributes”(使用点属性)就可以了。但是对于像polywire这些节点,没有这些选项,最方便的的解决方法就是用attributedelete属性删除节点在polywire之前把这些属性删除
属性数据还是数据
Unless he’s Lore, of course.
这里需要清除的认识到,存储在属性中的数据还是数据,如何使用它并不受限于它的名字并且这些数据可以很方便从一个属性转化到另外一个属性-即使在组合数据元素层级,比如可以把矢量数据的某个元素转化为另外一个浮点属性中。
下面这个案例我添加了随机颜色,然后使用attributewrangle节点把点的颜色中的绿色转化为点的位置的y
当然你可以反过来制作,你可以先置换模型,然后使用置换的y轴属性控制颜色中的绿色;
在houdini使用颜色来可视化数据是非常有用和常用的方法;同样的,使用法线来存储矢量用来可视化也是非常常用。
属性传递
属性可以在不同物体间传递;最常用的方法是通过距离传递,下面是蓝色从蓝色小球传递到红色小球上,使用渐变传递方式。
通过距离传递使用渐变过度效果
另外一个案例是控制破损物体中的粘附约束强度。粘附约束通过一个强度属性控制其破损的点,基于与控制物体的距离可以传递一个属性记性其强度。
除了距离之外,还有很多传递方式,对于粒子和流体,这里有很多自定义的节点来完整这个功能。
下面是简单的旋涡设置,我使用attributevop节点来创建法线控制点云的方向。
然后我吧点云转化为体积,把点法线转化为速度。然后在dop动力学中,我使用流体驱动粒子转化为graid粒子速度进行模拟。
正如我在houdini中的设置,并没有标准答案。在houdini中,总是有多钟解决方法。
属性层级转化
属性层级转化用于属性在不同层级(顶点,点,面和整体)中的转化。
左边是点颜色的效果,右边是转化为面颜色的效果
让我们再来卡一下属性传递这个案例。我依旧是把属性从一个物体传递到另外一个物体上,但是我蓝色通道的数值转化为一个独立的属性,然后把这个属性转化为面属性
在红色球上使用extrude节点给刚才转化的面属性单独把面面挤出来,挤出的高度由之前蓝色转化的面属性控制。
然后在这个点上,我希望你能开始理解houdini的强大的工作流程的,使用houdini属性可以创建无线可能。
GUI属性控制
无论你在houdini创建什么节点,任何值控制那个节点的作用和如何修改属性的值都被称为参数。
像属性一样,在houdini中,你并不限制于默认的参数。你可以同样编辑和添加需要的参数,使用node gear menue(参数面板右上角的齿轮菜单),选择edit parameter interface编辑参数面板。
这些功能在某些节点中是自动完成的。比如,如果你在vopsop中添加一个vop节点,ramp的渐变控制GUI会自动被提取到vop外部,你可以在在里面使用提取命名把参数提取到vop外部,这样就不需要调到vop中而是直接在外部调整参数。
下面是一个attributevop节点中的设置。我使用每个面需要来驱动面的位置通过叠加y的值。控制倍增量,我添加了一个乘法节点并且提取了倍数值,那么在vop外部会自动添加这个参数控制。
变量和别名
变量和别名指代另外一些东西,类似于属性或者参数,任何属性和参数都可以适配为别名和或变量。
默认houdini中的变量为全局变量,一个全局变量的案例就是$HIP,这个主要指代的是当前hoduini的场景文件存储的路径。
经过变量依旧在houdini中通用,但是有些被别名取代。变量的标识符是$+大写属性名字,比如$F代表是当前帧,别名(类似于VEX中属性写法)由@+属性表示,比如@Frame代表当前帧
对常用属性这里还有全局变量,默认变量的mapping,比如$P 指代的是位置属性等。需要注意的是houdini在很多区域已经移除属性mapping,取而代之的是是VEX语言类型,比如@
P,@P.x,@P.y,@P.z等,更多信息请查看houdini的帮助文档。
属性之外的事情
我们快到houdini属性介绍的结尾,当然这里仅仅是如何使用和操控houdini的冰山一角,只是一个把你引入正确方向的指示标。