BACK
Cinematic Archive
심연의 방정식 · 홈페이지 사용·제작 설명서

Operator's Codex


김건우교수 제19회 개인전 사이트 관람과 운영을 위한 통합 안내서. 또한 이 페이지는 작품 관리와 배포 방법까지 포함한 운영 절차를 간단히 정리한 사양서이기도 하다.
울산대학교 디자인학부 디지털콘텐츠디자인학 전공 학생들의 작품 제작에 참고가 되었으면 한다.

이 전시용 사이트는 정적 페이지가 아닌 Opening → EMBARK → Observatory → Voyage로 흐르는 하나의 시네마틱 시퀀스로 이루어져 있다.

Equations of the Abyss 2026.08.24 – 09.05 · 갤러리한빛 kimgunwoo.kr/19th/
00

개요

Overview

보이지 않는 계산은 어떻게 세계를 움직이는가.
이 사이트는 15개의 제너러티브 아트를 하나의 우주로 연결한 디지털 관측소(Observatory)다.

방문자는 블랙홀 오프닝에서 EMBARK를 눌러 우주로 진입하고, 원하는 작품을 선택하여 각기 다른 수학적 우주로 항해(Voyage)한다. 모든 화면은 Black 기반 컬러 시스템과 Graphite 계조, Swiss 타이포그래피, Breathing motion이라는 하나의 비주얼 언어를 공유한다.

항목
진입점
index.html세션당 1회 오프닝 재생 후 자동 스킵
작품 수
15편 + Coda(∞) 1개 오버레이
아키텍처
각 작품은 독립 단일 HTML — 프레임워크·빌드 없음
Rendering Pipeline
WebGL/GLSL 중력렌즈 셰이더 + Canvas 2D 폴백
운영 모드
Cinematic(기본) · Archive(all/index.html)
01

화면 지도

Screen Map

전체 관람 흐름은 네 개의 단계(Stage)로 구성된다.
모든 화면 상태는 sessionStorage를 기반으로 복원되며, 브라우저 뒤로가기(bfcache)를 지원한다.

State 01
Opening
The Void
블랙홀 관문. 제목·부제 페이드인 후 EMBARK 트라이앵글이 호흡한다.
Transit
Embark
2.1s Warp
레터박스가 닫히며 특이점으로 확대되고, 이후 관측소 화면으로 전환된다.
State 02
Observatory
Worklist + Preview
15편의 방정식 목록. 선택 시 우측에 라이브 프리뷰 iframe.
State 03
Voyage · Coda
Enter / ∞
작품으로 항해하거나, ∞ 행에서 전시의 마지막 질문 Coda를 연다.
고정 UI 좌상단 모드 토글(Cinematic·Archive)과 전시 캡션, 좌하단 진입 힌트, 우하단 Universe #ID(세션마다 무작위 생성되는 우주 시드)는 모든 상태에서 유지된다.
02

관람 가이드

Visitor Guide

입력 방식에 따라 조작 방식이 자동으로 나뉜다.
입력 장치가 마우스인 경우 호버 중심으로, 터치인 경우 두 번 탭 방식으로 동작한다.

데스크톱 · 마우스
동작
작품명에 커서를 올림
선택 + 우측 라이브 프리뷰 로드(0.22초 지연)
작품명 클릭
해당 작품으로 항해(Voyage)
∞ 행 클릭
Coda 오버레이(전시의 마지막 질문) 열기
모바일 · 터치
동작
첫 번째 탭
선택 — 시적 문구 펼침(세로 화면에선 프리뷰 패널 숨김)
같은 작품 다시 탭
해당 작품으로 항해

키보드만으로도 모든 기능을 사용할 수 있다.
접근성 포커스 링이 표시되며, reduce-motion 사용자에게는 모든 워프 애니메이션이 축약된다.

EMBARK Enter오프닝에서 우주로 진입
작품 목록 위/아래 이동(자동 스크롤·프리뷰)
Enter선택한 작품으로 항해
Tab행·버튼 순차 포커스
EscCoda 오버레이 닫기
되돌아오기 작품에서 브라우저 뒤로가기를 누르면 오프닝을 다시 보지 않고 관측소로 곧장 복귀한다.(bfcache·pageshow 대응)
방문한 작품의 목록에 마커 ●가 남는다.
03

인터랙션 명세

Interaction Reference

상태 전이와 타이밍, 마커 동작의 기준 사양. 운영 중 동작을 검증하거나 재현할 때 참조한다.

기능
동작 방식
프리뷰 로드 지연
호버 후 220ms 디바운스 — 짧은 호버에는 프리뷰를 로드하지 않음
프리뷰 소스
파일명 + ?embed=1 로 iframe 삽입
EMBARK 워프
2100ms (reduce-motion 시 900ms) → settle
항해 트랜지션
검정 레이어 900ms 페이드 후 페이지 이동
방문 마커
● 마커 — odyssey_visited에 파일명 누적
Universe Seed
세션당 무작위 6자리 HEX — 배경 우주 형상 결정
04

데이터 · URL

State & Params

사용자 상태는 서버가 아닌 브라우저 sessionStorage에서 관리하며, 탭을 닫으면 초기화된다. 딥링크 파라미터로 특정 상태에 바로 진입할 수 있다.

sessionStorage 키
의미
odyssey_entered
오프닝 통과 여부 — 존재 시 오프닝 스킵
odyssey_visited
방문 작품 파일명 배열(JSON) — ● 마커 근거
universe_seed
현재 세션의 우주 시드(HEX)
URL 파라미터
효과
?embed=1
작품을 프리뷰용(무포인터·경량)으로 로드
#coda
관측소 진입 + Coda 자동 오픈(공유용 딥링크)
운영 팁 동작을 처음부터 다시 보려면 개발자 콘솔에서 sessionStorage.clear() 후 새로고침.
관람객에게 오프닝을 항상 노출하려면 이 방식을 데모 리셋 절차로 사용한다.
05

작품 편집

Editing Works

모든 작품 목록의 단일 관리 지점(Single Source of Truth)index.htmlworks 배열이다. 새 작품은 반드시 이 배열에 등록하며, 배열 순서는 작품 번호를 결정한다. 등록 즉시 목록 UI, Preview, 방문 마커가 자동으로 갱신된다. 단, 각 작품 하단의 항해 타임라인(voyage-line)과 Archive(all/index.html)의 카드는 별도로 갱신해야 한다.

{ title:"Kerr Plasma Cathedral",
  poetic:"모든 입자는 결국 침묵 속으로 사라진다.",
  formula:"ds² = −(1 − rₛr/ρ²)dt² + …",
  file:"15-Kerr_Plasma.html" },
필드
역할
title
목록·프리뷰 헤더 제목
poetic
한글 시적 문구(선택 시 노출)
formula
우측 정렬 방정식 라벨(데이터 톤)
file
작품 HTML 경로 — 실제 파일명과 정확히 일치해야 함
명명 규칙 번호-이름.html (예: 08-Lambert_nebu.html). 순서를 바꾸려면 배열 순서만 바꾸면 되고, 파일명 앞 번호는 정렬·아카이브 식별용이다.
배열 순서와 파일명 앞 번호를 일치시키면 관리와 유지보수가 훨씬 수월하다.

Archive 모드는 좌상단 토글의 all/index.html로 연결된다. Cinematic이 큐레이션된 관람 동선이라면, Archive는 전작을 한눈에 보는 목록으로 설계되었다.

06

성능 · 호환

Performance

기기 등급을 감지해 셰이더 옥타브·별 파티클 수·전력 프로파일을 자동 조절한다. 저사양 디바이스·WebGL 미지원 환경에서도 기본 화면은 항상 안정적으로 유지된다.

계층
처리
저전력 판정
Android · 폭 ≤768px · 코어 ≤4 · 메모리 ≤4GB 중 하나
고사양
FBM 옥타브 5–7, 별 스트릭 3레이어, high-performance
저사양
옥타브 4–5, 레이어 축소, low-power
WebGL 불가
Canvas 2D 폴백 — 별 + 방사형 그라데이션 블랙홀
reduce-motion
breathing·grain·워프 축약, 목록 등장 애니메이션 생략
브라우저 탭 비활성화
visibilitychange 시 렌더 루프 정지 → 배터리 절약
물리 검증 배경 셰이더는 슈바르츠실트 반경(Rs = 2GM/c²) 기반의 중력렌즈 근사를 사용한다.
새 작품의 방정식 라벨은 임의 근사치가 아닌 검증된 식으로 유지할 것 — 이는 이 전시의 개념적 정합성의 핵심이다.
07

배포 · 메타

Deploy & Meta

정적 호스팅 환경에서는 별도의 빌드 과정 없이 업로드만으로 배포할 수 있다. 공유 시 미리보기 카드가 뜨도록 메타 자산을 함께 관리한다.

자산
위치 · 동작 방식
Canonical
https://kimgunwoo.kr/19th/
OG 이미지
og/ — 메인 index.jpg · 작품별 01–15.jpg · 아카이브 all-index.jpg (각 1200×630)
파비콘
favicon_io/ (16·32·apple-touch·ico)
색인
sitemap.xml · robots.txt
폰트
Google Fonts — DM Mono · Inter · Noto Sans KR
배포 체크리스트 ① 새 작품 파일 업로드 → ② works 배열 갱신 → ③ Archive(all/index.html) 카드 추가 → ④ 해당 작품 OG·sitemap.xml 추가 → ⑤ 브라우저 캐시 무시 후 프리뷰·항해 실제 클릭 검증.
08

운영 원칙

Operating Rules

프로젝트 유지보수를 위한 핵심 원칙.

항목
원칙
Rule 01
works 배열만 수정한다.
Rule 02
배열 순서와 작품 번호를 항상 일치시킨다.
Rule 03
모든 작품은 독립 HTML로 제작한다.
Rule 04
공통 기능은 index.html 에서 관리한다.
Rule 05
물리 및 수학 공식은 검증된 식만 사용한다.
Rule 06
공통 UI를 작품 내부에 중복 구현하지 않는다.
Rule 07
파일명과 작품 제목은 동일한 규칙을 유지한다.
중요 참고사항 프로젝트는 하나의 거대한 HTML이 아니라 여러 개의 독립적인 작품이 연결된 구조이다.
작품은 언제든 교체하거나 추가할 수 있도록 Loose Coupling 구조를 유지한다.
전시장 네트워크가 불안정한 문제 발생을 대비 — three.module.js 를 사이트에 업로드
09

무인 전시 · Kiosk

Unattended / Attract

전시장에서 사람이 상주하지 않아도 화면이 스스로 관람객을 부르고, 방치되면 처음 상태로 되돌아온다.

Cinematic(루트) 진입 주소에 ?kiosk=1 을 붙여 실행한다
예: kimgunwoo.kr/19th/index.html?kiosk=1.
키오스크 상태는 sessionStorage(odyssey_kiosk) 에 저장되어 작품 페이지까지 이어지며, 브라우저 탭을 닫으면 해제된다.
운영 중 해제하려면 index.html?kiosk=0.

동작
기준 · 타이밍
Attract 시작
관측소에서 45s 무입력 → 작품 프리뷰를 자동 순회(작품당 9s). 하단에 Autoplay 안내 점멸ATTRACT_MS · CYCLE_MS
자동 진입
오프닝 화면에서 45s 무입력 → EMBARK를 대신 눌러 관측소로 진입한 뒤 순회 시작. 관람객이 한 명도 없어도 작품이 계속 노출된다EMBARK_MS
관람권 이양
순회 중 화면 터치·마우스·키 입력 즉시 자동재생 중단 → 관람객이 직접 조작
오프닝 리셋
관측소에서 210s 무입력 → 세션 초기화 후 블랙홀 오프닝으로 복귀RESET_MS
작품 자동 복귀
작품 페이지에서 240s 무입력 → 관측소로 복귀(한 작품에 멈춰있지 않게). 가만히 감상하는 관람객을 끊지 않도록 14번의 붕괴 주기(180s)보다 길게 잡았다IDLE (work pages)
타이밍 조정 값은 index.html 하단 KIOSK / ATTRACT MODE 블록의 ATTRACT_MS · CYCLE_MS · RESET_MS, 각 작품 KIOSK IDLE-RETURN 블록의 IDLE 상수로 조정한다.
키오스크가 아닐 때(odyssey_kiosk 미설정)와 프리뷰(?embed=1)에서는 전부 비활성이라 일반 관람에는 영향이 없다.
권장 설정 ① 전시용 PC를 전체화면(F11) · 브라우저 자동 새로고침/절전 해제.
?kiosk=1 로 실행.
reduce-motion 미사용 확인.
④ 네트워크가 불안정하면 CDN 로드 실패 시 각 작품의 net-fail 감시가 7초 후 재시도 안내를 띄우므로, 안정적 회선 또는 캐시를 확보한다.