파리 지하묘지: 시티엔진으로 600만 개 해골 미로 재현

2026년 02월 13일 | 스페인어에서 번역됨
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에서 600만 개의 해골 미로 재현

빛의 도시 파리 땅 아래에는 세계에서 가장 큰 납골당 중 하나가 펼쳐져 있습니다: 파리 카타콤입니다. 원래 석회석 채석장이었던 이 광대한 지하 네트워크는 1786년부터 1814년 사이에 과밀한 묘지에서 옮겨진 600만 명의 파리 시민들의 마지막 안식처로 변모했습니다. 도시 위생 문제 해결을 위한 해결책으로 시작된 것이 치명적인 미로로 변해 대중의 상상력을 사로잡았고, 용감한 도시 탐험가들을 끌어들이고 있습니다. 💀

도시가 죽음과 만나는 미로

카타콤의 진정한 미스터리는 벽을 장식하는 수백만 개의 두개골과 대퇴골이 아니라 그 설계의 미로 같은 규모입니다. 파리 아래를 뱀처럼 뒤틀린 300km 이상의 터널 중 공식적으로 공개된 것은 아주 작은 부분뿐입니다. 수년에 걸쳐 수많은 탐험가들이 이 어두운 네트워크에서 길을 잃었고, 일부는 영원히 사라졌습니다. 압도적인 죽음의 존재는 시각적으로만이 아니라, 수많은 초자연적 현상과 유령 만남에 대한 이야기를 낳은 억압적인 분위기를 통해 나타납니다. 🌫️

카타콤의 독특한 특징:
  • 두개골과 긴 뼈의 기하학적 패턴으로 구성된 벽
  • 파리 아래 300+ km로 뻗은 터널
  • 14°C의 일정한 온도와 95% 습도
방문자들이 돌이킬 수 없이 길을 잃은 지하 네트워크, 죽음의 밀도로 둘러싸인 곳

CityEngine 프로젝트 초기 설정

CityEngine에서 카타콤을 재현하기 위해, 파리 지면 수준을 나타내는 평평한 지형으로 새 프로젝트를 생성합니다. 좌표계를 미터로 설정하고 카타콤의 대략적인 범위를 커버하기 위해 2000x2000 미터 작업 영역을 정의합니다. 장면 검사기에서 단위를 미터로 설정하고 터널의 정밀한 설계를 위해 스냅 시스템을 활성화합니다. 🗺️

프로젝트 기본 설정:
  • 작업 영역: 2000x2000 미터
  • 단위: 미터법 (미터)
  • 좌표계: 일관성을 위한 Y-up

미로 같은 거리 그래프 설계

CityEngine의 절차적 생성의 핵심은 거리 그래프입니다. Street Growth 도구를 사용하여 각도 변동이 높음(45-90°)과 길이 변동이 중간인 유기적인 거리 패턴을 생성합니다. 고대 채석장의 유기적 성장을 모방한 자연스러운 미로를 생성하기 위해 무작위로 분포된 여러 시드 포인트를 적용합니다. 교차점 노드는 좁은 모퉁이를 만들기 위해 최소 반경을 가져야 합니다. 🕸️

거리 그래프 매개변수:
  • 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 }

이 기본 규칙은 터널 형태를 압출하고 벽, 천장, 바닥에 서로 다른 텍스처와 기하학을 적용하기 위해 면을 분리합니다. 음의 오프셋은 터널의 굴착된 볼륨을 생성합니다. 🏗️

규칙 기본 구조:
  • @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")

이 시스템은 고유하지만 일관된 패턴을 만들며, 뼈의 밀도와 보존 상태 변형이 역사적 현실을 반영합니다. 🎲

변형 요소:
  • 뼈 밀도: 60-80% 커버리지
  • 보존 상태: 온전함, 침식됨, 부서짐
  • 패턴: 규칙적, 군집, 분산

게임 엔진으로 내보내기

카타콤 생성 후 CityEngine Exporter를 사용하여 표준 형식으로 내보냅니다. Unity의 경우 LOD 그룹이 포함된 FBX로 내보냅니다. Unreal Engine의 경우 재질과 장면 구성을 보존하는 Datasmith 형식을 사용합니다. CGA 규칙은 실시간 렌더링에 최적화된 정적 기하학으로 컴파일됩니다. 📤

내보내기 옵션:
  • FBX: Unity 및 기타 엔진용
  • glTF: 웹 및 모바일 앱용
  • OBJ: 범용 백업 형식

생성된 모델의 응용

CityEngine에서 생성된 카타콤 모델은 공포 비디오 게임 환경부터 위험 없이 이 역사적 장소를 탐험할 수 있는 가상 현실 교육 도구까지 다양한 응용이 있습니다. 모델의 매개변수적 특성은 원본의 미로 같은 본질을 유지하면서 다양한 목적에 무한한 변형을 생성할 수 있게 합니다. 🎮

절차적 문화 유산의 미래

CityEngine에서 파리 카타콤을 재현하는 것은 디지털 보존의 최전선입니다. 기하학뿐만 아니라 구성의 기본 규칙을 포착함으로써 진화하고 다양한 요구에 적응할 수 있는 살아있는 모델을 만듭니다. 이 접근법은 위험하거나 접근 불가능한 역사적 장소에 대한 접근을 민주화하여 학생, 연구자, 예술가들이 안전하게 이러한 공간을 경험할 수 있게 하며, 미래 세대를 위해 유산을 보존합니다. ✨