
巴黎地下墓穴:在CityEngine中重现六百万骷髅迷宫
在光之城巴黎的地下,延伸着世界上最大的骨灰存放地之一:巴黎地下墓穴。这个庞大的地下网络最初是石灰石采石场,在1786年至1814年间被改造为六百万巴黎人的最终安息之地,他们的遗骸从拥挤的墓地中被转移而来。原本作为城市卫生解决方案开始的东西,变成了一个致命的迷宫,俘获了大众的想象力,并吸引着勇敢的城市探险者。💀
城市与死亡相遇的迷宫
地下墓穴真正的神秘之处不仅仅是数百万装饰墙壁的头骨和大腿骨,而是其迷宫般的规模设计。在巴黎地下蜿蜒超过300公里的隧道中,只有很小一部分正式对公众开放。多年来,许多探险者在这黑暗的网络中迷失,有些人永久性地消失了。死亡的压倒性存在不仅通过视觉表现出来,还通过一种压抑的氛围,产生了无数关于超自然现象和鬼魂遭遇的报道。🌫️
地下墓穴的独特特征:- 由头骨和长骨的几何图案组成的墙壁
- 在巴黎地下延伸300+公里的隧道
- 恒定14°C温度,95%湿度氛围
一个地下网络,访客在其中不可挽回地迷失,被死亡的密度包围
CityEngine项目初始设置
为了在CityEngine中重现地下墓穴,我们从创建一个新项目开始,使用平坦地形代表巴黎地面水平。我们将坐标系统设置为米,并定义2000x2000米的作业区域,以覆盖地下墓穴的大致范围。在场景检查器中,将单位设置为米,并激活对齐系统以精确设计隧道。🗺️
项目基本设置:- 作业区域:2000x2000米
- 单位:公制(米)
- 坐标系统:Y-up以保持一致性
迷宫状街道图设计
CityEngine中程序生成的核心是街道图。我们使用Street Growth工具创建有机街道图案,参数设置为高角度变化(45-90°)和中等长度变化。应用多个随机分布的种子点来生成自然主义的迷宫,模仿古老采石场的有机生长。交叉节点必须具有最小半径以创建封闭角落。🕸️
街道图参数:- 角度变化:45°-90°用于不规则图案
- 街道长度:10-50米变化
- 段曲率:0.3用于平滑曲线
隧道生成CGA规则
CGA(Computer Generated Architecture)规则是CityEngine的灵魂。我们创建了一个名为CatacombTunnel.cga的规则,从以下开始:
@StartRule
Tunnel -->
offset(-0.5)
comp(f) { side : Wall | top : Ceiling | bottom : Floor }
这个基本规则挤出隧道形状并分离面,以对墙壁、天花板和地板应用不同的纹理和几何形状。负偏移创建隧道的挖掘体积。🏗️
规则基本结构:- @StartRule:生成入口点
- comp(f):将形状分解为面
- offset:创建隧道体积
骨墙程序生成
为了标志性的骨墙,我们开发了复杂的CGA规则:
Wall -->
setupProjection(0, scope.xy, 1.5, 1.5)
texture("stone_base.jpg")
split(x) { ~1 : BonePattern }*
BonePattern -->
case geometry.area > 0.5:
split(y) { ~0.3: SkullRow | ~0.7: BoneRow }*
else:
texture("stone_dark.jpg")
这个系统将墙壁分成规律图案,并根据可用面积交替头骨行和长骨行。case条件允许根据几何上下文进行变化。💀
骨骼系统组件:- SkullRow:组织好的头骨行
- BoneRow:股骨和胫骨行
- 石头部分:天然石头区域
照明和氛围系统
照明对于压抑氛围至关重要。在CityEngine中,我们配置战略性点光源来模拟古老的人工照明:
LightFixture -->
s('0.2, '0.2, '0.5)
t(0, 0, 2.5)
i("light_point_01.obj")
set(material.light.emissive, 0.8)
set(material.light.color, [1.0, 0.8, 0.6])
这些灯光沿主要隧道每20-30米程序分布,创建半阴影区与深黑暗交替。温暖色温复制历史油灯。💡
照明参数:- 颜色:温暖#ffcc99用于火把
- 强度:0.5-0.8用于昏暗效果
- 分布:每20-30米
控制变异和随机性
为了避免明显重复,我们使用噪声函数和上下文条件实现程序变异:
SkullRow -->
case rand(0.0, 1.0) < 0.7:
split(x) { ~0.25: Skull | ~0.1: Gap }*
else:
split(x) { ~0.2: Skull | ~0.15: Gap }*
Skull -->
case rand(0.0, 1.0) < 0.3:
i("skull_broken.obj")
else:
i("skull_intact.obj")
这个系统创建独特但连贯的图案,骨骼密度和保存状态的变化反映历史现实。🎲
变异元素:- 骨骼密度:60-80%覆盖
- 保存状态:完整、侵蚀、破损
- 图案:规律、聚集、分散
导出到游戏引擎
地下墓穴生成后,我们使用CityEngine Exporter导出到标准格式。对于Unity,以FBX和LOD组导出。对于Unreal Engine,使用Datasmith格式保留材质和场景组织。CGA规则编译成优化的静态几何用于实时渲染。📤
导出选项:- FBX:用于Unity和其他引擎
- glTF:用于网页和移动应用
- OBJ:作为通用备份格式
生成模型的应用
在CityEngine中生成的地下墓穴模型有多种应用:从恐怖游戏环境到教育虚拟现实工具,允许无风险探索这个历史遗址。模型的参数化性质允许为不同目的生成无限变体,同时始终保持原作的迷宫和压抑本质。🎮
程序文化遗产的未来
在CityEngine中重现巴黎地下墓穴代表数字保存的前沿。通过捕捉不仅仅是几何,还包括其构建的底层规则,我们创建了一个活模型,可以演化和适应不同需求。这种方法使危险或不可访问的历史遗址民主化访问,允许学生、研究者和艺术家安全体验这些空间,同时为后代保存其遗产。✨