Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)

这篇博客介绍了在学习使用Houdini进行过程化生成城市集群的时候的学习笔记中,针对一个block生成对应的Point cloud的方法和流程,以及一些需要注意的地方


背景

距离上一篇博客大概是大半个月了吧……其实并不是我忘了,我只是纯粹的懒……

之前分别将街区block和建筑聚簇都分别进行了处理,接下来就是针对于不同的block进行建筑的聚簇适配了,并且生成对应的point cloud了。

因此,如果进行任务的拆分的话,那么1) 首先在cluster中过滤出可以匹配该街区的一坨建筑群 2)将该建筑群进行物理模拟,让其匹配街区的边缘 3) 生成point cloud。

过滤建筑群

如果需要进行建筑群的过滤,那么要先将原本街区几何体的一个面生成一个体,从而将这个体中的建筑扒出来。

首先导入对应的街区Geometry Object,使用unpack节点展开,然后调用poly extrude节点生成一个几何体,最后调用transform把它往下拉到原点。

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第1张图片

想要进行Bound裁剪,使用Group Create,选择Keep in Bounding RegionsBounding Type选择Bounding Object(Point Only),从而将在Bound之外的顶点给裁掉。

考虑到那些非常狭长的边或几何体,有必要针对原有的那些建筑聚簇进行一次resamplefuse操作。

记得uncheck掉Resample by polygon edge,防止出现软角。

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第2张图片

当然,我们要裁掉集合体,不能出现几何体的一部分,所以使用Group Create节点中的Include by Edges,通过递归将对应边上的顶点给裁掉,得到效果如下:

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第3张图片

Delete掉外面的点,Pack后,做个Out节点,输出对应消息。

进行街区边缘适配

在每个街区中的所有建筑,如果想要适配边缘,那么意味着需要有个力将其往外扯,但是会在边缘处停下。

换句话也就是意味着:1)要有个边缘的碰撞体,2)要有个将其往外拉的力。

实现这个目的也很简单:利用delete节点的delete by normal,将原来的几何体的上下两个面给裁掉,然后再次使用poly extrude节点,生成一个有厚度的墙。

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第4张图片

另一块,如果需要有个往外拉的力,结合之前的都是针对于Point进行处理的,所以可以绕着这个建筑的周围使用scatter节点散布一些顶点,然后将这些顶点通过attribute vop操作限制在 xoz 平面上。

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第5张图片

最终的顶点散布效果如下:

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第6张图片

这样一来,进行街区模拟的资源就准备完成了。

物理模拟

进行物理模拟的话就很轻松了,在dopnet中导入地面、墙壁和顶点,然后添加一个POP Attract作为POP solverPre-sovle,dopnet如下:

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第7张图片

ps1. 墙壁的collision geometry representation需要设定为Concave,不然墙壁的碰撞会变成一个大凸包几何体。

ps2. rbdpackedobject需要取消sleeping。

然后就可以直接让它开始模拟了,这里设定600帧,模拟后效果如下:

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第8张图片

Point cloud generation

我们只需要留下点就可以了,所以本来只需要一个delete节点,开启Keep Points即可。

但是,我们发现,在houdini 13版本的话,直接输出的结果具有冗余数据,所以建议进行一次Unpack再进行一次Pack操作,但是在Houdini 16中,这个问题不存在了。

最后再将这些顶点拉到 xoz 平面上,就完成了一个街区的Point Cloud。

Houdini学习 —— 过程化生成城市集群学习笔记3(Point Cloud Generate部分)_第9张图片

在之后,只要针对每个Block进行一次操作就可以了,所以接下来的操作可能会涉及到很多python脚本操作orz……

<全文完>

你可能感兴趣的:(Houdini)