为什么重新梳理管线
在反复拆解 City Sample 的 Houdini 工程时,我希望进一步理解输入数据、生成规则与输出结果之间的关系,探索更便于定制的程序化城市搭建流程。
这次实践选择以 OSM 路网数据作为起点:利用其道路分类信息,在整理输入后生成路网、建筑用地与建筑立面,搭建可继续扩展的城市框架。
OSM 数据整理→路网生成→地块细分→建筑与配套
数据准备:让输入可控
选取深圳南山至福田区域的路网。原始数据虽然包含道路层级标签,但在本次使用中出现主辅路重叠、交汇复杂等情况。因此,我以原始路网为参考进行人工重绘与简化,使输入更便于后续规则处理。
OSM 路网数据与区域范围将道路归为主道路、次级道路与小路三类,分别设置对应 6、4、2 车道的道路宽度。高速道路单独处理,为后续匝道与城市道路的衔接预留空间。
使用方形轮廓裁剪路网,将本次测试范围控制在约 3.5 km × 3.5 km。
路网分类、整理与范围裁剪路网生成:从曲线到道路模型
通过 Sweep 与 Boolean 节点处理道路曲线,生成路网模型。不同层级道路使用各自的宽度设置,同时检查路面 UV 的一致性。
高速道路暂时与城市道路分离,避免在当前阶段引入过多连接关系,后续再处理合并与衔接。
基于曲线生成道路模型建筑用地:细分与人工筛选
建筑轮廓没有直接沿用 OSM 的建筑 footprint,而是通过 Houdini 的 Lot Subdivision 节点对地块进行向内细分,尽可能利用道路之间的空白区域。
部分地块经人工筛选后单独保留,用于后续制作与玩法相关的重点建筑,使背景生成区域与需要专门设计的区域能够分别处理。
建筑用地细分与轮廓生成建筑生成:轮廓、高度与立面规则
以多边形外轮廓曲线和预先写入的建筑高度为输入,生成建筑立面。首先需要检查曲线方向与法线,确保生成的立面朝外。
将底商与住宅区域分开制作,并利用 Shape Grammar 对建筑底部与上部应用不同规则,在统一流程中保留功能差异。
建筑轮廓、朝向与生成规则在规则搭建过程中,同时考虑底商与住宅的区别以及不同立面类型的变化,使生成结果具备一定的多样性。
依据外轮廓与高度生成建筑立面配套填充与城市框架
在道路与建筑之外,继续填充红绿灯、道路标识、路灯等配套资产。此类资产具有明确的朝向要求,需要结合所在道路及摆放位置处理方向。
城市配套资产填充最终,输入整理后的 OSM 曲线信息,可以生成程序化城市框架。
程序化城市框架生成结果阶段总结与后续计划
本次实践串联了数据整理、路网建模、建筑用地细分、建筑生成与配套填充。输入端保留人工整理,重点区域保留手工筛选,在自动生成与定制空间之间进行取舍。
后续计划:结合 PDG 流程与 Houdini Engine,将城市框架导入 Unreal Engine 进行实时渲染。该部分在原稿中属于下一阶段工作,不作为已完成成果展示。