What & How & Why

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] 位置的颜色属性的绿色通道。

需要注意的是,如果 PrimitivePolygon 或者 Meshuv 表示的实际上是 Vertex 的编号,或者行列。

PrimUV Tips
  • 使用 primuv 读取曲线某一点的位置:v 值恒为 0,只需要读取对应 u 位置处的 P 属性即可。如果 u 值使用标准化的面编号 @primnum / (@numprim - 1) 表示,可以使每个面在曲线上平均分布,再利用 @timeu 进行额外的变量操作,可以得到面随着曲线的路径运动的动画。

工具函数

Clamp

clamp 用于为接收的变量指定上限和下限。它接收 3float 变量,返回一个 float 变量。其使用实例如下:

clamp(@primnum / (@numprim - 1) + @time - 1, 0, 1)
上述代码将开头的表达式得到的结果限制到了 01 的范围内。

Noise

noise 函数会根据几何体的 Lattice 产生一个 3D 的 Noise。该函数可以用于添加变化到几何体上,比如添加 P 属性的 Noise 可以产生凹凸不平的效果。其使用实例如下:

noise($TX, $TY, $TZ)

需要注意的是,noise 函数要求变量值不能是离散的;也就是说,noise 不能使用整型数据

参考文章