======Points and Vertices====== Points 与 Vertices 的概念和区别。 ---- ====Point==== //Point// 在 //Houdini// 中是由空间中的 ''4'' 个数字定义的,分别是 ''(X,Y,Z,W)''。''X,Y,Z'' 代表了 //Point// 在空间中的坐标,而 ''W'' 则是一个标量(应该是 //Homogeneous//)。因此,//Point// 在该空间中是**不重复**的。 \\ \\ 绝大部分情况下在 Houdini 中都是对 //Point// 的操作。 ====Vertex==== 与 //Point// 不同的是,//Vertex// 是以 //Primitive// (面)为单位的。一个 //Primitive// 是由 //Vertex// 和 //Edges// 组成的。因此,对于有多个 //Primitive// 的复杂几何体,很可能会出现多个 //Vertex// 共享 一个 //Point// 的现象。而从几何上来说,//Vertex// 才是构成几何体的单位,//Point// 则只是为了操作方便而设计的一个概念。 \\ \\
//point number + coordinate
Vertex[@ptnum,x,y,z];
因为Vertex 是构成 Primitive 的单位,其自身并没有在**世界坐标系**中的信息 。因此,我们需要引进一个概念,针对世界世界坐标系的绝对坐标值来描述 Primitive 的顶点位置。因此,如果我们打开 Houdini 的 spreed sheet,我们会发现,points 中存储的是 ''[x,y,z]'',而 vertex 中存储的是 ''@ptnum''。那么实际上,Houdini 中的点的信息就是这么存储的:
Point[x,y,z];
//reference position from point
Vertex[@ptnum, ref(Point)]
我们可以将 vertex 想象为 point 的 **容器**;换句话说,也就是 vertex 是类, point 是实例。因此,理论上的单个 primitive 是由其对应的 vertex 与 遍历 vertex 的顺序建立的;而 point 提供的额外的坐标数据,确定了该 primitive 在整个世界坐标系中的唯一性。
===顺序===
Primitive 中遍历 vertex 的顺序非常重要;该顺序直接决定了 Normal 的方向。
====Tips====
* 在一个几何体中,如果有多个独立//Primitive//(没有共享 //Point//)存在,那么比起使用 //Point// 属性,使用 //Vertex// 的属性能更方便的对每一个独立的 //Primitive// 进行操作。
* 一些情况下,渲染器并不会独立计算被共享的 //Point// 的 //Normal// ,这样的计算方式会使得表面看起来更加平滑。如果需要有棱有角的的面,需要对每个独立的 //Vertex// 进行 //Normal// 的重新计算。常用的节点有:''facet''。''facet'' 节点可以通过将 //Point// 分离出来达到上述效果,也可以使用 ''cusp polygons'' 在不分离 //Point// 的前提下达到上述效果。
====参考资料====
* [[http://www.sidefx.com/docs/houdini/model/points|Points and vertices]]\\