
Катакомбы Парижа: воссоздание лабиринта из шести миллионов скелетов в 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 представляет авангард цифровой сохранности. Захватывая не только геометрию, но и базовые правила их конструкции, мы создаем живую модель, которая может эволюционировать и адаптироваться к разным нуждам. Этот подход демократизирует доступ к опасным или недоступным историческим объектам, позволяя студентам, исследователям и художникам безопасно体验вать эти пространства, сохраняя их наследие для будущих поколений. ✨