Катакомбы Парижа: воссоздание лабиринта из шести миллионов скелетов в CityEngine

Опубликовано 29.01.2026 | Перевод с испанского
Вид CityEngine, показывающий процедурную генерацию Катакомб Парижа, с открытым редактором правил CGA и 3D-видом лабиринтных туннелей и стен из костей, сгенерированных автоматически.

Катакомбы Парижа: воссоздание лабиринта из шести миллионов скелетов в CityEngine

Под землей Города Света простирается один из крупнейших оссуариев в мире: Катакомбы Парижа. Эта обширная подземная сеть, которая изначально была каменоломнями известняка, была преобразована между 1786 и 1814 годами в последнее пристанище для шести миллионов парижан, чьи останки были перенесены из переполненных кладбищ. То, что началось как решение проблемы городского санитария, превратилось в смертельный лабиринт, который захватил воображение народа и привлекает смелых городских исследователей. 💀

Лабиринт, где город встречается со смертью

Настоящая загадка Катакомб — это не только миллионы черепов и бедренных костей, украшающих их стены, но и лабиринтный масштаб их конструкции. С более чем 300 километрами туннелей, извивающихся под Парижем, только малая часть официально открыта для публики. За годы множество исследователей потерялись в этой темной сети, некоторые навсегда. Ошеломляющее присутствие смерти проявляется не только визуально, но и через гнетущую атмосферу, породившую бесчисленные рассказы о паранормальных явлениях и призрачных встречах. 🌫️

Уникальные характеристики Катакомб:

  • Стены, составленные из геометрических узоров из черепов и длинных костей
  • Туннели, простирающиеся на 300+ км под Парижем
  • Постоянная атмосфера 14°C с 95% влажности
Подземная сеть, где посетители безвозвратно потерялись, окруженные плотностью смерти

Начальная настройка проекта в CityEngine

Чтобы воссоздать Катакомбы в CityEngine, мы начинаем с создания нового проекта с плоским террейном, представляющим уровень земли Парижа. Устанавливаем систему координат в метрах и определяем рабочую область 2000x2000 метров для покрытия приблизительного размера катакомб. В инспекторе сцены настраиваем единицы измерения в метрах и активируем систему snapping для точного проектирования туннелей. 🗺️

Базовая настройка проекта:

  • Рабочая область: 2000x2000 метров
  • Единицы: Метрические (метры)
  • Система координат: Y-up для согласованности

Проектирование лабиринтного графа улиц

Сердце процедурной генерации в CityEngine — это граф улиц. Мы создаем органический узор улиц с помощью инструмента Street Growth с параметрами высокой вариации углов (45-90°) и средней вариации длины. Применяем несколько случайных seed points для генерации натуралистичного лабиринта, имитирующего органический рост древних каменоломен. Узлы пересечения должны иметь минимальный радиус для создания закрытых углов. 🕸️

Параметры графа улиц:

  • Angle Variation: 45°-90° для нерегулярных узоров
  • Street Length: 10-50 метров вариация
  • Segment Curvature: 0.3 для плавных кривых

Правила CGA для генерации туннелей

Правила CGA (Computer Generated Architecture) — это душа CityEngine. Мы создаем правило под названием CatacombTunnel.cga, которое начинается с:

@StartRule
Tunnel -->
   offset(-0.5)
   comp(f) { side : Wall | top : Ceiling | bottom : Floor }

Это базовое правило экструдирует форму туннеля и разделяет грани для применения различных текстур и геометрий к стенам, потолку и полу. Отрицательный offset создает вырытый объем туннеля. 🏗️

Базовая структура правил:

  • @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: Ряд бедренных костей и большеберцовых
  • Stone sections: Участки натурального камня

Система освещения и атмосферы

Освещение критически важно для гнетущей атмосферы. В 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")

Эта система создает уникальные, но coherentные узоры с вариациями в плотности и состоянии сохранности костей, отражающими историческую реальность. 🎲

Элементы вариации:

  • Плотность костей: 60-80% покрытия
  • Состояния сохранности: Целый, эродированный, сломанный
  • Узоры: Регулярный, групповой, рассеянный

Экспорт для игровых движков

После генерации катакомб мы экспортируем их в стандартные форматы с помощью CityEngine Exporter. Для Unity экспортируем как FBX с группами LOD. Для Unreal Engine используем формат Datasmith, который сохраняет материалы и организацию сцены. Правила CGA компилируются в оптимизированную статическую геометрию для рендеринга в реальном времени. 📤

Опции экспорта:

  • FBX: Для Unity и других движков
  • glTF: Для веб- и мобильных приложений
  • OBJ: Как универсальный формат резервной копии

Применение сгенерированной модели

Модель Катакомб, сгенерированная в CityEngine, имеет множество применений: от окружений для хоррор-видеоигр до образовательных инструментов виртуальной реальности, позволяющих исследовать этот исторический объект без рисков. Параметрическая природа модели позволяет генерировать бесконечные вариации для разных целей, всегда сохраняя лабиринтную и гнетущую сущность оригинала. 🎮

Будущее процедурного культурного наследия

Воссоздание Катакомб Парижа в CityEngine представляет авангард цифровой сохранности. Захватывая не только геометрию, но и базовые правила их конструкции, мы создаем живую модель, которая может эволюционировать и адаптироваться к разным нуждам. Этот подход демократизирует доступ к опасным или недоступным историческим объектам, позволяя студентам, исследователям и художникам безопасно体验вать эти пространства, сохраняя их наследие для будущих поколений. ✨