总结
不错的教程,就是作为入门难度有点高。
观看笔记
01 - 界面基础
02 - 数据结构
Houdini & Maya 数据结构差别
Houdini 有
Points
Primitives
Vertices
数据结构组成
对应Maya的Vertex
Face
FaceVertex
的数据结构
构建几何体
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/01.png)
使用 add 构建几何体
生成面片需要勾选 closed
选项
// 创建一个面片
vector pos1 = set(0,0,0);
vector pos2 = set(1,0,0);
vector pos3 = set(1,1,0);
int p1 = addpoint(0, pos1);
int p2 = addpoint(0, pos2);
int p3 = addpoint(0, pos3);
int prim1 = addprim(0, "poly");
// 注意添加顺序
addvertex(0, prim1, p1);
addvertex(0, prim1, p3);
addvertex(0, prim1, p2);
也可以使用 Vex 创建一个三角形的几何体,注意 Wrangle 节点要选择 Detail 模式执行。
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/02.png)
3 - VOP SOP 变形
这个效果除了 Vop Sop 用 turbulance noise 还可以用 mountain 节点,但是显然没有那么灵活。
![alt](https://cdn.jsdelivr.net/gh/FXTD-odyssey/FXTD-odyssey.github.io@master/post_img/dd8eb095/02_01.png)
教程里面贴心地介绍了 Turbulance Noise 关于 turbulance 参数的原理
turbulance 属性每次增加
就等于多叠加一层
frequency * 2
Amplitude / 2
的 noise 细节
叠加完之后颜色有些差池,但是 pattern 是一致的。
Vop 移动模型需要用到 dispalcement 节点
![alt](https://cdn.jsdelivr.net/gh/FXTD-odyssey/FXTD-odyssey.github.io@master/post_img/dd8eb095/02_03.png)
gain 节点可以在 将中间值 在 最大最小值直接进行过度
![alt](https://cdn.jsdelivr.net/gh/FXTD-odyssey/FXTD-odyssey.github.io@master/post_img/dd8eb095/02_05.png)
bias 节点可以在 上下 最大最小值直接进行过度 (最大值最小值是两个平面)
Ramp Spline 类型可以自由编辑曲线实现起伏高度的完全自定义,实现上面视频调整山峰高度的效果。
加入 abs 节点让高度 负数变为正数 , 效果就是山谷变成小山丘。
通过 twoway 节点控制数值输出。
这个效果加入 3D Noise 来扭曲 1D Noise
最后也可以在最后输出 加上一个 Turbulance Noise 调大 turbulance 参数来增加 Noise 细节
04 & 05 衰变mask 制作
hypotenuse 斜边
opposite 对边
adjacent 邻边
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/05.png)
利用三角函数的特性,点乘时 θ 值小于 90 为正数 | 等于 90 为 0 | 大于 90 为 负数
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/06.png)
attribute from volume 需要通过 scalar ramp 的值设置为 -0.2 和 0 才能看到 falloff。
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/07.png)
这里的 transform 放在 iso 下面就不用每次移动 box 重新计算 iso 体积了。
06 & 07 程序化建模
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/08.png)
iso 的烟雾看不见可以按 W 打开 wireframe 查看。
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/09.png)
iso 节点使用 sdf volume 如果开启 laser scan 可以加速生成,但是结果会不准。
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/10.png)
volume slice 节点可以看到模型的横切面。
使用 convert volume 节点可以转换出类似 VDB 模型的效果,同时调整 isovalue 可以非常方便调整模型的大小。
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/12.png)
通过视窗的菜单选择 3D connected Geometry,可以逐个逐个连续模型地选择。
案例分析
多面挤压
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/example_01.png)
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/example_01_01.png)
通过 foreach 循环的 meta 节点可以获取遍历的序号,作为随机数的种子。(foreach 效率低)
显然这个方法没有利用教程提到 Houdini 数据结构,是比较蠢的方法。
创建属性属性随机可以用 Vex 更简单来实现。
f@weight = rand(@primnum);
Noise 地形
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/example_02.jpg)
使用 Noise 制作地形。
衰变
圆球衰变比较简单,主要通过
distance
根据顶点的距离生成衰变。
线性衰变通过线段向量和顶点线段 dot 点乘计算衰变, 根据 cos 90 为零 大于 90 为负,小于90为正的特性形成衰变。
自定义形状衰变则是通过 模型转iso , 体积转属性实现。
程序化建模
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/example_06.jpg)
![alt](https://cdn.jsdelivr.net/gh/FXTD-ODYSSEY/HoudiniWiki@gh-pages/posts/ddc0b6e3/example_07.jpg)