几何体基础与属性:点、线、面、顶点
好,咱们正式开始聊Houdini里最核心的东西——几何体。很多新手一上来就被「点、线、面、顶点」这几个概念搞晕了。我刚开始学的时候也这样,心想:点不就是点吗?怎么还有个顶点?
别急,咱们一个一个捋清楚。
点(Point)与顶点(Vertex)的区别
先说结论:点决定位置,顶点决定连接关系。
你想想看,一个立方体有8个角,每个角就是一个点(Point)。每个点存着它的位置信息(P属性)。但一个面有4条边,每条边需要两个点来定义。这时候,每个面会引用它自己的4个顶点(Vertex),这些顶点指向同一个点。
举个例子:
- 一个Box有8个点,但每个点被3个面共用
- 所以顶点总数是 6个面 × 4个顶点 = 24个顶点
- 每个顶点指向8个点中的一个
核心理解:点存的是「我在哪」,顶点存的是「我属于哪个面、排第几」。
我在项目中遇到过一个问题:做地形生成时,想给每个面单独上色。如果直接改点的颜色,相邻面会共享颜色。后来我改成操作顶点属性,每个面就能独立控制了。这就是顶点存在的意义。
边(Edge)与面(Primitive)
边就是两个点之间的连线。在Houdini里,边不是独立存储的,而是通过面的顶点顺序推导出来的。你删掉一个面,边也就没了。
面(Primitive)是Houdini里对「几何体单元」的统称。一个三角形、一个四边形、甚至一个点云里的单个点,都算一个Primitive。我习惯叫它「面」,但心里清楚它不一定是平面。
| 元素 | 存储内容 | 数量关系(以Box为例) |
|---|---|---|
| Point | 位置P、法线N、颜色Cd等 | 8个 |
| Vertex | 指向哪个Point、在面上的序号 | 24个 |
| Edge | 由两个Point隐式定义 | 12条 |
| Primitive | 顶点列表、面法线、材质ID等 | 6个 |
几何体属性:P、N、uv 这些是什么?
属性就是挂在点、顶点、面或整个几何体上的数据。说白了,就是给几何体「贴标签」。
- P(Position):每个点必备的位置属性。类型是vector,存着xyz坐标。
- N(Normal):法线方向。点法线用于平滑着色,面法线用于判断朝向。
- uv:纹理坐标。一般存在顶点上,因为纹理映射是按面展开的。
- Cd(Color):颜色属性。渲染时可以直接用。
我的习惯:每次创建几何体后,先按一下 Ctrl+Shift+S 打开Spreadsheet看一眼。看看P有没有值、N是不是默认的(0,0,0)。这能帮你提前发现很多问题。
属性查看与编辑:Spreadsheet 和属性节点
Spreadsheet 就是Houdini里的Excel。你选中一个节点,点一下Spreadsheet面板,所有属性一览无余。我经常用它来调试:
- 检查点有没有重复
- 看看uv范围是不是0到1
- 确认属性类型对不对(float还是vector)
要修改属性,可以用 Attribute Wrangle 或 Attribute Create 节点。我个人更推荐Wrangle,因为它用VEX写逻辑,灵活得多。
// 给所有点添加一个随机颜色
@Cd = rand(@ptnum);
这段代码的意思是:每个点的颜色等于一个基于点编号的随机数。嗯,就这么简单。
我曾经踩过的坑:在Attribute Create里把属性类型设成了float,结果颜色死活不对。后来才发现颜色需要vector类型。记住:Cd是vector,alpha是float。
基础几何体创建:Box、Sphere、Grid
Houdini里创建基础几何体很简单,Tab菜单搜就行。但有几个参数值得注意:
| 节点 | 关键参数 | 我的建议 |
|---|---|---|
| Box | Size、Divisions | 做建筑时把Divisions设成1,做地形时设成10以上 |
| Sphere | Type(Polygon/NURBS)、Rows/Columns | 游戏用Polygon,影视用NURBS |
| Grid | Rows、Columns | 做地形基础网格,Rows和Columns最好相等 |
你可能会问:为什么Grid要行列相等?因为这样每个格子都是正方形,后续做位移、细分时不容易变形。这是我做地形项目时总结出来的经验。
知识体系结构图
下面这张图帮你理清本章的知识脉络:
这张图把本章内容分成了四个模块:元素、属性、工具、基础几何体。你顺着这个结构去理解,会发现Houdini的几何体系其实很清晰。
一句话总结:点存位置,顶点存连接,面存形状,属性存数据。把这四样搞明白,Houdini就算入门一半了。
好了,这一章的内容就到这。记住我说的:多打开Spreadsheet看看,比什么都管用。
公众号:蓝海资料掘金营,微信deep3321