======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]]