本文为教程记录笔记,内容比较多,分为上下篇。(对原著精简与修改了一部分)
上篇主要介绍交叉路面的制作;
下篇主要介绍延申路面,围栏桥柱等制作;
本人Houdini萌新,如有书写和理解错误还请大佬扶正;
原教程为三部分,每部分下边都有工程的源文件;
教程地址 :
https://www.sidefx.com/tutorials/complex-roads/www.sidefx.com原教程主要用VOP节点制作,本次记录主要用Vex代码替代,一是更好的记录,二感觉更直观一些,理解更容易一点;
效果预览(截取教程内容)

制作思路(如图):

一,建立道路曲线以及对曲线进行合并,细分,切割操作;
- 建立道路曲线;(节点Curve)
- 只保留曲线点的位置属性,以免导入引擎出现属性不一的问题;(节点attributedelete)
- 合并曲线的交点;(节点fuse)
- 细分曲线;(节点resample)
- 创建路面属性,路面的宽度;(节点attribcreate)
- 翻转曲线为下一步从两边分割曲线,从中点重新分布点的序号,分成两个基元准备;(节点reverse)
- 从中点分割曲线,分成两部分,路面交界与路面延申的曲线;(节点carve)
- 合并分割后的点;(节点fuse)
- 找到曲线的交点,并标记其属性值为1,其余为0;(节点pointwrangle)
- (节点pointwrangle分支)只保留曲线的交点;(节点delete)
- (节点pointwrangle分支)转移属性,把上一步交点属性转移到基元属性;(节点attribpromote)
- 保留与曲线交点相连接的线段(保留路面交界处曲线),通过上一步的属性进行删除;(节点delete)

其中pointwrangle节点代码
//neighbourcount() 返回连接到指定点的点数;
//连接曲线交点的点数为4,其余为2和1均不大于2,可以找到四条线的交点;
int nc = neighbourcount(0,@ptnum);
//赋予曲线交点属性
if (nc>2)
{
i@intersectionid = 1;
}