houdini VEX中的相关的数学函数

Houdini VEX(Vector Expression)语言中,数学函数非常强大且多样化,可以帮助你实现各种程序化和算法效果。以下是 Houdini VEX 中常用的一些数学函数及其简单介绍,按照功能进行分类:

1. 基础数学运算

  • abs(float x)
    返回 x 的绝对值。
  float result = abs(-5.2); // 输出: 5.2
  • min(float a, float b) / max(float a, float b)
    返回 ab 中的最小值或最大值。
  float min_val = min(2.5, 4.0); // 输出: 2.5
  float max_val = max(2.5, 4.0); // 输出: 4.0
  • clamp(float x, float min, float max)
    x 限制在 minmax 之间。
  float clamped = clamp(10, 0, 5); // 输出: 5
  • sign(float x)
    返回 x 的符号(-1, 0, 1)。
  float sign_val = sign(-10); // 输出: -1

2. 幂和指数函数

  • pow(float base, float exponent)
    计算 baseexponent 次幂。
  float result = pow(2, 3); // 输出: 8
  • sqrt(float x)
    返回 x 的平方根。
  float result = sqrt(16); // 输出: 4
  • exp(float x)
    计算 e^x(自然指数函数)。
  float result = exp(2); // 输出: 7.389
  • log(float x) / log10(float x)
    计算自然对数(以 e 为底)和以 10 为底的对数。
  float ln_result = log(7.389);  // 输出: 2
  float log10_result = log10(100); // 输出: 2

3. 三角函数

  • sin(float angle) / cos(float angle) / tan(float angle)
    计算角度(以弧度为单位)的正弦、余弦和正切值。
  float s = sin(radians(30)); // 输出: 0.5
  • asin(float x) / acos(float x) / atan(float x)
    计算反正弦、反余弦和反正切值,返回值为弧度。
  float angle = degrees(asin(0.5)); // 输出: 30 度
  • radians(float degrees) / degrees(float radians)
    角度与弧度之间的转换。
  float rad = radians(180); // 输出: 3.14159 (π)
  float deg = degrees(3.14159); // 输出: 180

4. 线性代数函数

  • dot(vector a, vector b)
    计算两个向量的点积。
  float dot_prod = dot({1, 0, 0}, {0, 1, 0}); // 输出: 0
  • cross(vector a, vector b)
    计算两个向量的叉积。
  vector cross_prod = cross({1, 0, 0}, {0, 1, 0}); // 输出: {0, 0, 1}
  • length(vector a)
    返回向量的长度(模)。
  float len = length({3, 4, 0}); // 输出: 5
  • normalize(vector a)
    返回归一化的单位向量。
  vector norm = normalize({3, 4, 0}); // 输出: {0.6, 0.8, 0}

5. 插值和混合

  • lerp(float a, float b, float t)
    线性插值,t 为 0 时返回 a,为 1 时返回 b
  float result = lerp(0, 10, 0.5); // 输出: 5
  • mix(vector a, vector b, float bias)
    线性插值,类似于 lerp,支持向量。
  vector mixed = mix({0,0,0}, {1,1,1}, 0.3); // 输出: {0.3, 0.3, 0.3}
  • smooth(float edge0, float edge1, float x)
    平滑插值函数,类似于 Hermite 插值,用于渐变效果。
  float s = smooth(0, 1, 0.5); // 输出: 0.5

6. 随机函数

  • rand(float seed)
    基于种子的随机数生成器,输出 0 到 1 之间的浮点数。
  float random = rand(@ptnum); // 基于点编号生成随机数
  • noise(vector pos) / snoise(vector pos)
    Perlin 噪声和光滑噪声,用于生成自然的随机效果。
  float n = noise(@P); // 输出基于位置的噪声值

7. 条件和逻辑函数

  • fit(float value, float oldmin, float oldmax, float newmin, float newmax)
    value 从旧范围映射到新范围。
  float f = fit(0.5, 0, 1, 10, 20); // 输出: 15
  • select(int index, val1, val2, ...)
    返回根据 index 选择的值。
  float sel = select(2, 10, 20, 30); // 输出: 30
  • if(condition, true_value, false_value)
    条件判断,相当于三元运算符 ? :
  float result = (2 > 1) ? 10 : 0; // 输出: 10

8. 向量和几何函数

  • distance(vector p1, vector p2)
    计算两个点之间的距离。
  float dist = distance({0, 0, 0}, {3, 4, 0}); // 输出: 5
  • reflect(vector I, vector N)
    计算入射向量 I 关于法线 N 的反射向量。
  vector reflected = reflect({1, -1, 0}, {0, 1, 0}); // 输出: {1, 1, 0}
  • rotate(vector axis, float angle)
    绕轴旋转向量。
  vector rotated = rotate({0, 1, 0}, radians(90)); // 90度绕Y轴旋转

这些函数是 VEX 编程中最常用的数学工具,可以帮助你在 Houdini 中进行高效的程序化建模、动画和特效制作。通过熟练使用这些函数,可以极大提升你的 Houdini 工作流程和效果。当然本次总结并不完整,我们会在以后慢慢补充。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容