Houdini学习 —— 过程化生成城市集群学习笔记1(Building data generation部分)

这篇博客介绍了在学习使用Houdini进行过程化生成城市集群的时候的学习笔记。对应的资料来自于pluralsight,传送门。

背景

入职鹅厂快3个月了,加班加到吐血……清明难得的假期,可以捡起以前一直想追的pluralsight的课程了。

顺便,之前一直是使用Houdini 15,到了16之后发现不少的接口改变了,也借这次机会整理一下……

总体思路

总体的思路可以分为building data generation,cluster simulation, point cloud generation和最终的skyline构建。

Building data generation

如果自顶向下看,如果要构建城市集群,那么首先要将整个的城市蓝图拆解为对应的街区,再将对应的街区映射到不同的城市聚簇,这些聚簇应该有直接的控制接口,从而可以过程化生成各不相同的建筑聚簇。

如果自底向上看,如果要构建建筑聚簇,那么首先要将外部的独立模型进行导入,此外还需要进行额外的模型处理,将其变成可以进行聚簇生成的资源。

此外,这里是需要针对特定的城市进行建筑集群的生成操作的,因此,还需要额外的城市蓝图数据。这里使用的是教程提供的资源,读者如果需要的话也可以去我的网盘下载:传送门。

城市蓝图处理

先上对应的节点图:

Houdini学习 —— 过程化生成城市集群学习笔记1(Building data generation部分)_第1张图片

里面有两个python节点,之后会放出代码。

这一套节点图的目的是将城市的原有模型数据转化为工程可用的数据,原有模型如下:

Houdini学习 —— 过程化生成城市集群学习笔记1(Building data generation部分)_第2张图片

之后,需要针对原有的模型中的独立primitive进行拆分,这里通过assemble节点将每个primitive都命名为block_开头:

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

接着手动选择CBD区域,并且将其放入group内进行标志:

Houdini学习 —— 过程化生成城市集群学习笔记1(Building data generation部分)_第4张图片

这里有个需要注意的地方,是在houdini 16之前,group相关的所有操作都是在group节点内部完成的。到了16及以后,sidefx将group的众多功能拆成了多个独立的子节点。这里使用了group creategroup promote两个节点:
Houdini学习 —— 过程化生成城市集群学习笔记1(Building data generation部分)_第5张图片

使用group promote节点的目的是将primitive相关的属性转化到point上,这样一来,就可以针对顶点进行区分操作了。

之后使用python脚本来给每个顶点添加属性,一个是自定义的block_type属性,这个属性是个字符串,如果是CBD商业区,那么这个属性为commercial,否则,这个属性为house。此外还有一个Cd属性,只是为了将商业区标红。python代码如下:

node = hou.pwd()
geo = node.geometry()

# Add code to modify contents of geo.
# Use drop down menu to select examples.

你可能感兴趣的:(Houdini,Houdini,PCG,TA)