巴黎地下墓穴:用CityEngine重现六百万骷髅迷宫

发布于 2026年02月26日 | 从西班牙语翻译
Vista de CityEngine mostrando la generación procedural de las Catacumbas de París, con el editor de reglas CGA abierto y la vista 3D de túneles laberínticos y paredes de huesos generadas automáticamente.

巴黎地下墓穴:在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中重现巴黎地下墓穴代表数字保存的前沿。通过捕捉不仅仅是几何,还包括其构建的底层规则,我们创建了一个活模型,可以演化和适应不同需求。这种方法使危险或不可访问的历史遗址民主化访问,允许学生、研究者和艺术家安全体验这些空间,同时为后代保存其遗产。✨