Le catacombe di Parigi: ricreando il labirinto di sei milioni di scheletri in CityEngine

Pubblicato il 11 January 2026 | Tradotto dallo spagnolo
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.

Le catacombe di Parigi: ricreando il labirinto di sei milioni di scheletri in CityEngine

Sotto il suolo della Città della Luce si estende uno dei più grandi ossari del mondo: le Catacombe di Parigi. Questa vasta rete sotterranea, che originariamente erano cave di calcare, fu trasformata tra il 1786 e il 1814 nell'ultimo riposo per sei milioni di parigini, i cui resti furono trasferiti da cimiteri sovraffollati. Ciò che iniziò come una soluzione di risanamento urbano si trasformò in un labirinto mortale che ha catturato l'immaginazione popolare e attira coraggiosi esploratori urbani. 💀

Il labirinto dove la città incontra la morte

Il vero mistero delle Catacombe non sono solo i milioni di crani e femori che adornano le loro pareti, ma la scala labirintica del loro design. Con più di 300 chilometri di tunnel che serpeggiano sotto Parigi, solo una piccola frazione è aperta al pubblico ufficialmente. Nel corso degli anni, numerosi esploratori si sono persi in questa oscura rete, alcuni permanentemente. L'opprimente presenza della morte si manifesta non solo visivamente, ma attraverso un'atmosfera opprimente che ha generato innumerevoli racconti di fenomeni paranormali e incontri spettrali. 🌫️

Caratteristiche uniche delle Catacombe:
  • Pareti composte da pattern geometrici di crani e ossa lunghe
  • Tunnel che si estendono per 300+ km sotto Parigi
  • Atmosfera costante di 14°C con 95% di umidità
Una rete sotterranea dove i visitatori si sono persi irrimediabilmente, circondati dalla densità della morte

Configurazione iniziale del progetto in CityEngine

Per ricreare le Catacombe in CityEngine, iniziamo creando un nuovo progetto con un terreno piatto che rappresenti il livello del suolo di Parigi. Impostiamo il sistema di coordinate in metri e definiamo un'area di lavoro di 2000x2000 metri per coprire l'estensione approssimativa delle catacombe. Nell'Inspector di Scena, configuriamo le unità in metri e attiviamo il sistema di snapping per un design preciso dei tunnel. 🗺️

Configurazione base del progetto:
  • Area di lavoro: 2000x2000 metri
  • Unità: Metriche (metri)
  • Sistema di coordinate: Y-up per consistenza

Design del grafo di strade labirintico

Il cuore della generazione procedurale in CityEngine è il grafo di strade. Creiamo un pattern di strade organico usando lo strumento Street Growth con parametri di variazione d'angolo alta (45-90°) e variazione di lunghezza media. Applichiamo molteplici seed points distribuiti casualmente per generare un labirinto naturalistico che imiti la crescita organica delle antiche cave. I nodi di intersezione devono avere raggio minimo per creare angoli chiusi. 🕸️

Parametri del grafo di strade:
  • Angle Variation: 45°-90° per pattern irregolari
  • Street Length: 10-50 metri variazione
  • Segment Curvature: 0.3 per curve morbide

Regole CGA per la generazione dei tunnel

Le regole CGA (Computer Generated Architecture) sono l'anima di CityEngine. Creiamo una regola chiamata CatacombTunnel.cga che inizia con:

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

Questa regola base estrude la forma del tunnel e separa le facce per applicare diverse texture e geometrie a pareti, soffitto e pavimento. L'offset negativo crea il volume scavato del tunnel. 🏗️

Struttura base delle regole:
  • @StartRule: Punto di ingresso della generazione
  • comp(f): Decompone la forma in facce
  • offset: Crea il volume del tunnel

Generazione procedurale delle pareti di ossa

Per le iconiche pareti di ossa, sviluppiamo regole CGA complesse:

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")

Questo sistema divide le pareti in pattern regolari e alterna file di crani e ossa lunghe basandosi sull'area disponibile. Le condizioni case permettono variazione secondo il contesto geometrico. 💀

Componenti del sistema osseo:
  • SkullRow: Fila di crani organizzati
  • BoneRow: Fila di femori e tibie
  • Sezioni di pietra: Aree di pietra naturale

Sistema di illuminazione e atmosfera

L'illuminazione è cruciale per l'atmosfera opprimente. In CityEngine, configuriamo luci puntiformi strategiche che simulino illuminazione artificiale antica:

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])

Queste luci sono distribuite proceduralmente ogni 20-30 metri lungo i tunnel principali, creando zone di penombra intercalate con oscurità profonda. La temperatura del colore calda replica lampade a olio storiche. 💡

Parametri di illuminazione:
  • Colore: Caldo #ffcc99 per torce
  • Intensità: 0.5-0.8 per effetto tenue
  • Distribuzione: Ogni 20-30 metri

Variazione e casualità controllata

Per evitare ripetizioni evidenti, implementiamo variazione procedurale usando funzioni di rumore e condizioni contestuali:

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")

Questo sistema crea pattern unici ma coerenti, con variazioni in densità e stato di conservazione delle ossa che riflettono la realtà storica. 🎲

Elementi di variazione:
  • Densità di ossa: 60-80% copertura
  • Stati di conservazione: Intatto, eroso, rotto
  • Pattern: Regolare, raggruppato, disperso

Esportazione per motori di gioco

Una volta generate le catacombe, le esportiamo in formati standard usando il CityEngine Exporter. Per Unity, esportiamo come FBX con gruppi LOD. Per Unreal Engine, usiamo il formato Datasmith che preserva i materiali e l'organizzazione della scena. Le regole CGA vengono compilate in geometria statica ottimizzata per il rendering in tempo reale. 📤

Opzioni di esportazione:
  • FBX: Per Unity e altri motori
  • glTF: Per applicazioni web e mobili
  • OBJ: Come formato universale di backup

Applicazioni del modello generato

Il modello delle Catacombe generato in CityEngine ha molteplici applicazioni: da ambienti per videogiochi horror a strumenti educativi di realtà virtuale che permettono di esplorare questo sito storico senza rischi. La natura parametrica del modello permette di generare variazioni infinite per diversi scopi, mantenendo sempre l'essenza labirintica e opprimente dell'originale. 🎮

Il futuro del patrimonio culturale procedurale

La ricreazione delle Catacombe di Parigi in CityEngine rappresenta la frontiera della preservazione digitale. Catturando non solo la geometria, ma le regole sottostanti della sua costruzione, creiamo un modello vivo che può evolvere e adattarsi a diverse esigenze. Questo approccio democratizza l'accesso a siti storici pericolosi o inaccessibili, permettendo a studenti, ricercatori e artisti di sperimentare questi spazi in modo sicuro mentre se ne preserva il lascito per le generazioni future. ✨