总结
这套教程很全面地介绍了 VEX 的使用场景
最后一集甚至使用 VEX 将论文复杂的数学公式简化为简单的实现,可见其扩展性很强。
教程的广度很大,基本上介绍了 VEX 在 Houdini 中的各种调用方式。
并且也包含了 编程语言基础的讲解,只是教程的知识越来越多,会给人一种越来越难的感觉_(:з」∠)_
即便是个 VEX 的新手教程,我学习的时候难度还是偏高了。
不过就 VEX 教程而言,是非常棒的。
最后倒数第二个教程 Material VOP 我在 Houdini18 中实现有问题,所以没有进一步提供文件。
观看笔记
02 - SOP Wrangle Basics
wrangle 节点可以设置为 Number 类型自定义执行的次数。
09 - Creating Chladni Patterns
克拉尼图形 - 声音可视化
s(x, y) = asin(πnx) sin(πmy) + bsin(πmx)sin(πny)
克拉尼图形 算法
Houdini16 之后内置 PI 变量,更老的版本需要手动添加 PI
使用公式写 VEX 代码比用 Vop 节点复现公式代码来得方便。
14 - Starting A Function Library
Mortiz 推荐 Joy of Vex 出自 CGwiki 的系列文章教程作为额外的学习材料 链接
Vex 可以通过 include 将预制的函数引入。
需要在 Houdini.env 里面引入文件目录。
15 - A (Not So) Quick Recap & Fake Hanging Wires
Houdini 的 foreach 和 compile 都比 wrangle 节点要慢很多。
16 - Pixel Sorting
argsort
可以重新排序数组
17 - Intersecting Lines
intersect_all
可以检测模型的碰撞
18 - Transformation Matrix Intuition
dient
获取 单位矩阵(identity matrix)
20 - Packed Primitives & Primitive Intrinsics
可以通过
Show All Intrinsics
查看内置的属性
22 - How about a Material Wrangle
Material 节点里面使用 snippet 不需要 @
案例分析
法线朝向
噪波面片
chladni pattern 克拉尼图形
sin cos 变化线圈
sin 结合 cos 可以构成一个圆圈。
加上 frequency 参数动态变化 sin 和 cos 的参数值就可以得到上面效果的线段。
再使用 polywire 生成几何体。
临近点线段
这个效果参考 Vex Fundamentals 教程 链接
多重切分
Catenary 算法
交错线碰撞
wrangle 可以根据组去遍历相关的顶点。
像素偏移
通过 grid 选择 column 可以竖向线段模型
通过attribute from map
可以将像素映射到模型上
虽然模型没有面,只要离得足够远,就可以看到 贴图 的 效果。
VEX 矩阵变换
// 创建单位矩阵
matrix trn = ident();
// 旋转
float angle_x = radians(chf("rotation_x"));
float angle_y = radians(chf("rotation_y"));
float angle_z = radians(chf("rotation_z"));
rotate(trn,angle_x,{1,0,0});
rotate(trn,angle_y,{0,1,0});
rotate(trn,angle_z,{0,0,1});
// 缩放
vector scale_vec = chv("scale");
scale(trn,scale_vec);
// 位移
vector translate_vec = chv("translate");
translate(trn,translate_vec);
4@trn = trn;
构建矩阵进行变换,实现类似 transform 节点的效果。
最后逐个顶点乘以矩阵实现位置移动。
四元数旋转
float bias = chf("bias");
vector axis = point (1,"P",1);
axis = normalize (axis);
vector axis2 = point(2,"P",1);
axis2 = normalize (axis2);
float angle = chf("Angle");
angle = radians(angle);
float angle2 = chf("Angle2");
angle2 = radians (angle2);
vector4 quat = quaternion (angle,axis);
vector4 quat2 = quaternion (angle2,axis2);
vector4 rot = slerp(quat,quat2,bias);
v@P = qrotate(rot,v@P);
四元数旋转可以避免 Gimbal lock (万向节锁) 讲解链接
copy to points 后矩阵变换
matrix3 trn = ident();
float amp = chf("amp");
float angle;
angle = @P.x * amp;
rotate(trn,angle,{1,0,0});
angle = @P.y * amp;
rotate(trn,angle,{0,1,0});
angle = @P.z * amp;
rotate(trn,angle,{0,0,1});
setprimintrinsic(0, "transform", @ptnum, trn);
通过 copy to points 勾选上
pack and instance
可以获取到隐藏的 transform 矩阵
逐个顶点变换矩阵可以进一步修改模型的 transform
COP 编写 VEX
https://www.sidefx.com/docs/houdini/vex/contexts/cop.html
float freq = .005;
vector pos = set(@IX *freq,@IY * freq,@TIME);
int seed = 123;
float f1,f2 = 0;
wnoise(pos,seed,f1,f2);
float val = f2 - f1;
@R = val;
@G = val;
@B = val;
在 COP 节点编写 VEX 生成 Noise 图片。
Paper 点云保留镜头可视顶点 算法实现
https://webee.technion.ac.il/~ayellet/Ps/KatzTalBasri.pdf
利用 Houdini 快速实现 论文的算法。
这个算法可以将相机望向顶点集背后理应看不见的顶点进行剔除。
上面截图论文红色的顶点左边有穿插,右边通过算法处理就可以去掉背部顶点的重叠。
具体原理可以查看 hip 文件