在 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)
返回a
和b
中的最小值或最大值。
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
限制在min
和max
之间。
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)
计算base
的exponent
次幂。
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
暂无评论内容