简介
在与别人交流时,用语不标准往往是最大的障碍。错误的用语会让对方不知道你要表达的意思,大多数情况下我建议使用英文原文,能减少歧义。遗憾的是,由于国内很多朋友用英语有困难,加上一些教程讲解不规范,使得各个讨论区中滥用名词、张冠李戴的现象屡见不鲜。
我本人既是这一现象的加害者也是受害者,初学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识别,N和up会被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来说,脚本、编程 和表达式 的界限有时候不那么严格,比如我们可以在表达式里面实现脚本的功能,或者在脚本中修改表达式的值。
有时创建个同名的属性,可以把参数覆盖,有时不可以。 请问,在这,参数与属性是什么样的关系。
你好。 请问,参数如何在houdini的vop里修改。 参数有个名字,这名字对应的是变量,还是属性。
初学者看了很受教,这种基础的东西虽然基础,但是看教程的时候却难以弄明白,多谢乐乐大ლ(°◕‵ƹ′◕ლ)