
简介本资源为面向城市规划师、文化遗产数字化从业者及CityEngine中高级用户的古建筑参数化建模实践套件聚焦解决传统建筑三维重建效率低、风格还原难、规则复用性差等核心问题。压缩包共2000个文件总大小209.88MB涵盖971个JS脚本含CGA规则逻辑与自定义函数、35个CGA主规则文件定义飞檐、斗拱、屋面层级等核心结构、1007张JPG/PNG/TIF高清贴图覆盖木纹、彩画、砖石等材质细节以及OBJ/MTL模型资产、项目配置与场景管理文件支持开箱即用的拖拽式布建与GIS/CAD数据导入。已有1283人学习下载资源结构按地域风格分目录组织内置明清典型制式模板库与可编辑规则注释附带完整属性控制参数说明与光照渲染预设便于快速生成高保真、可批量部署的历史街区三维场景。1. 项目概述当CityEngine遇见古建筑如果你和我一样既痴迷于那些飞檐斗拱、雕梁画栋的古建筑又是一名数字城市或三维可视化领域的从业者那你一定曾为如何高效、批量且参数化地生成古建筑三维模型而头疼过。传统的手工建模方式对于单体建筑尚可应付但一旦涉及到成片的历史街区、古城风貌复原工作量就会呈指数级增长且难以保证风格统一和修改的灵活性。这正是“CityEngine古建筑规则”这个项目要解决的核心痛点。CityEngine作为一款基于规则的程序化建模软件其核心魅力在于“写规则生万物”。它允许我们通过编写一种名为CGAComputer Generated Architecture的脚本语言来定义建筑的生成逻辑。而“古建筑规则”就是将这些千百年来沉淀下来的建筑形制、构造法则翻译成计算机能够理解和执行的代码。这不仅仅是简单的三维建模更是一场对传统营造法式的数字化解构与重构。通过这个项目我们能够将古建筑的“魂”——其比例关系、构件组合、装饰规律——封装成一套可复用的数字资产库。无论是用于文化遗产的数字化存档、历史场景的影视游戏复原还是古城规划的虚拟仿真这套规则库都能成为你手中一把高效而精准的“数字凿子”。2. 核心思路从法式到代码的翻译艺术构建古建筑规则库绝非将三维模型做简单的参数化拉伸那么简单。它的核心思路是建立一套从传统建筑法式到CGA规则逻辑的映射体系。这要求我们不仅要懂三维技术更要懂古建筑本身。2.1 解构古建筑的层次化生成逻辑中国古建筑尤其是木构架体系有着极其清晰的层次和模块化特征。这恰恰与CityEngine的规则驱动、分形细化的思想完美契合。我的构建思路是自顶向下、由粗到精总体轮廓与台基这是建筑的“根基”。规则首先确定建筑的平面轮廓矩形、十字形、多边形等和台基的高度、阶数。台基的生成本身就可以是一套子规则包含须弥座、普通台基以及踏跺台阶的自动生成。柱网与开间这是建筑的“骨架”。根据平面类型如《营造法式》中的“分槽”制度规则自动计算并布置柱子的位置形成标准的柱网。开间柱与柱之间的空间数量、明间与次间的宽度比例都可以作为关键参数进行驱动。大木作屋身与屋顶这是建筑的“主体”。规则将根据柱网生成额枋、平板枋进而决定斗拱的布置位置和类型。屋顶部分是最复杂的规则需要处理举折屋面曲线、出檐长度并根据建筑等级和类型庑殿、歇山、悬山、硬山、攒尖生成完全不同的屋顶三维形态包括正脊、垂脊、戗脊、瓦垄的自动排布。小木作与装饰这是建筑的“服饰”。包括门窗隔扇、槛窗、栏杆、挂落、彩画纹样等。这部分规则往往作为最后的细化阶段通过纹理映射对于规律彩画或复杂几何生成对于雕花构件来实现。这种层次化的规则设计使得我们可以像搭积木一样通过调整几个高层级参数如“建筑类型”、“开间数”、“屋顶形式”就能驱动整个建筑从地基到屋脊的全套生成过程极大地提升了效率和控制力。2.2 CGA规则编写的核心范式在CityEngine中一切皆由CGA规则文件.cga定义。编写古建筑规则需要熟练掌握其几个核心语句和思想attr属性定义建筑的参数这是用户交互的接口。例如attr 屋顶类型 “歇山顶” // 选项[庑殿顶, 歇山顶, 悬山顶, 硬山顶, 攒尖顶] attr 面阔三间 5 attr 进深二间 4 attr 斗拱类型 “五铺作”Lot-Building初始规则将地块Lot初始化为一个建筑体量Building通常后续会立即进行分割。split分割这是构建层次的核心。沿X、Y、Z轴对形状进行分割以生成台基、柱网、楼层、开间等。// 分割出台基和屋身 Building -- split(z){ 台基高度: 台基 | ~1: 屋身 } // 在屋身平面分割出开间和进深 屋身 -- split(x){ 面阔1: 开间1 | 面阔2: 开间2 | 面阔3: 开间3 } split(y){ 进深1: 廊步 | ~1: 室内空间 }comp组件将形状分解为它的面f、边e、顶点v。这在生成屋顶、屋檐、装饰线条时至关重要。// 提取屋顶顶面以生成瓦垄 屋顶体量 -- comp(f){ top: 屋顶面 | side: 屋顶侧面 }extrude挤出生成三维体量如将柱础挤出为柱子将墙体挤出高度。i插入与t纹理用于添加细节和贴图。例如在墙面上i入窗户构件或者为瓦垄t上瓦片纹理。编写规则时一个重要的心得是先完成主干流程的“白模”生成再不断添加细节分支。先确保建筑的大比例、大关系正确再深入到斗拱的昂翘、窗棂的花纹。避免一开始就陷入某个局部细节导致规则逻辑混乱。3. 关键模块的规则实现与参数化设计下面我将以几个最具代表性的古建筑构件为例拆解其CGA规则实现的核心思路与参数化技巧。3.1 屋顶生成举折与形式的算法表达屋顶是古建筑的冠冕其规则也最为复杂。关键在于将“举折”屋面坡度变化这一概念数学化、参数化。1. 歇山顶生成逻辑歇山顶可以理解为庑殿顶下半部加上悬山顶上半部。在规则中我通常这样构建attr 举架高度 10 // 总举高 attr 步架数 5 // 檩条间距数量 attr 举折系数 0.8 // 每步递减的系数 规则 生成歇山顶(初始形状) -- // 1. 确定正脊和垂脊位置 split(y){ 0.2: 山花部分 | ~1: 主体屋面 } 主体屋面 -- // 2. 挤出屋面基本体量高度由举架控制 extrude(举架高度) // 3. 使用comp(f)提取顶面并用split(e)分割出四条边 comp(f){ top: 屋面顶面 } 屋面顶面 -- // 4. 关键对顶面进行三角化分割模拟举折曲面 split(x){ all: 檩条分割 }* 檩条分割 -- // 5. 对每一段根据举折系数计算当前高度并调整顶点 // 这里需要用到geometry.offset等函数进行顶点位移模拟曲面 // 6. 最后对处理后的三角面进行瓦垄分割 split(x){ 瓦垄宽度: 重复生成瓦垄 }参数化要点举架高度、步架数、举折系数共同决定了屋面的柔和曲线。不同的建筑时代唐、宋、清这些参数有典型值可以预设为选项。2. 瓦垄的自动排布瓦垄必须从屋脊向屋檐放射状分布且间距逐渐微增“撒网”。实现方法是先沿屋脊线放置一个种子形状然后使用split配合scope.sx相对坐标进行递归分割每次分割的宽度增加一个微小的撒网系数。注意瓦垄的起点要避开正脊两端的吻兽位置通常需要在规则中设置一个“吻兽占位区”。3.2 斗拱的模块化与实例化斗拱是规则库中的“明星模块”它高度标准化又变化万千。我的策略是分层级模块化构建。第一层单朵斗拱作为独立资产。为每一种铺作如“五铺作单抄单下昂”编写独立的CGA规则文件如Dougong_5pu.cga。这个文件只负责生成一朵完整的、位于原点位置的斗拱。它内部通过attr暴露关键参数如斗口宽度模数、出跳长度、昂嘴样式等。第二层柱头铺作的布局规则。在建筑主体的规则中在需要放置斗拱的额枋位置上使用i命令调用实例化单朵斗拱资产。// 在额枋顶面中心点实例化斗拱 额枋顶面 -- i(“Dougong_5pu.obj”, scope.xyz, 0, 1, 1, 1) // 位置旋转缩放第三层补间铺作的自动计算。在两柱之间的额枋上补间铺作的数量一朵、两朵、三朵需根据“间广”开间宽度自动计算。规则需要判断当前scope.sx当前形状宽度并与一个预设的“朵当”斗拱间距标准进行比较动态决定是居中放置一朵还是均分放置多朵。实操心得将斗拱的斗口宽度作为整个建筑模型的基本模数是一个好习惯。其他重要尺寸如柱径、梁高都可以定义为斗口宽的倍数如清式规定柱径为6斗口这样能最大程度保证建筑各部分的比例协调符合法式。3.3 纹理与细节性能与效果的平衡古建筑的彩画、砖雕、木纹是灵魂但在大规模场景中全部用高模几何实现是不现实的。规则库需要巧妙平衡。贴图Texture为主对于大面积、重复的纹样如墙面砖纹、 uniform的彩画使用高质量贴图配合UV映射是最佳选择。在CGA中使用t命令并精心调整scope.uv来确保贴图在柱、梁、枋上正确拉伸。法线贴图Normal Map与视差贴图Parallax Occlusion Map用于在低多边形模型上模拟复杂的浮雕效果如瓦当的兽面、椽头的雕花。这能节省大量几何资源。几何实例化Instancing用于关键装饰对于重要的、近景可见的装饰构件如栏杆下的镂空花板、门楣上的雕花可以使用简单的几何体结合透明贴图或者使用CGA的i命令实例化一些中等精度的预制模型。LOD多层次细节规则这是专业规则库必备的一环。为同一构件编写高、中、低三个细节版本的规则然后根据摄像机距离或全局LOD设置在规则中使用case语句进行切换。构件 -- case geometry.distanceToCamera 50: 高细节版本 case geometry.distanceToCamera 200: 中细节版本 else: 低细节版本4. 规则库的工程化构建与管理当规则数量增多后如何管理就成了问题。一个成熟的古建筑规则库应该是一个工程而不仅仅是一堆.cga文件。4.1 模块化与资产目录结构我建议采用如下目录结构Ancient_Architecture_Assets/ ├── Rules/ │ ├── Core/ # 核心规则如主建筑生成器 │ ├── Components/ # 独立构件规则 │ │ ├── Dougong/ # 斗拱系列 │ │ ├── Roof/ # 屋顶系列 │ │ └── Ornament/ # 装饰系列 │ └── Styles/ # 完整风格规则引用Components ├── Assets/ │ ├── Textures/ # 贴图漫反射、法线、高光等 │ ├── Models/ # 外部引用的精细模型.obj, .fbx │ └── Footprints/ # 建筑平面轮廓形状.obj └── Docs/ # 参数说明文档在核心规则中使用相对路径引用组件// 在Core规则中引用斗拱组件 import “../Components/Dougong/Dougong_5pu.cga”4.2 参数预设与风格系统CityEngine的“规则包”和“初始规则”功能可以很好地封装风格。为一个完整的建筑风格如“清代官式”、“江南民居”创建一个主规则文件并为其所有attr属性设置好一套典型的默认值。更高级的用法是利用用户属性User Attributes。在CityEngine场景中可以为不同的地块Lot设置不同的属性值如朝代宋,等级殿堂。然后在CGA规则开头读取这些属性attr 风格 get(“朝代”) // 从地块属性读取 init case 风格 “宋”: 面阔比例 宋式比例 举折系数 0.5 case 风格 “清”: 面阔比例 清式比例 举折系数 0.65这样只需在地图上绘制不同属性的地块就能一键生成风格各异的古建筑群实现真正的“规划级”批量生成。5. 实战踩坑与性能优化经验在实际项目中我积累了一些宝贵的教训这里分享给你希望能帮你少走弯路。5.1 几何复杂度与生成速度的博弈古建筑细节繁多规则稍不注意就会生成面数爆炸的模型。坑1递归分割的终止条件缺失。在生成瓦垄、窗棂等重复元素时必须设置明确的终止条件split的{‘N: stop}或通过scope.sx判断否则规则会陷入无限细分导致CityEngine卡死。坑2过早进行高精度计算。不要在规则的初始阶段就计算复杂的曲线或进行大量三角化。先使用简单的几何体如方块、棱柱搭建出整体比例和框架最后再通过comp(f)对特定面进行精细化处理。这符合“先整体后局部”的建模思想也利于性能。优化技巧使用center和plane分割。对于对称构件先用center定位再用plane分割比多次split更高效、逻辑更清晰。5.2 纹理UV的常见问题古建筑构件形状不规则UV拉伸是家常便饭。问题圆柱柱子上的纹理接缝明显。解决方法是在为圆柱体t贴图前先使用setupProjection命令将UV投影方式设置为圆柱投影0, scope.xyz可以极大改善环绕纹理的效果。问题屋顶瓦垄纹理重复度不自然。不要对整个屋顶面应用一个平铺纹理。应该在生成每一片瓦垄几何时单独为其赋予UV。可以写一个瓦垄的生成规则在其中固定其UV范围如scope.uv set(0,0,1,1)然后让瓦片纹理在这个范围内平铺这样无论屋顶大小每片瓦的纹理尺度都是一致的。5.3 规则调试与错误排查CGA规则调试不像编程有断点主要靠“可视化输出”。善用color命令在规则的关键阶段给不同的形状涂上不同的颜色。例如split之后给每个部分涂色可以立刻看出分割是否正确。分割后形状 -- color(1,0,0) // 红色 ...使用print语句输出变量在CGA中可以使用print(attributeName)将属性值打印到CityEngine的控制台这对于检查动态计算的值如根据开间数计算的斗拱数量非常有用。简化测试遇到复杂规则出错时注释掉大部分细节只保留最主干的分割和挤出流程先让“白模”正确生成再逐步取消注释添加细节定位问题模块。构建一个成熟的CityEngine古建筑规则库是一项融合了建筑学、计算机图形学和设计思维的跨学科工作。它没有绝对的终点更像是一个不断迭代、丰富和完善的数字工具箱。我最深的体会是最好的规则不是那些最复杂的而是那些参数设计最直观、逻辑最健壮、最容易让他人理解和复用的规则。当你看到通过调整几个滑块屏幕上就能从无到有地生长出不同朝代、不同等级、错落有致的古建筑群时那种成就感足以抵消所有编码调试的枯燥。这份数字化的“营造法式”或许就是我们这个时代的匠人对传统智慧的一种独特致敬与传承。本文还有配套的精品资源点击获取