基础几何与属性操作:从零搭建你的第一个程序化建筑
好,咱们正式开始动手了。这一章我会带你走一遍Houdini最基础的操作——创建几何体、操作点线面、理解属性。别小看这些,我做了这么多年项目,发现很多复杂的问题,追根溯源都是基础没打牢。
创建基础几何体:Box、Sphere、Grid
打开Houdini,Tab键呼出菜单,输入Box、Sphere、Grid。就这么简单。但我想说的是——别只把它们当静态模型看。
在程序化工作流里,这些几何体是「种子」。你想想看,一个Box加上点属性操作,就能变成一栋楼的轮廓。一个Grid加上高度属性,就是地形。我刚开始学的时候,总觉得要搞多复杂的节点才叫程序化,后来发现——高手都在玩基础几何体。
核心认知:Houdini里的几何体不是「画」出来的,是「算」出来的。每个Box背后都有一组点、一组边、一组面。你改的是数据,不是形状。
点/边/面层级操作:选对层级,事半功倍
Houdini里有个概念叫「层级」——点(Primitive/Point)、边(Edge)、面(Primitive)。你操作哪个层级,直接影响后续逻辑。
举个例子。我想让一个Box的顶部面变成红色。如果我在点层级操作,那四个顶点都红了,但面可能还是白的。为什么?因为颜色属性是存在点上的,面只是「引用」了点的颜色。嗯,这里要注意——属性存在哪个层级,决定了你能控制什么。
| 层级 | 英文 | 常用操作 |
|---|---|---|
| 点 | Point | 位置、法线、颜色、速度 |
| 边 | Edge | 折痕、切割、分组 |
| 面 | Primitive | 材质ID、UV、分组 |
我在项目里遇到过一个问题:做建筑立面时,想给每个窗户单独上色。一开始我在点层级操作,结果窗户边框也跟着变色了。后来改成面层级操作,每个窗户面独立控制,问题就解决了。说白了——选对层级,比写对代码更重要。
属性(Attribute)概念与创建:@P, @N, @Cd
属性是Houdini的灵魂。没有属性,几何体就是一堆死数据。有了属性,几何体才有了「行为」。
最常见的三个属性:
- @P:位置。每个点的三维坐标。你改@P,点就移动。
- @N:法线。控制光照方向、粒子发射方向。
- @Cd:颜色。控制显示颜色,也常用来传递数据。
创建属性很简单。在Attribute Wrangle里写一行代码就行:
// 创建一个自定义属性,叫myHeight
f@myHeight = @P.y;
// 或者创建一个向量属性
v@myDirection = {0,1,0};
注意那个f@和v@的前缀。f代表float(浮点数),v代表vector(向量)。Houdini是强类型语言,你得告诉它这个属性是什么类型。我刚开始总忘写前缀,结果报错半天找不到原因。后来养成习惯——写属性前先想好类型。
小技巧:在视口里按Ctrl+I可以查看几何体的所有属性。我调试时经常用这个,比翻节点快多了。
Attribute Wrangle节点入门:写代码的正确姿势
Attribute Wrangle(简称Wrangle)是Houdini里最常用的节点之一。它让你用VEX语言直接操作属性。
基本用法:
- 创建一个Wrangle节点
- 连接到你的几何体
- 在代码框里写VEX代码
举个例子,让所有点沿Y轴随机移动:
@P.y += rand(@ptnum) * 0.5;
这行代码干了什么?@ptnum是每个点的编号,rand()根据编号生成一个0到1的随机数,然后加到Y坐标上。每个点移动的距离不一样,就产生了随机效果。
我刚开始用Wrangle时,总想写很复杂的逻辑。后来发现——好的程序化代码,往往只有几行。你想想看,一个建筑立面有几百个窗户,每个窗户的位置、大小、颜色都不一样。用Wrangle写几行代码,就能生成全部。这就是程序化的魅力。
注意:Wrangle默认是「点层级」运行。如果你想操作面层级,记得把Run Over改成Primitives。我曾经因为这个坑,调试了整整一下午。
知识体系结构图
下面这张图帮你理清本章的核心逻辑:
这张图展示了本章的知识脉络。从几何体出发,经过层级操作和属性创建,最终汇聚到Attribute Wrangle节点。每一步都是下一步的基础。我建议你跟着这个顺序练习,别跳步。