关于Houdini的一些易混淆名词的辨析

简介

在与别人交流时,用语不标准往往是最大的障碍。错误的用语会让对方不知道你要表达的意思,大多数情况下我建议使用英文原文,能减少歧义。遗憾的是,由于国内很多朋友用英语有困难,加上一些教程讲解不规范,使得各个讨论区中滥用名词、张冠李戴的现象屡见不鲜。

我本人既是这一现象的加害者也是受害者,初学Houdini时,我的用词是极不规范的,这给师长前辈们带来很大困难,多亏他们的耐心与热心,我才能弄清各种概念,不断提高Houdini的技术。

近年来,由于经常需要查阅英文文献,撰写英文论文,以及同国外同行交流,迫使我格外重视用语的规范。

本文将总结一些易混淆的概念和用语,大多数是曾经困惑过我的,也有一些是同事和朋友帮忙提出来的,希望对大家能有帮助。

欢迎批评指正。

参数,变量,属性和数据

参数(Parameter):每个节点都有自己的参数编辑器(parameter editor),上面提供许多可供调节的选项,称之为参数参数 可以控制该节点的功能。有些朋友愿意称之为“属性”,这可能是受到maya的属性编辑器的影响,但在houdini中,这些应该被称为参数

 

 

 属性(Attribute):在Houdini中,属性 指的是一些有名字的数据,它们可以存储在point(点)、vertices(顶点)、primitive和object(对象)上。最常见的观察属性的方式是利用detail面板。(Detail 面板即新版的中的 Geometry Spreadsheet面板)

属性 有几个特点:

·属性 通常可以用变量 的形式写入表达式,例如变量$TX 表示属性P[x],$AGE 表示 life[0] 等等具体见下面的变量部分。

·一些属性 可以自动被渲染引擎、动力学引擎或其他内置的节点识别并应用,比如颜色Cd会被mantra surface材质识别,pintoanimation可以被cloth object DOP识别,Nup会被copy SOP识别等等。

·用户可以自定义任意数量的属性,即使他们不会被任何内置节点识别,你也可以在表达式、脚本、VOP等地方使用。

·对于拥有Group参数 的SOP节点,可以在参数中写入@name op value的形式,来指定一个子选集(subset),其中name为属性 名,op为运算符=, == , !=, >, <, >=, <=,value为数值。如下图中的 @P.x>0.5,意味着将所有P[x]大于0.5的点作为一个子选集。

· 在h14以后的版本中,@+属性名的用法也扩展到其他领域,一些参数(如point节点的position)可以直接使用@属性;wrangle系列节点中的vex环境,也可以使用@属性的方式。


变量(Variable)变量 是用在表达式中的,用来表示一些数值的“缩写”,在Houdini的环境中,变量通常要以“$”开头,以$开头的一般都是变量。比如$TX, $Cd, $PI 等等。

·常见的变量 请查阅:这里(帮助文档链接)。其他变量 建议首先查阅该变量 所在的节点的帮助文档。

变量包含两种类别,本地变量(Local Variable)和全局表达式变量(Global Expression Variable):

本地变量:可以用来表示每点属性(per-point attribute),比如$TX表示的并不是一个值,而是一组点各自的P[x],如下图:

·并非所有参数都支持本地变量,如VOP SOP,Color SOP等都不支持。

·本地变量并非一定要表示每点 每面 属性,也可以表示对象属性,有的节点可以识别本地变量表示对象属性的值,但不能正确访问每点或每面的值,比如Transform SOP

·本地变量在表达式中的返回值通常是0,这意味着,如果用ch()表达式函数去访问写有本地变量参数,往往不会得到用户所期望的结果(因为用户并不希望得到0)

全局表达式变量:通常用来表示一些当前环境的量,不依附于对象。例如$F,$HIP,$PI等等

·全局表达式变量 能够返回一个有意义的值,比如$PI会返回3.14159……,因此可以用ch()表达式获得其所表示的数值,也几乎可以在任何参数中使用。

·通常来讲,变量是写在参数里的,但从14版开始,官方似乎处处在淡化变量的作用,逐渐强调用属性来取代。比如point节点的位置以属性来描述(@P.x , @P.y, @P,z),并且attribute create节点默认不产生变量,需要手动勾选才可以。

 

数据(Data):数据这个词其实在很多地方都能遇到,这里特指DOP中的数据。在DOP的模拟/解算中,解算器(solver)会根据对象上的数据进行相应的计算,大部分DOP也都含有和数据相关的参数。如下图的Data Name,Unique Data Name等等:

·数据 是以类似目录的形式层级存放的。如Forces/Gravity。具体内容可以在Detail面板上查阅

·如果该对象有几何体属性(见上文),那么一般是存放在 Geometry 数据 中,从这一层的意义来说,数据 包含着属性

·.sim文件可以在硬盘上保存DOP中的数据,dop import 可以将DOP对象中的Geometry数据 导出到SOP

 

 

表达式、脚本、编码/编程

表达式(Expression)表达式是写在参数上的,通常会配合使用变量,可以让参数 包含的数值更加复杂。

·支持Hscript和Python

·通常只能写在参数

脚本/命令(script/command):可以控制Houdini运行的各种命令

·支持Hscript和Python

·可以写在很多地方,如textport(hscript),python shell(python),数字资产的script标签页(hscript和python皆可),参数的回调命令(hscript和python皆可)

·包含的功能非常广泛,包括新建节点,文件存盘,插入关键帧,在磁盘上创建文件夹等等。详情看:这里

编码/编程(Coding):用于写材质,编辑节点属性等

·涉及语言:VEX,RSL,C++,Python

·VOP是VEX的节点形式,VEX编程并不一定非要写代码,也可以通过VOP节点实现,二者各有利弊

·C++用于HDK,也可以用于python的inlinecpp模块

·写材质用VEX或RSL,取决于为哪个渲染器写

·用Python可以在SOP中进行编程

·虽然Python不能直接写材质,但可以利用其脚本 功能,辅助编写VOP材质,默认的pyro材质就是个很好的范例(Houdini12+)

 

可以看到,大部分语言都有其各自适用的范围,分工比较明确。而python是个例外,除了材质之外,几乎所有的地方都可以使用它。因此,对于python来说,脚本编程 表达式 的界限有时候不那么严格,比如我们可以在表达式里面实现脚本的功能,或者在脚本中修改表达式的值。

3 thoughts on “关于Houdini的一些易混淆名词的辨析

  1. 有时创建个同名的属性,可以把参数覆盖,有时不可以。 请问,在这,参数与属性是什么样的关系。

  2. 你好。 请问,参数如何在houdini的vop里修改。 参数有个名字,这名字对应的是变量,还是属性。

  3. 初学者看了很受教,这种基础的东西虽然基础,但是看教程的时候却难以弄明白,多谢乐乐大ლ(°◕‵ƹ′◕ლ)

发表评论

邮箱地址不会被公开。