admin管理员组文章数量:1666891
这篇博客介绍了在学习使用Houdini进行过程化生成城市集群的时候的学习笔记。对应的资料来自于pluralsight,传送门。
背景
入职鹅厂快3个月了,加班加到吐血……清明难得的假期,可以捡起以前一直想追的pluralsight的课程了。
顺便,之前一直是使用Houdini 15,到了16之后发现不少的接口改变了,也借这次机会整理一下……
总体思路
总体的思路可以分为building data generation,cluster simulation, point cloud generation和最终的skyline构建。
Building data generation
如果自顶向下看,如果要构建城市集群,那么首先要将整个的城市蓝图拆解为对应的街区,再将对应的街区映射到不同的城市聚簇,这些聚簇应该有直接的控制接口,从而可以过程化生成各不相同的建筑聚簇。
如果自底向上看,如果要构建建筑聚簇,那么首先要将外部的独立模型进行导入,此外还需要进行额外的模型处理,将其变成可以进行聚簇生成的资源。
此外,这里是需要针对特定的城市进行建筑集群的生成操作的,因此,还需要额外的城市蓝图数据。这里使用的是教程提供的资源,读者如果需要的话也可以去我的网盘下载:传送门。
城市蓝图处理
先上对应的节点图:
里面有两个python节点,之后会放出代码。
这一套节点图的目的是将城市的原有模型数据转化为工程可用的数据,原有模型如下:
之后,需要针对原有的模型中的独立primitive进行拆分,这里通过assemble
节点将每个primitive都命名为block_开头:
接着手动选择CBD区域,并且将其放入group内进行标志:
这里有个需要注意的地方,是在houdini 16之前,group相关的所有操作都是在group
节点内部完成的。到了16及以后,sidefx将group的众多功能拆成了多个独立的子节点。这里使用了group create
和group promote
两个节点:
使用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.
#create attributes on geometry
block_type = geo.addAttrib(hou.attribType.Point, "block_type", "")
point_color = geo.addAttrib(hou.attribType.Point, "Cd", (
版权声明:本文标题:Houdini学习 —— 过程化生成城市集群学习笔记1(Building data generation部分) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1730076153a1221800.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论