← 목록으로
LightMap 모나코 – 모나코 공국의 저해상도 3D 모델

LightMap 모나코 – 모나코 공국의 저해상도 3D 모델

라이트맵(LightMap)은 모나코의 지도를 빛으로 구현한 작품입니다. 손으로 직접 재단한 아크릴 직육면체 179개가 작은 테이블 크기의 받침대 위에 늘어서 있습니다. 각각의 블록은 개별 제어가 가능한 RGBW 픽셀로, 모두 합쳐 모나코 공국의 추상적이고 저해상도적인 3D 모델을 이룹니다. 이 모델은 실시간 데이터에 반응하고 손길에도 응답합니다. 저는 약 3개월에 걸쳐 혼자서 모든 과정을 완성했습니다. 콘셉트 구상부터 데이터 파이프라인, 전자 회로, 펌웨어, 제작, 소프트웨어, 사운드, 그리고 작품을 기록한 영상까지 전부요. 지금부터는 실제로 어떻게 만들었는지, 작업이 진행된 순서대로 이야기해보겠습니다.

형태를 잡아가는 과정

첫 번째 과제는 실제 장소를 격자형 직육면체 구조로 변환하면서도 모나코다운 느낌을 살리는 것이었습니다. OpenStreetMap에서 영토 경계선, 해안선, 블록 구조를 추출해 QGIS로 정리했고, 고도 데이터는 코페르니쿠스(Copernicus)의 지형 데이터를 활용했습니다. 모나코는 가파른 경사면 위에 세워진 도시입니다. 그 수직적인 지형이야말로 이곳을 직접 걷는 느낌의 핵심이기 때문에, 높이 데이터는 장식이 아닌 실제 수치여야 했습니다. 건물 높이도 최대한 원형에 가깝게 추가했습니다. 작품이 지형의 자연스러운 고저를 주로 반영하길 바랐지만, 건물 없이는 모나코를 알아볼 수 없었으니까요. 예상보다 OSM의 모나코 데이터가 부실해서 건물이나 세부 정보가 곳곳에서 빠져 있었습니다. 그래서 실제 도시의 발자국과 일치할 때까지 누락된 구조물을 직접 스크립트로 채워 넣었습니다. 고도 데이터를 CSV로 내보낸 뒤, 각 직육면체의 높이를 결정하는 하이트맵으로 변환하는 스크립트를 작성했습니다. 지도는 평평하지 않습니다. 언덕이 그대로 담겨 있습니다. 전체 레이아웃은 Blender로 불러왔습니다. 거기서 지형 위에 격자 구조를 배치하고, 한 가지 까다로운 조건을 해결하는 데 오랜 시간을 쏟았습니다. 아크릴 피스 하나하나가 레이저 컷팅된 스테인리스 스틸 플레이트의 구멍을 금속에 걸리지 않고 깔끔하게 통과해야 한다는 것이었죠. 3D 모델에서 단 1밀리미터의 오차도 실제 제작물에서는 피스가 뻑뻑하게 걸리거나 비뚤어지는 결과로 이어집니다. 그런 피스가 179개입니다. 격자 배치는 어떤 것도 잘라내기 전에 완벽하게 맞아야 했습니다. QGIS에서 컷팅 외곽선을 DXF 파일로 내보내고, FreeCAD로 불러와 파일을 준비한 뒤 레이저 컷팅을 맡겼습니다. 그렇게 만들어진 스테인리스 스틸 격자판과 그 아래 나무 레이어가 179개의 직육면체를 각자의 자리에 고정합니다.

오브젝트 제작

내부 프레임은 알루미늄 압출재로 제작했고, 외피는 합판과 알루미늄 모서리 부재로 마감했습니다. 견고하고 수리가 쉬우며, 전자 부품을 깔끔하게 고정할 수 있는 내부 마운팅 포인트를 확보할 수 있어 이 구조를 선택했습니다. 내부에는 파워 서플라이와 퓨즈 박스, 그리고 큐보이드 하단에서 빛을 올려보내는 약 10미터 길이의 RGBW LED 스트립이 자리합니다. 아크릴을 직접 구해 179개의 큐보이드를 재단했고, 그다음은 샌딩 작업이었습니다. 며칠이 걸렸습니다. 가공하지 않은 아크릴은 투명도가 너무 높아 빛이 그대로 통과해버리고, LED가 바닥에서 점처럼 도드라져 보여 조잡한 인상을 줍니다. 모든 면을 샌딩해 표면을 반투명하게 처리하면, 큐보이드 전체 높이에 걸쳐 빛이 고르게 퍼집니다. 프로젝트 전체를 통틀어 가장 화려함과 거리가 먼 작업이었지만, 결과물의 외관을 가장 크게 바꾼 공정이기도 했습니다. 조립 단계에서는 레이저 커팅된 스테인리스 그리드와 그 아래 목재 판을 통해 179개의 큐보이드를 하나씩 끼워 넣으며, 각각이 똑바로 서도록 정렬했습니다(이를 위해 3D 프린팅한 지그를 사용했습니다). 사이드 패널은 스테인으로, 상단 패널은 페인트로 마감해, 전체 케이스가 프로토타입이 아닌 완성된 오브제처럼 보이도록 했습니다. 처음부터 끝까지 일관된 의도는 하나였습니다. 멀리서 보면 정밀하고 깔끔하게, 가까이 다가섰을 때는 손으로 만들었음이 분명히 느껴지는 표면.

코드

코드의 양은 방대합니다. 이 작품은 Python 백엔드 위에서 구동되며, 라이브 운용을 위한 Flask 오퍼레이터 패널을 직접 사용합니다. 모드 매니저가 각각의 동작 방식을 관리하고 그 사이를 부드럽게 크로스페이드로 연결하기 때문에, 오브젝트는 한 상태에서 다음 상태로 갑작스럽게 전환되지 않습니다. 스테이트 스토어는 오프라인 우선 캐시를 유지해 네트워크 연결이 끊겨도 작품이 멈추지 않고 계속 작동합니다. 스케줄러는 시간의 흐름에 따라 동작을 순서대로 조율하고, 세 번의 리라이트를 거친 별도의 사운드 엔진은 빛과 동기화된 상태를 유지합니다. 작품은 다음과 같은 이름의 모드들로 구성됩니다:

  • 앰비언트는 휴지 상태입니다. 하루 동안 빛이 변하듯, 색의 흐름이 지도 위를 천천히 가로지릅니다. 공간 안에 조용히 스며드는 버전입니다.
  • 데이터 모드는 실시간 정보를 지형 위에 펼쳐냅니다. 모델을 일종의 디스플레이로 활용하는 방식으로, 컨트롤 패널에서 건물 이름이나 높이로 검색하면 해당 건물이 실시간으로 빛납니다.
  • 이벤트 모드는 제가 가장 애착을 갖는 기능입니다. 데이터베이스에서 좌표를 읽어, 실제 도시에서 무언가가 일어나고 있는 바로 그 지점을 모델 위에 빛으로 표시합니다. 실제 도시의 한 점이, 눈앞의 오브젝트 위에서 하나의 빛이 되는 것입니다.
  • Touch는 존재에 반응합니다. 사용자가 컨트롤 패널의 지도 위를 클릭하면 맵이 반응합니다. 그저 바라보는 대상이었던 것이 직접 조작하는 무언가로 바뀌는 순간입니다.
  • Thunder는 모델 위로 폭풍을 몰아칩니다.
  • Waypoint는 격자 위에 경로와 위치를 표시합니다. 고정 웨이포인트를 설정하고 색상도 바꿀 수 있습니다. 솔직히 말하면 비디오 게임에서 영감을 받았습니다. 게임 속 사람들이
Blender의 지오메트리 노드로 고도를 적용하고 CSV 절단 계획을 생성한 과정

이 작업이 추구하는 것

화려한 스크린은 처음부터 원하지 않았습니다. 사운드트랙은 조용하고 명상적이며 약간 영적인 분위기를 띠고, 앰비언트 움직임도 의도적으로 천천히 흐릅니다. 이 작품의 목표는 시선을 빼앗는 오브제가 아니라, 그 앞에 조용히 앉아 함께 머물 수 있는 차분한 존재가 되는 것이었습니다. 실제 모나코는 빽빽하고 수직적이며 시끄러운 도시입니다. 라이트맵(LightMap)은 바로 그 도시를 고요하게 붙잡아, 빛으로 빚어낸 결과물입니다. 이 작품은 소량 제작된 40페이지 하드커버 모노그래프로 기록되었으며, 특정 장소를 빛으로 변환하는 인터랙티브 오브제 시리즈의 첫 번째 작품입니다.

데이터 파이프라인

OpenStreetMap에서 외곽선, 해안선, 건물 평면도 등 기본 형상을 추출한 뒤 QGIS에서 처리했습니다. 모나코의 OSM 건물 데이터는 불완전했기 때문에, 누락된 구조물은 별도의 커스텀 스크립트로 보완했습니다. 지형 데이터는 코페르니쿠스(Copernicus) 고도 데이터를 활용해 CSV로 내보낸 후, 스크립트로 큐보이드별 하이트맵으로 변환했습니다. 총 179개의 큐보이드로 구성되며, 높이는 38mm에서 250mm까지 164가지 고유 값을 가지며 지면 고도와 건물 높이를 함께 반영합니다. QGIS에서 DXF로 내보낸 형상은 FreeCAD에서 다듬은 뒤, 스테인리스 스틸 등록 그리드와 목재 지지층으로 레이저 커팅했습니다. 큐보이드 배치는 Blender에서 해결했으며, 각 피스가 스테인리스 플레이트의 슬롯에 정확히 맞도록 설계했습니다.

소재

20×20mm 규격의 캐스트 PMMA 봉재를 사용했습니다. 다섯 면은 공장에서 폴리싱 처리된 상태로 납품받아, 길이에 맞게 재단한 뒤 각 면을 샌딩했습니다. 에폭시 캐스팅 방식과 비교해 비용, 시간, 리스크를 종합적으로 분석한 끝에 이 소재를 선택했습니다. 딥 포어 시 발생하는 기포, 경화 발열, 수축, 장기적인 황변, 그리고 수천 번에 달하는 수작업 샌딩을 모두 피할 수 있었습니다. 총 약 19.8m의 봉재, 부피로는 7.9L에 달합니다.

전자 장치

Raspberry Pi가 전체 제어 스택을 담당합니다. LED 구동에는 Adafruit Feather RP2040 Scorpio 보드 두 장을 사용했으며, 각각 8채널씩 총 16채널을 운용합니다. CS8812 어드레서블 RGBW 스트립은 약 10m 길이로, 사행(蛇行) 방식으로 배선되어 있습니다. 짝수 번째 구간은 인덱스가 역순으로 배열되므로, 매핑 레이어에서 소프트웨어적으로 이를 반전 처리합니다. 대전류 RGBW 부하를 위해 Meanwell 파워 서플라이 두 대를 스타 그라운드 토폴로지로 구성했으며, 퓨즈 분배 방식을 적용했습니다.

소프트웨어 (Python)

프레임버퍼는 채널별 RGBW 버퍼를 스레드 락으로 보호하며, 전체 밝기 조절, 전용 W 채널의 화이트 포인트 조정, 가산 블렌딩, 그리고 배선 순서가 아닌 맵 공간상의 실제 픽셀 간 거리를 기반으로 가중치를 적용한 가우시안 블러(3 시그마 이내의 인접 픽셀 캐시를 사전 계산)를 지원합니다. 지오메트리 엔진은 근사 하버사인(haversine) 공식을 이용해 좌표를 픽셀로 변환하며, 가장 가까운 픽셀 탐색, 반경 내 픽셀 검색, 퍼지 건물명 검색, 높이 기준 이상의 건물 필터링 기능을 제공합니다.

런타임 구성: Flask 오퍼레이터 패널, 크로스페이드 전환이 적용된 모드 매니저, 오프라인 우선 상태 저장소, 타이밍 시퀀싱을 위한 스케줄러 스레드, 비주얼과 동기화된 사운드 엔진(세 번째 개정판).

모드

앰비언트(주야간 화이트 밸런스 사이클 및 호흡·반짝임 텍스처), 데이터(건물 높이 임계값 및 고정 건물 설정, 높이에 따른 밝기 조절), 이벤트(방사형 펄스 또는 경로 스윕 — 예를 들어 움직이는 자동차 헤드를 앞세운 그랑프리 서킷을 이벤트 저장소 기반으로 구현), 터치(오퍼레이터가 HTTP 엔드포인트를 통해 탭하면 페이드아웃 펄스 생성), 썬더(음향과 동기화된 희귀 번개 효과), 웨이포인트(장노출 사진 촬영을 위한 정적 비콘). 날씨 모드는 현재 개발 중입니다.

프로젝트 페이지 | 테런스 그로버(Terence Grover) | 인스타그램

모나코에서 활동하는 독립 크리에이티브 테크놀로지스트 테런스 그로버(Terence Grover)의 작품.