======Hscript 常用函数======
常用的 Hscripts 函数用法记录。
\\
----
====Primitive 相关====
===PrimUV===
''primuv'' 可以用于提取几何体的 UV 坐标中某一点的属性。通常的写法如下:
primuv(surface_node, prim_num, attrib_name, attrib_index, u, v)
* ''surface_node'' 代表了需要读取的节点。
* ''prim_num'' 代表了需要读取的面的编号。
* ''attrib_name'' 代表了需要读取的属性的类型名称,比如 ''Cd''。
* ''attrib_index'' 代表了需要读取属性的分量(通道),编号从 ''0'' 开始。
* ''u / v'' 代表了指定的坐标。
具体的例子:
primuv("/obj/geo1/tube1", 0, "Cd", 1, 0.7, 0.3)
其作用为:读取面编号为 ''0'' 中,处于坐标 [0.7, 0.3] 位置的颜色属性的绿色通道。
\\
\\
需要注意的是,如果 //Primitive// 是 //Polygon// 或者 //Mesh//,''u'' 和 ''v'' 表示的实际上是 //Vertex// 的编号,或者行列。
==PrimUV Tips==
* 使用 ''primuv'' 读取曲线某一点的位置:''v'' 值恒为 ''0'',只需要读取对应 ''u'' 位置处的 ''P'' 属性即可。如果 ''u'' 值使用标准化的面编号 ''@primnum / (@numprim - 1)'' 表示,可以使每个面在曲线上平均分布,再利用 ''@time'' 对 ''u'' 进行额外的变量操作,可以得到面随着曲线的路径运动的动画。
====工具函数====
===Clamp===
''clamp'' 用于为接收的变量指定上限和下限。它接收 ''3'' 个 ''float'' 变量,返回一个 ''float'' 变量。其使用实例如下:
clamp(@primnum / (@numprim - 1) + @time - 1, 0, 1)
上述代码将开头的表达式得到的结果限制到了 ''0'' 到 ''1'' 的范围内。
===Noise===
''noise'' 函数会根据几何体的 //Lattice// 产生一个 3D 的 //Noise//。该函数可以用于添加变化到几何体上,比如添加 ''P'' 属性的 //Noise// 可以产生凹凸不平的效果。其使用实例如下:
noise($TX, $TY, $TZ)
\\
需要注意的是,''noise'' 函数要求变量值不能是离散的;也就是说,''noise''** 不能使用整型数据**。
====参考文章====
* [[http://www.sidefx.com/docs/houdini/expressions/_index|Expression functions]]