개요
Overview보이지 않는 계산은 어떻게 세계를 움직이는가.
이 사이트는 15개의 제너러티브 아트를 하나의 우주로 연결한 디지털 관측소(Observatory)다.
방문자는 블랙홀 오프닝에서 EMBARK를 눌러 우주로 진입하고, 원하는 작품을 선택하여 각기 다른 수학적 우주로 항해(Voyage)한다. 모든 화면은 Black 기반 컬러 시스템과 Graphite 계조, Swiss 타이포그래피, Breathing motion이라는 하나의 비주얼 언어를 공유한다.
index.html세션당 1회 오프닝 재생 후 자동 스킵all/index.html)화면 지도
Screen Map전체 관람 흐름은 네 개의 단계(Stage)로 구성된다.
모든 화면 상태는 sessionStorage를 기반으로 복원되며, 브라우저 뒤로가기(bfcache)를 지원한다.
관람 가이드
Visitor Guide입력 방식에 따라 조작 방식이 자동으로 나뉜다.
입력 장치가 마우스인 경우 호버 중심으로, 터치인 경우 두 번 탭 방식으로 동작한다.
키보드만으로도 모든 기능을 사용할 수 있다.
접근성 포커스 링이 표시되며, reduce-motion 사용자에게는 모든 워프 애니메이션이 축약된다.
pageshow 대응)
방문한 작품의 목록에 마커 ●가 남는다.
인터랙션 명세
Interaction Reference상태 전이와 타이밍, 마커 동작의 기준 사양. 운영 중 동작을 검증하거나 재현할 때 참조한다.
220ms 디바운스 — 짧은 호버에는 프리뷰를 로드하지 않음파일명 + ?embed=1 로 iframe 삽입2100ms (reduce-motion 시 900ms) → settle900ms 페이드 후 페이지 이동odyssey_visited에 파일명 누적데이터 · URL
State & Params사용자 상태는 서버가 아닌 브라우저 sessionStorage에서 관리하며, 탭을 닫으면 초기화된다. 딥링크 파라미터로 특정 상태에 바로 진입할 수 있다.
odyssey_enteredodyssey_visiteduniverse_seed?embed=1#codasessionStorage.clear() 후 새로고침.
관람객에게 오프닝을 항상 노출하려면 이 방식을 데모 리셋 절차로 사용한다.
작품 편집
Editing Works모든 작품 목록의 단일 관리 지점(Single Source of Truth)은 index.html의 works 배열이다. 새 작품은 반드시 이 배열에 등록하며, 배열 순서는 작품 번호를 결정한다. 등록 즉시 목록 UI, Preview, 방문 마커가 자동으로 갱신된다. 단, 각 작품 하단의 항해 타임라인(voyage-line)과 Archive(all/index.html)의 카드는 별도로 갱신해야 한다.
{ title:"Kerr Plasma Cathedral",
poetic:"모든 입자는 결국 침묵 속으로 사라진다.",
formula:"ds² = −(1 − rₛr/ρ²)dt² + …",
file:"15-Kerr_Plasma.html" },
titlepoeticformulafile08-Lambert_nebu.html). 순서를 바꾸려면 배열 순서만 바꾸면 되고, 파일명 앞 번호는 정렬·아카이브 식별용이다.
배열 순서와 파일명 앞 번호를 일치시키면 관리와 유지보수가 훨씬 수월하다.
Archive 모드는 좌상단 토글의 all/index.html로 연결된다. Cinematic이 큐레이션된 관람 동선이라면, Archive는 전작을 한눈에 보는 목록으로 설계되었다.
성능 · 호환
Performance기기 등급을 감지해 셰이더 옥타브·별 파티클 수·전력 프로파일을 자동 조절한다. 저사양 디바이스·WebGL 미지원 환경에서도 기본 화면은 항상 안정적으로 유지된다.
visibilitychange 시 렌더 루프 정지 → 배터리 절약Rs = 2GM/c²) 기반의 중력렌즈 근사를 사용한다.
새 작품의 방정식 라벨은 임의 근사치가 아닌 검증된 식으로 유지할 것 — 이는 이 전시의 개념적 정합성의 핵심이다.
배포 · 메타
Deploy & Meta정적 호스팅 환경에서는 별도의 빌드 과정 없이 업로드만으로 배포할 수 있다. 공유 시 미리보기 카드가 뜨도록 메타 자산을 함께 관리한다.
https://kimgunwoo.kr/19th/og/ — 메인 index.jpg · 작품별 01–15.jpg · 아카이브 all-index.jpg (각 1200×630)favicon_io/ (16·32·apple-touch·ico)sitemap.xml · robots.txtworks 배열 갱신 → ③ Archive(all/index.html) 카드 추가 → ④ 해당 작품 OG·sitemap.xml 추가 → ⑤ 브라우저 캐시 무시 후 프리뷰·항해 실제 클릭 검증.운영 원칙
Operating Rules프로젝트 유지보수를 위한 핵심 원칙.
works 배열만 수정한다.index.html 에서 관리한다.작품은 언제든 교체하거나 추가할 수 있도록 Loose Coupling 구조를 유지한다.
전시장 네트워크가 불안정한 문제 발생을 대비 —
three.module.js 를 사이트에 업로드무인 전시 · Kiosk
Unattended / Attract전시장에서 사람이 상주하지 않아도 화면이 스스로 관람객을 부르고, 방치되면 처음 상태로 되돌아온다.
Cinematic(루트) 진입 주소에 ?kiosk=1 을 붙여 실행한다
예: kimgunwoo.kr/19th/index.html?kiosk=1.
키오스크 상태는 sessionStorage(odyssey_kiosk) 에 저장되어 작품 페이지까지 이어지며, 브라우저 탭을 닫으면 해제된다.
운영 중 해제하려면 index.html?kiosk=0.
45s 무입력 → 작품 프리뷰를 자동 순회(작품당 9s). 하단에 Autoplay 안내 점멸ATTRACT_MS · CYCLE_MS45s 무입력 → EMBARK를 대신 눌러 관측소로 진입한 뒤 순회 시작. 관람객이 한 명도 없어도 작품이 계속 노출된다EMBARK_MS210s 무입력 → 세션 초기화 후 블랙홀 오프닝으로 복귀RESET_MS240s 무입력 → 관측소로 복귀(한 작품에 멈춰있지 않게). 가만히 감상하는 관람객을 끊지 않도록 14번의 붕괴 주기(180s)보다 길게 잡았다IDLE (work pages)index.html 하단 KIOSK / ATTRACT MODE 블록의 ATTRACT_MS · CYCLE_MS · RESET_MS, 각 작품 KIOSK IDLE-RETURN 블록의 IDLE 상수로 조정한다.
키오스크가 아닐 때(
odyssey_kiosk 미설정)와 프리뷰(?embed=1)에서는 전부 비활성이라 일반 관람에는 영향이 없다.②
?kiosk=1 로 실행.
③ reduce-motion 미사용 확인.
④ 네트워크가 불안정하면 CDN 로드 실패 시 각 작품의
net-fail 감시가 7초 후 재시도 안내를 띄우므로, 안정적 회선 또는 캐시를 확보한다.