Cityengine大楼与厂房规则库实战:参数化建模、避坑与批量出图

发布时间:2026/9/26 18:47:25
Cityengine大楼与厂房规则库实战:参数化建模、避坑与批量出图 简介这份资源是面向CityEngine用户的大楼与厂房规则库压缩包适合城市规划、建筑设计、房地产开发及环境影响评估领域的从业者与学习者用于快速生成工业厂房与高层商业、住宅建筑的3D模型。包内共1257个文件约232.69MB以jpg、png贴图与预览图、obj与mtl模型及材质文件为主另含cga规则脚本、cgb编译规则、atx与gdb系列地理数据库索引文件以及少量tif影像、txt说明和cej工程文件覆盖从规则定义到模型输出的完整素材链。已有443人学习下载。规则库围绕高度限制、形状模板、立面细节、随机化、空间布局、场地覆盖与光照分析等维度展开用户可直接套用或修改模板高效构建符合现实规划与美学要求的城市场景并支持导入GIS数据实现精确可视化显著提升建模效率与模型多样性。1. 从一堆散装模型到可复用资产Cityengine大楼与厂房规则库到底解决什么问题如果你手头有一批城市三维建模任务大概率遇到过这种局面每来一个地块就要重新拉体块、切立面、排窗户做完一版甲方说“楼再高两层、厂房跨度改一下”于是全部推倒重来。Cityengine 的规则库CGA Rule就是冲着这个痛点去的——把“楼怎么长、厂房怎么排”写成参数化规则改几个数字整片街区自动重生成。而“大楼与厂房规则库”这类打包资源本质是把常见的住宅楼、办公楼、工业厂房的生成逻辑预先封装好你导入 Cityengine 后直接套用到地块上省掉从零写 CGA 的时间。它适合三类人做城市设计投标需要快速出量的人、做 GIS 三维底图需要批量建模的人、以及想学 CGA 但不知道从哪下手的新手。这一篇不讲虚的就按“规则库怎么用、参数怎么调、哪里会翻车”把整条链路走一遍。2. 规则库的文件结构与导入前的环境准备拿到一个规则库压缩包别急着双击。Cityengine 的规则资产有它自己的组织习惯先看清楚里面装了什么能省掉后面一半的报错。2.1 一个规则库压缩包里通常有什么常见的“大楼与厂房规则库”解压后大致是这么几类东西不同作者打包方式略有差异但核心跑不出这个范围文件/目录作用是否必需*.cga规则主文件楼体和厂房的生成逻辑都在这必需assets/或textures/贴图、立面材质、窗户贴图视规则而定*.obj/*.fbx预制的构件模型如屋顶设备、雨棚可选readme/说明.txt参数含义、适用版本强烈建议先读*.cejCityengine 工程文件双击可直接打开可选关键点在于.cga文件。它是纯文本用任何编辑器都能打开这意味着你完全可以读懂作者的逻辑而不是把它当黑匣子。我一般会先用文本编辑器扫一遍看它开头有没有version声明、import了哪些外部资源这决定了它能不能在你当前版本里跑起来。2.2 导入前必须确认的三件事第一Cityengine 版本。CGA 语法在不同大版本间有过调整老规则库在新版本里可能报语法错误新规则库在老版本里可能用到不支持的函数。先看说明文件里写的适用版本没有说明就打开.cga看头部注释。第二坐标系和单位。Cityengine 默认按米处理如果你的地块数据是经纬度或者英尺导入后楼会小得看不见或者大得离谱。导入地块前先确认工程单位设置。第三贴图路径。规则里引用贴图通常用相对路径如果你把.cga和assets文件夹拆开放贴图就会丢失模型变成一片灰。保持解压后的目录结构不动是最省事的做法。2.3 把规则库挂到工程里的最小操作# 假设解压到了这个目录 # D:/cityengine_assets/building_factory_rules/ # 目录结构应该是这样不要打散 # building_factory_rules/ # ├── building.cga # ├── factory.cga # ├── assets/ # │ ├── facade_01.jpg # │ └── roof_unit.obj # └── 说明.txt在 Cityengine 里新建或打开一个工程把整个building_factory_rules文件夹拷进工程的assets或rules目录下然后在场景里选中地块通过 Inspector 面板的 Rule File 指定到building.cga。这一步做完地块应该立刻按默认参数生成体块。如果没反应八成是规则文件路径没指对或者地块本身没有可用的属性字段。提示不要直接把.cga拖进场景视图那样不会建立规则关联只会当成普通文件。必须通过 Rule File 指定。3. 大楼规则的核心参数层高、面宽、退线怎么设才不出洋相规则库能跑起来只是第一步真正决定出图质量的是参数。大楼规则里几个参数调错出来的就是一排“纸片楼”或者“墓碑楼”。3.1 层高与层数别让总高失控大多数大楼规则用两个参数控制竖向floorHeight层高和floorCount层数或者用buildingHeight总高反推层数。常见做法是给一个层高范围让规则按总高自动算层数。# 这是 CGA 里典型的楼层生成逻辑示意非某规则库原文 attr floorHeight 3.6 # 单层高度单位米 attr floorCount 12 # 楼层数 attr groundFloorHeight 4.5 # 首层挑高商业或大堂常用 # 总高 首层 标准层 × (层数-1) totalHeight groundFloorHeight floorHeight * (floorCount - 1) # 按总高拉伸体块 extrude(totalHeight)逻辑说明首层单独设高是因为沿街建筑首层往往做商业或大堂层高比标准层大。参数说明floorHeight一般住宅取 2.9~3.3 米办公取 3.6~4.2 米groundFloorHeight商业取 4.5~6 米。如果你只给总高不给层数规则会用总高除以层高取整这时候层高设得越“整”层数越可控。我一般会把层高设成 3.0 或 3.6 这种能被总高整除的值避免出现 0.7 层这种尴尬。3.2 面宽与进深决定楼像不像楼体块拉伸出来只是个方盒子要让它像楼得控制面宽沿街方向和进深。规则库通常用lotWidth和lotDepth从地块自动读取但你可以覆盖。# 从地块形状读取面宽和进深 attr lotWidth scope.sx # 地块 X 方向尺寸 attr lotDepth scope.sz # 地块 Z 方向尺寸 # 如果地块太深切成前后两排 case lotDepth 30: split(z) { 15 : BuildingFront | ~1 : Gap | 15 : BuildingBack } else: BuildingFront逻辑说明scope.sx和scope.sz是 CGA 里读取当前形状包围盒尺寸的写法。参数说明住宅进深常见 11~15 米办公 14~20 米厂房跨度可以到 24~36 米。如果地块进深超过 30 米还硬做单排中间会出现没有采光的“黑房间”规则库如果有 split 逻辑会自动切没有的话你得手动加。这是很多新手翻车的地方——楼是长出来了但平面根本不能用。3.3 退线与限高合规的底线退线setback和限高heightLimit是规划条件里最硬的两条。规则库里一般用setbackFront、setbackSide、setbackBack三个参数控制。# 退线处理先把地块往内缩再在缩后的范围里生成楼 attr setbackFront 5 attr setbackSide 3 attr setbackBack 3 Lot -- setback(setbackFront) { front : NIL | remainder : setback(setbackSide) { left : NIL | remainder : setback(setbackBack) { back : NIL | remainder : BuildingLot } } }逻辑说明setback是 CGA 内置操作把形状按指定距离往内偏移偏移出来的边条用NIL丢弃。参数说明退线值必须来自当地规划条件住宅和厂房差别很大厂房还要考虑消防车道和装卸区。限高则是在拉伸前用case判断超过就截断或者报警。我一般会把限高做成一个 attr方便批量改而不是写死在规则里。4. 厂房规则和住宅楼不是一回事跨度、屋面、装卸区怎么落地很多人拿大楼规则去套厂房结果出来一栋“长得像厂房的办公楼”。厂房有它自己的逻辑规则库如果单独做了厂房规则核心差异就在跨度、屋面形式和地面设施。4.1 大跨度与柱网厂房规则的第一性厂房最显著的特征是大跨度、大柱网。住宅楼按房间切厂房按跨切。# 厂房跨度与柱距 attr span 24 # 单跨跨度米 attr baySpacing 6 # 柱距米 attr spanCount 3 # 跨数 # 沿宽度方向按跨度切分 split(x) { ~span : Span }* Span -- split(z) { ~baySpacing : Bay }*逻辑说明split(x) { ~span : Span }*表示沿 X 方向按span反复切分~表示近似值最后一段自动调整。参数说明单跨 18~36 米是常见范围柱距 6~9 米。跨数决定厂房总宽度。这里有个坑如果地块宽度不是跨度的整数倍最后一段会变形规则库如果没做补偿柱子会歪。稳妥做法是让span略小于实际需求留出余量。4.2 屋面形式双坡、单坡还是平屋面厂房屋面规则库一般提供几种模式用参数切换。attr roofType gable # 可选 gable / flat / shed Roof -- case roofType gable: roofGable(angle5, ridgeHeight1.5) case roofType shed: roofShed(angle8) else: roofFlat()逻辑说明roofGable、roofShed、roofFlat是 CGA 的屋面生成操作angle是坡度角ridgeHeight是屋脊相对檐口的高度。参数说明双坡屋面坡度常见 5%~10%单坡用于靠墙扩建平屋面用于现代厂房。注意坡度角单位是度不是百分比写错会出来一个尖顶教堂。4.3 装卸区与地面设施让厂房“能用”厂房不是孤立的盒子月台、装卸区、停车位是它的一部分。规则库如果做了这部分通常用地面纹理或者低矮体块表示。attr dockDepth 12 # 装卸区进深 attr dockSide front Lot -- split(z) { ~dockDepth : Dock | remainder : FactoryBuilding } Dock -- color(0.6, 0.6, 0.6) texture(assets/concrete.jpg)逻辑说明把地块沿进深方向切出一块做装卸区赋灰色和混凝土贴图。参数说明装卸区进深 12~18 米要能容纳货车转弯。如果规则库没做这块你至少要在出图时手动留出来否则厂房建到红线边上货车根本进不去。这是审图时最容易被挑的问题。5. 避坑与排查规则库跑不起来、跑出来不对的 5 个真实原因规则库这东西跑通一次不难难的是每次都能跑对。下面这几条是我和同行踩过的坑按“现象 → 原因 → 解决”列出来。现象一导入规则后地块毫无反应Inspector 里 Rule File 显示为空。原因.cga文件路径含中文或空格Cityengine 解析失败或者规则文件本身有语法错误加载时被静默跳过。 解决把规则库放到纯英文、无空格的路径下比如D:/ce_rules/。然后用文本编辑器打开.cga检查有没有明显的语法错误比如少了分号、括号不配对。Cityengine 的 Console 面板会打印加载日志养成看 Console 的习惯。现象二楼是长出来了但所有楼一样高、一样宽参数改了没反应。原因规则里的参数是const而不是attrconst是常量不暴露给 Inspector或者参数名拼写和规则里引用的不一致。 解决打开.cga把所有你想在 Inspector 里调的参数改成attr开头。改完保存在 Cityengine 里重新指定一次规则文件参数面板才会刷新。现象三贴图丢失模型全是灰白色。原因贴图相对路径断了或者贴图文件名大小写不一致Windows 不区分但 Cityengine 内部可能区分。 解决保持解压后的目录结构不要单独移动.cga。检查规则里texture()的路径确保和实际文件对得上。如果贴图是.jpg但规则里写.JPG在某些系统上会失败。现象四厂房跨度切分后最后一跨窄得离谱柱子歪斜。原因地块宽度不是跨度的整数倍split的最后一段被压缩。 解决把span设成能整除地块宽度的值或者用split(x) { ~span : Span }*的变体让规则自动均分。更稳妥的做法是先算一下lotWidth / spanCount把结果作为实际跨度。现象五模型面数爆炸Cityengine 卡死。原因窗户、栏杆等细节用了高面数模型或者规则在每一层都生成了独立几何体没有做 LOD。 解决规则库里如果有 LOD 参数出图时切到低 LOD。没有的话在 CGA 里用lod控制细节生成或者把窗户改成贴图而不是几何体。批量建模时面数是最大的敌人。注意以上五条里路径问题和参数类型问题占了报错的大多数。遇到问题先查这两项能省很多时间。6. 让规则库真正变成你自己的参数外置与批量出图的一个技巧规则库用顺了之后你迟早会想改它。但直接改.cga有个问题下次作者更新你的修改就丢了。更好的做法是把参数外置用 Cityengine 的属性映射Attribute Mapping从地块数据里读参数规则文件保持不动。具体做法是在地块图层的属性表里加几个字段比如height、floors、setback然后在规则的 attr 声明处用attr height 0占位再在 Cityengine 的 Attribute Mapping 面板里把height映射到地块字段。这样每栋楼的参数来自 GIS 数据规则库本身不用改。# 规则里只声明不写死 attr buildingHeight 0 attr floorCount 0 attr setbackFront 0 # 实际值从地块属性映射进来 # 在 Cityengine 的 Attribute Mapping 里配置 # buildingHeight - 地块字段 height # floorCount - 地块字段 floors # setbackFront - 地块字段 setback逻辑说明attr默认值设为 0 只是占位真正的值由 Attribute Mapping 注入。参数说明字段类型要匹配高度是浮点数层数是整数。映射配好后你改 GIS 表里的数字Cityengine 里重新生成整片街区就更新了。这个技巧的价值在于规则库变成了一个“引擎”数据变成了“燃料”两者解耦。批量出图时我一般会先用低 LOD 跑一遍全场景确认没有明显穿模和退线问题再切高 LOD 出最终图。Cityengine 的Generate菜单里有 Model Hierarchy 选项可以控制生成精度。另外导出.obj或.fbx时记得勾选“合并相同材质”否则贴图会碎成几百个文件。最后说个我自己的习惯每拿到一个新规则库先拿一个 100 米 × 100 米的测试地块跑一遍把所有参数从最小值调到最大值看模型怎么变。这一步花十分钟能摸清规则的脾气比直接上大场景然后翻车强得多。规则库是工具不是答案真正决定出图质量的还是你对建筑和厂房本身的理解。希望帮到你。本文还有配套的精品资源点击获取