균사체 Mycelium — 가는 실가지
바이브 코딩으로
창작 파이프라인 만들기
개념과 사용 방법을 익히고, 실제 작품을 직접 열어 구조를 살펴본 뒤
인터랙티브 아트 작품을 만들어 본다
학습 목표
흐름 — 개념 바이브 코딩과 검증 → 도구 코딩 에이전트 → 사례 네 유형과 대표작 → 실습 프롬프트 실행 → 창작 레퍼런스에서 첫 화면으로

바이브 코딩, 무엇인가?
2025년에 이름 붙은 뒤 몇 달 만에 널리 퍼진 신조어다.
Karpathy가 이 방식에 ‘vibe coding’이라는 이름을 붙였다
"There's a new kind of coding I call 'vibe coding', where you fully give in to the vibes, embrace exponentials, and forget that the code even exists."
"내가 '바이브 코딩'이라 부르는 새로운 코딩이 있다. 완전히 분위기에 몸을 맡기고, 기하급수적 발전을 받아들이고, 코드가 존재한다는 사실 자체를 잊어버리는 것이다."
— Andrej Karpathy (OpenAI 창립 멤버 · 전 Tesla AI 디렉터), X, 2025-02-02
그가 묘사한 방식은 간단했다. 화면을 보고, 원하는 것을 말하고, 실행하고, 오류가 나면 오류 문장을 다시 건넨다. 다만 코드를 읽지 않는 이런 방식은 “만들고 버릴 주말 프로젝트” 정도에 알맞다고 선을 그었다.
널리 퍼졌지만, 뜻이 하나로 굳은 말은 아니다
결과를 보며 계속 이어 가는 방식이다.
자연어로 AI에게 코드를 맡긴다는 넓은 뜻으로도 쓰인다. 강의에서는 두 용법을 구분한다.
바이브 코딩은 빠르게 확산되고 있다.
Google · 1/4 이상
신규 코드의 4분의 1 이상이 AI 생성. 다만 엔지니어가 검토하고 승인한 코드였다.
이름이 생기다
Karpathy가 코드를 거의 읽지 않고 결과를 보며 이어 가는 방식을 ‘vibe coding’이라 불렀다.
YC · 25%
Jared Friedman은 W25 배치의 25%에서 코드베이스의 95%가 AI 생성이라고 밝혔다.
Collins 올해의 단어
몇 달 사이 개발자 밖에서도 알아보는 신조어가 됐음을 보여 주는 신호였다.
같은 ‘AI 생성 코드’라도 사람이 이해하고 검토했는지에 따라 작업의 성격과 책임이 달라진다.
모든 AI 코딩이 바이브 코딩은 아니다
바이브 코딩
LLM이 쓴 코드를 자세히 읽지 않고, 결과가 보이면 계속 이어 가는 방식. 빠른 실험과 버릴 수 있는 프로토타입에는 유용하다.
소프트웨어 개발
AI가 썼더라도 사람이 실행 결과와 오류를 확인하고, 위험한 권한과 개인정보를 점검하고, 반복 테스트하면 검증된 제작에 가까워진다.
— Simon Willison(2025-03). 생성 속도와 결과의 신뢰성은 별개의 문제다. 오늘은 빠르게 만들되 브라우저 화면·오류·실행 결과를 근거로 확인한다.
"금방 만든다"와 "내 것이 된다"는 다른 말이다
이미지 생성에서 이미 겪은 일
- 그럴듯한 그림은 10초면 나온다 — 지난주 파인튜닝 시간에 다들 경험했다.
- 그러나 내가 의도한 구도·질감·디테일에 정확히 닿으려면, 수백 장을 생성하고 고르고 다시 학습하는 며칠·몇 주가 든다.
바이브 코딩도 똑같다
- 첫 화면은 몇 분이면 뜬다. 그러나 작가의 입맛에 닿기까지는 몇 주, 길게는 몇 달이 걸린다.
- 오늘 볼 작품들 뒤에도 그 시간이 있다. Lichen은 일곱 번을 갈아엎었고, 수백만 원을 들이고 실패한 작업들도 있다.
업계 관찰도 같은 말을 한다. Addy Osmani의 “70% 문제”는 첫 70%보다 디테일·예외·완성도를 다루는 마지막 30%가 더 어렵다는 설명이다. METR의 무작위 대조 실험(2025)에서는 자신이 잘 아는 오픈소스 저장소를 다룬 숙련 개발자들이 당시 AI 도구를 쓸 때 평균 19% 느려졌다. 모든 작업의 결론이 아니라, 도구를 쓴다고 자동으로 빨라지는 것은 아니라는 경고다.
강한 모델보다, 좋은 작업 방식까지 함께 필요하다
모델
복잡한 구조와 긴 작업일수록 더 강한 모델이 유리하다. 하지만 모델이 강해져도 애매한 목표까지 대신 정해 주지는 않는다.
맥락
참고 이미지·실행 화면·작업 폴더·원하는 느낌을 함께 주면, 같은 모델도 무엇을 만들어야 하는지 훨씬 정확하게 이해한다.
검증
실행 화면·콘솔 오류·전후 캡처를 확인하고 한 가지씩 고친다. 실패한 시도도 다음 지시의 구체적인 재료가 된다.
모델은 바뀌어도 충분한 맥락을 주고, 실행 결과를 근거로 판단하는 작업 방식은 남는다. 구체적인 반복 순서는 첫 작품 뒤에서 직접 적용한다.
말하면 파일을 만들고
실행까지 하는 작업자
일반 채팅은 “이렇게 해보세요”라고 방법을 설명한다. 코딩 에이전트는 내가 열어 준 작업 폴더에서 파일을 읽고·고치고·명령을 실행하고·브라우저 결과까지 확인한다.
하는 일은 비슷하고, 작업 화면이 다르다
| 코딩 에이전트 | 어디에서 쓰나 | 이 수업에서 보는 차이 |
|---|---|---|
| Codex | ChatGPT 데스크톱의 Codex · 터미널 · 코드 편집기 · 웹/클라우드 | 폴더를 열어 HTML을 만들고, 실행하고, 브라우저 화면을 확인하는 흐름을 한 작업 안에서 이어 간다. 오늘 수업의 기준 도구다. |
| Claude Code | Claude Desktop의 Code · 터미널 · VS Code/JetBrains · 웹 | 데스크톱에서는 변경 비교와 미리보기를 보며 작업하고, 웹에서는 컴퓨터를 꺼도 계속되는 원격 작업을 맡길 수 있다. |
| Antigravity 2.0 | 독립형 데스크톱 앱 · 별도 CLI | 여러 프로젝트의 에이전트를 시작·모니터링·조율한다. 직접 편집할 때는 별도 Antigravity IDE나 다른 IDE를 함께 쓴다. |
셋 다 핵심은 같다 — 설명만 하는 챗봇이 아니라, 파일과 실행 도구를 사용해 결과를 만드는 에이전트다. 핵심 의도는 재사용할 수 있지만 폴더 연결·권한 승인·미리보기 방식은 도구마다 다르다. OpenAI Codex 공식 안내(2026) · Anthropic Claude Code Platforms(2026) · Google Antigravity 공식 안내(2026)
폴더를 열고, 만들고, 실행하고, 화면까지 확인한다
개요
OpenAI의 코딩 에이전트. ChatGPT 데스크톱의 Codex, 터미널, 코드 편집기, 웹·클라우드에서 사용할 수 있다.
- 작업 폴더의 파일을 읽고 직접 수정한다.
- 명령을 실행하고 브라우저 결과를 보며 다시 고친다.
- 오늘 수업은 이 흐름을 기준으로 진행한다.
에이전트가 일하는 방식과 도구의 묶음이라면, 모델은 그 안에서 판단하고 코드를 쓰는 두뇌다.
| 모델 | 성격 | 언제 고르나 |
|---|---|---|
| GPT-5.6 Sol | 고성능형 | 구조가 복잡하거나 여러 파일을 함께 다루는 작업, 어려운 오류와 긴 제작에 쓴다. |
| GPT-5.6 Terra | 균형형 | 일상적인 제작과 수정. 속도와 완성도의 균형이 좋아 기본 작업에 알맞다. |
| GPT-5.6 Luna | 속도형 | 문구·색·크기처럼 단순한 수정과 빠른 반복에 쓴다. |
모델이 보이지 않으면 앱·CLI를 업데이트하고 계정의 제공 범위를 확인한다. 플랜과 배포 시점에 따라 선택지가 다를 수 있다. 출처: OpenAI · GPT-5.6 in ChatGPT / Codex 공식 문서(2026-08 확인)
대화하면서 코드의 변경과 실행 과정을 이어 간다
개요
Anthropic의 코딩 에이전트. Claude Desktop의 Code, 터미널, VS Code·JetBrains, 웹에서 사용할 수 있다.
- 폴더를 읽고 파일을 고치며 명령과 테스트를 실행한다.
- 변경 전후의 차이를 보며 수정 방향을 대화로 조정한다.
- 터미널 중심 작업과 원격·장시간 작업을 함께 지원한다.
Claude Code에서는 Fable·Opus·Sonnet 같은 별칭으로 최신 권장 버전을 고를 수 있다. /model을 열면 현재 계정에서 실제로 쓸 수 있는 모델이 보인다.
| 모델 | 성격 | 언제 고르나 |
|---|---|---|
| Fable 5 | 최고 성능·장기 작업 | 한 번에 끝나지 않는 조사·구현·검증처럼 가장 어렵고 긴 작업에 쓴다. |
| Opus 5.0 | 복잡한 추론 | 큰 구조 변경, 어려운 디버깅, 설계 판단처럼 깊게 생각해야 하는 작업에 쓴다. |
| Sonnet 5 | 일상 작업 | 기능 제작·오류 수정·테스트·문서처럼 대부분의 코딩에 쓰는 중심 모델이다. |
| Haiku 4.5 | 빠르고 가벼움 | 질문, 형식 정리, 반복적인 단순 수정처럼 속도가 중요한 일에 쓴다. |
처음에는 기본값 또는 Sonnet으로 시작하고, 막히는 문제에서만 더 강한 모델로 바꾸면 된다. 모델과 제공 범위는 계정·실행 환경에 따라 달라질 수 있다. 출처: Anthropic · Claude model lineup / Claude Code model configuration(2026-08 확인)
여러 프로젝트의 에이전트를 한 화면에서 관리한다
개요
Google의 독립형 에이전트 작업 관리 앱. IDE가 아니라, 여러 프로젝트에서 돌아가는 에이전트의 진행과 결과를 모아 보는 지휘 화면이다.
- 여러 에이전트를 병렬로 실행하고 모니터링한다.
- 파일·명령·Chrome을 사용한 작업 기록을 확인한다.
- 직접 편집할 때는 Antigravity IDE나 다른 IDE를 함께 쓴다.
이미지 재료가 필요할 때는 에이전트가 별도의 Nano Banana 2 이미지 생성 모델을 사용하기도 한다.
| 모델 | 성격 | 언제 고르나 |
|---|---|---|
| Claude Opus 4.6 | 최고 추론형 | 가장 복잡한 설계·디버깅처럼 깊은 판단이 필요한 작업에 쓴다. |
| Gemini 3.1 Pro | 깊은 추론형 | 설계·분석이 복잡할 때 쓰며, 낮음·높음으로 생각의 깊이를 조절할 수 있다. |
| Claude Sonnet 4.6 | 균형 추론형 | 좋은 추론 성능과 작업 속도를 함께 원하거나 다른 모델과 비교할 때 쓴다. |
| Gemini 3.6 Flash | 빠른 주력형 | 빠른 대화와 긴 에이전트 작업을 함께 돌리는 일상 제작에 쓴다. |
| GPT-OSS-120B | 공개 모델 | 공개 가중치 계열 모델로 결과를 비교하거나 다른 선택지가 필요할 때 쓴다. |
처음에는 가장 빠른 Gemini Flash로 시작하고, 복잡해지면 Pro나 다른 추론 모델을 시험한다. 모델 제공 범위는 플랜에 따라 달라진다. 출처: Google Antigravity · Models / Features 공식 문서(2026-08 확인)

박성하 미디어아트 허브
오늘 볼 작업들은 바이브 코딩으로 시작해, 실행 확인과 반복 수정을 거쳐 완성되었고 브라우저에서 실행된다.

두 개의 단축키 — F와 H
F — 전체화면
어느 작품에서든 F를 누르면 전체화면이 되고,
한 번 더 누르면 돌아온다.
H — 패널 보이기·숨기기
H를 누를 때마다 설정 패널이 사라지거나 다시 나타난다. 색·속도·개수·모드를 전시 중에 조절한다.
설정은 새로고침 뒤에도 유지되도록 브라우저 저장소나 설정 파일에 남길 수 있다. 전체화면·패널 숨김·설정 복원처럼 작품을 다시 켰을 때 같은 상태로 돌아오는 기능이 전시 운영에 중요하다.
사물 속에 남은 시간을 상상한다
보이지 않는 것들에 대한 질문
지구와 우주는 어떻게 생겨났을까. 우리는 어디에서 와서 어디로 가는가. 내가 보지 못한 것을 상상하고 느끼는 일은 막연하고 두렵지만, 그래서 더 궁금하다.
산의 돌탑을 보면 돌마다 누군가의 소원은 남고, 사람은 사라졌다는 생각을 한다. 선산의 이름 모를 조상 비석과 장군석·문신석, 그 위에 자란 지의류와 이끼를 보며 잊힌 사람과 시간, 보이지 않는 이야기를 상상한다.
돌에 쌓인 시간
퇴적암을 조각하며 지층의 결이나 화석을 만나면, 오래전 모래가 켜켜이 쌓여 돌이 되고 그 긴 시간이 지금 내 앞까지 왔다는 생각을 한다.

그래서 AI로 사물에 숨은 이야기를 표현하고, 하나의 사물이 품은 여러 시간과 모습을 보여주려 한다. 모든 것은 끊임없이 변하고 관계에 따라 달라진다. 그럼에도 무엇이 남는가 — 그 질문이 작업의 시작이다.
네 유형, 네 대표작 — 작품의 주된 작동 방식으로 나눈다
| 유형 | 작동 방식 · 대표작 | 주요 기술 |
|---|---|---|
| ① 변환적 거울 | 실시간 이미지를 다른 시각 재료로 번역해 되돌린다 — 주사위 거울 | WebGL · 인스턴싱 |
| ② 체현적 상호작용 | 손의 움직임과 몸짓이 작품의 형태를 바꾼다 — 점·선·면 Tri-Morph | MediaPipe · 랜드마크 |
| ③ 규칙 기반 시뮬레이션 | 상태와 변화 규칙이 시간 속에서 형태를 만든다 — Lichen 지의 | 상태 전이 · 논문과 GitHub |
| ④ 가상세계 | 형태·물리·빛·행동이 이어지는 세계 안의 존재와 만난다 — 이머시브 베타 | 3D 파이프라인 · Blender MCP |
정립된 학술 장르표가 아니라 이 강의에서 작품을 읽기 위한 네 가지 렌즈다. 한 작품은 여러 성격을 함께 가질 수 있지만, 오늘은 가장 두드러지는 작동 방식 하나로 읽는다.

변환적 거울 —
실시간 이미지를 번역해 되비춘다
카메라가 받은 지금 이 순간의 상(像)을 글자·주사위 같은 다른 재료로 번역해 되돌려준다. 관객이 화면 속 변화의 재료가 되는 직관적인 상호작용이다.

명암을 주사위의 눈으로 번역한다

핵심은 명암을 다른 시각 단위로 치환하는 규칙이다. 같은 구조에서 주사위를 단추·바둑돌·꽃잎으로 바꾸면 다른 연작이 시작된다.
주사위 거울의 전체 제작 브리프
화면을 작은 3D 주사위 그리드로 채우고, 웹캠 영상의 명암에 따라 가장 어두운 부분은 1, 가장 밝은 부분은 6이 정면에 보이게 해줘. 검은 배경에 어두운 주사위와 흰색 눈으로 표현하고, 명암이 변할 때 주사위가 해당 면으로 부드럽게 굴러가게 만들어줘.
오른쪽에는 주사위 개수, 크기, 그리드 간격, 회전 속도, 밝기, 대비 등을 실시간으로 조절할 수 있는 설정창을 만들어줘. 마우스로 시점을 움직이거나 확대할 수도 있게 해줘.
새 컴퓨터에서 바로 시작할 수 있도록 외부 라이브러리나 설치 과정 없이 하나의 HTML 파일로 만들어줘. H키를 누르면 설정창이 사라지고 나타나게 해주고, F키를 누르면 전체화면이 되게 해줘.
주사위 개수를 더 늘릴 수 있게 해주고, 주사위를 좀 더 사실적으로 만들어줘. 최적화를 위해 GPU도 사용할 수 있게 해줘.
생각나는 순서대로 쓴 이 요청을 Codex에 통째로 건넨다. 먼저 첫 버전을 열어 보고, 마음에 안 드는 곳을 하나씩 다시 말한다. 짧은 수업 실습은 실습 자료의 간소화 레시피를 사용한다. 카메라는 localhost·HTTPS에서 열고, 권한이 없을 때는 데모 패턴이 나오게 한다.
말로 맡기되, 눈으로 확인한다
- 원본을 보존하고 복사본에서 작업하며, 삭제·초기화 요청은 바로 승인하지 않는다.
- 결과는 브라우저에서 직접 열어 화면으로 판단하고, 에러가 나면 에러 문장을 그대로 붙여넣는다.
프롬프트는 한 방의 주문이 아니라 대화의 시작이다 — 이 루프를 실습 내내 돌린다.
WebGL — 브라우저가 GPU로 3D를 그리는 통로
브라우저 내장
별도 프로그램이나 플러그인 없이 HTML에서 바로 3D 그래픽을 그린다.
GPU 가속
수천 개의 주사위와 조명·그림자를 그래픽카드가 병렬로 계산한다.
한 파일로 실행
외부 라이브러리 없이 WebGL 코드를 HTML 안에 넣으면 새 컴퓨터에서도 바로 열린다.
- WebGL은 브라우저와 GPU를 잇는 바닥 기술이고, Three.js는 그 위에서 3D 작업을 쉽게 해주는 도구다.
- 이번 프롬프트는 설치 없는 단일 파일이 목표이므로 WebGL을 직접 쓰고, 같은 주사위를 한꺼번에 그리는 인스턴싱으로 개수를 늘린다.

관객의 몸짓이
작품의 인터페이스가 된다
마우스 대신 존재·움직임·몸짓이 입력이 되는 유형 — 카메라와 MediaPipe가 몸을 작품의 신호로 바꾼다.

생각나는 대로 말해도 작품이 시작된다
화면에 3D 모델을 띄우고, 모델 표면을 파티클로 다시 계산해서 보여줘. 가까운 점은 선으로 연결하고, 면은 완전히 채우지 말고 삼각형이 듬성듬성 드러나게 해줘. 조각이 점·선·면으로 계속 다시 만들어지는 느낌이면 좋겠어.
GLB 모델을 여러 개 추가하거나 삭제할 수 있게 해줘. 크기와 중심이 달라도 화면에서는 비슷한 크기로 맞추고, 일정 시간이 지나면 다음 모델로 바뀌게 해줘. 바뀔 때는 점들이 튀지 않고 가까운 방향으로 물결처럼 이동하며 다음 형상을 만들었으면 좋겠어. 이전·다음 버튼도 넣어줘.
웹캠으로 손을 인식하고, 손가락으로 집으면 그 부분의 점을 잡아당겨 만질 수 있게 해줘. 손을 놓으면 천천히 원래 형상으로 돌아오고, 웹캠이 없으면 마우스로 대신하게 해줘.
설정창에서 점의 수와 크기, 선의 거리, 삼각형의 밀도와 투명도, 몰핑 속도와 모델 전환 시간을 조절하게 해줘. 화면 회전과 확대·축소도 가능해야 해. 브라우저에서 바로 실행하고, H키로 설정창을 숨기고 F키로 전체화면이 되게 해줘.
이 긴 브리프의 핵심은 세 가지 문제다
표면 샘플링·점 대응·보간은 형상을 계산하는 일, WebGL은 그 결과를 빠르게 그리는 일이다. 세 번째 문제에는 카메라 영상을 몸의 측정값으로 바꾸는 도구가 필요하다. 이제 MediaPipe를 살펴본다.
웹캠은 영상을 보내고, MediaPipe는 몸의 점을 찾는다



카메라는 픽셀만 보내고, MediaPipe는 랜드마크와 모델별 보조 출력—손잡이 분류, 가시성·존재 점수, 마스크, 표정 계수 등—을 돌려준다. 아직 작품의 반응은 없다. 이미지·수치 출처: Google AI Edge · Hand/Pose/Face Landmarker 공식 문서(2026)
무엇을 읽을지에 따라 인식 모델을 고른다
| 인식 모델 | 몸에서 찾는 것 | 작품에 쓸 수 있는 신호 |
|---|---|---|
| 손 | 한 손당 21개 점 · 왼손/오른손 · 화면/공간 좌표 | 손끝 거리, 손의 펼침, 방향, 이동 궤적 |
| 전신 포즈 | 33개 점 · 화면/공간 좌표 · 선택적 인물 마스크 | 팔 벌림, 앉기, 몸의 기울기와 중심 이동 |
| 얼굴 | 478개 점 · 선택적 표정 계수와 얼굴 변환 행렬 | 눈·입·눈썹의 변화, 고개 위치와 방향 |
| 통합형 파이프라인 | 전신 + 얼굴 + 양손의 결과를 한 사람의 몸으로 연결 | 손짓과 자세, 얼굴 변화를 함께 사용하는 장면 |
독립형 손·포즈·얼굴 모델과 통합형 파이프라인은 점 개수와 보조 출력이 다를 수 있다. 공통점은 측정 결과이지 감정이나 의도를 자동으로 확정한 답이 아니라는 것이다. 출처: Google AI Edge · MediaPipe Tasks 공식 문서(2026)
좌표를 몸짓으로, 몸짓을 작품의 변화로 번역한다

MediaPipe는 몸에 관한 측정 결과를 준다. 그 값을 몸짓으로 해석하고, 어떤 작품 변화에 연결하며, 튀는 값을 부드럽게 만드는 일이 작가의 인터랙션 설계다. 카메라가 없거나 권한이 거절될 때를 위한 마우스 입력도 함께 둔다.

모델의 상태가
시간 속에서 변한다
이 수업에서는 실제 또는 가상의 시스템을 상태와 변화 규칙으로 표현하고, 시간에 따른 상태 변화를 계산하는 작업을 다룬다. 화면은 미리 만든 장면이 아니라 그 순간의 상태를 시각화한 결과다.

먼저, 전시 동안 무엇이 어떻게 변할지 말한다
화면은 어두운 바위나 배양 접시 같은 공간이고, 처음에는 작은 포자 몇 개만 있다가 시간이 흐르면서 천천히 군락을 이루었으면 좋겠어. 미리 만든 영상을 반복하지 말고, 각 세포가 주변의 빈 곳으로 자라고 양분을 쓰고, 다른 종과 만나면 경쟁하고, 나이가 들면 죽는 규칙으로 매 순간 다음 상태를 계산해줘. 죽은 자리는 바로 없어지지 않고 지나간 흔적이나 나이테처럼 남게 해줘.
같은 코드에서도 성장률, 분지 성향, 수명, 경쟁성, 돌연변이, 흔적이 남는 시간을 바꾸면 균사·엽상·산호·포자우림처럼 서로 다른 군락이 생기게 해줘. 웹캠의 손길은 양분·제거·새 포자 같은 외부 입력으로 넣고, 손 인식이 안 되면 마우스로 대신하게 해줘.
빠른 게임 효과보다는 아주 천천히 살아 있는 것처럼 느껴졌으면 좋겠어. 많은 세포가 있어도 멈추지 않도록 필요하면 GPU를 사용하고, 전시가 재시작되어도 이어지도록 상태를 주기적으로 저장해줘. 설정창에서 주요 매개변수를 바꿀 수 있게 하고, H키로 설정창을 숨기고 F키로 전체화면이 되게 해줘.
AI가 모르는 법칙은 논문과 GitHub에서 찾게 한다
그렇지만 규칙을 아무렇게나 발명하지 말고, 실제 지의류 생장 연구와 세포자동자·신경 세포자동자·L-system·반응–확산 모델을 먼저 조사해줘. 각 모델이 무엇을 상태로 저장하고 어떤 규칙으로 다음 상태를 만드는지, 무엇을 설명할 수 있고 무엇은 설명하지 못하는지 비교해줘.
브라우저에서 오래 실행할 수 있는 GitHub 구현도 논문과 짝지어 찾아줘. 선택한 모델의 상태변수·전이규칙·매개변수·수치적 한계, 참고한 논문과 저장소 주소, 라이선스를 프로젝트에 기록해줘.
진화 세포자동자다.
격자 셀에 생존·나이·에너지·종의 값을 저장하고, 이웃 셀과 양분을 보고 다음 상태를 정한다. 실제 지의류를 예측하는 모델이 아니라 느린 생장·경쟁·흔적을 표현하기 위한 가상 생태계다.
지금 모습을 보고, 다음 순간을 만든다
미리 만든 영상을 재생하는 것이 아니다. 바로 전 순간의 상태와 주변 이웃이 다음 순간을 바꾼다. 이 작품은 그 계산을 반복해 화면을 갱신한다.
움직인다고 모두 시뮬레이션은 아니다
애니메이션
시간에 따라 미리 정한 값이나 장면을 보여준다. 같은 조건에서는 같은 순서를 재생한다.
생성 작업
알고리즘이 형태나 소리를 만들어 낸다. 실제나 가상의 대상을 모델링하지 않아도 된다.
시뮬레이션
대상의 상태와 변화 규칙을 모델로 만들고, 시간에 따라 그 상태가 어떻게 달라지는지 계산한다.
세 범주는 완전히 배타적이지 않다. 생성 작업이 상태와 변화 규칙을 가진 가상의 생태계를 모델링하면 시뮬레이션이 될 수 있다. Lichen은 실제 지의류를 예측하는 과학 모형이 아니라, 성장·경쟁·노화·죽음을 규칙으로 만든 인공생명 시뮬레이션이다. Langton(1989) · Galanter(2003)
무엇을 만들지보다, 어떤 법칙으로 움직일지 정한다
자라고 무늬를 만드는 것
세포가 이웃을 보며 늘어나거나 가지가 갈라지고, 물질이 반응·확산하며 무늬가 생긴다.
흐르고 퍼지는 것
물·공기는 유체로 흐르고, 열·잉크·농도는 주변으로 확산되며 섞인다.
떨어지고 휘어지는 것
강체·입자에는 중력과 충돌을, 천·연체에는 변형과 제약 조건을 정한다.
무리 지어 움직이는 것
각 개체가 가까운 이웃을 보고 피하거나 따라간다. 새떼·물고기·군중에 어울린다.
검색을 시작할 때는 세포자동자·반응–확산·L-system / 안정 유체 / 입자·강체·연체·천 / Boids·에이전트 기반 모델 같은 이름을 함께 쓴다. 논문과 코드가 정확성을 자동으로 보증하지는 않으므로 가정·한계·라이선스를 확인한다. Turing(1952) · Lindenmayer(1968) · Reynolds(1987) · Stam(1999)
논문은 법칙을, GitHub는 구현을 보여준다
논문에서 확인할 것
무엇을 상태로 두었는지, 어떤 가정을 했는지, 무엇까지 설명하고 무엇은 설명하지 못하는지 읽는다.
저장소에서 확인할 것
그 모델을 어떤 알고리즘과 시간 간격으로 구현했는지, 실행 예시에서 어떤 움직임이 나오는지 확인한다.

코드가 모델을 의도대로 구현했는지는 검증, 모델이 표현하려는 대상과 맞는지는 타당화의 문제다. GitHub의 별점은 둘 다 보증하지 않는다.
같은 코드라도 규칙값이 달라지면 다른 군락이 된다
균사체 Mycelium — 가는 실가지
엽상 Foliose — 나이테 로제트
각축 Rivalry — 영역 전쟁
포자우림 Spores — 조밀 증식화면에 보이는 네 배양실은 같은 코드에 성장 확률·수명·경쟁성 같은 값을 다르게 넣은 결과다. 매개변수 몇 개가 가지의 굵기, 군락의 밀도, 서로 밀어내는 방식과 남는 흔적을 크게 바꾼다.
마우스와 손짓을 서로 다른 입력으로 연결한다
마우스 · 세 가지 붓
양분·지우기·포자 중 하나를 고르고 화면을 쓸어 성장·손상·새 종을 만든다.
펼친 손
손바닥 궤적 아래의 살아 있는 조직이 밝아지고 손길을 따라 반응한다.
주먹
쥔 손의 위치에 포자가 떨어져 새로운 군락이 시작된다.
- 카메라 영상은 들어오지만 랜드마크 인식이 실패하면 움직임 감지로, 카메라가 없거나 권한이 거절되면 마우스와 자율 생장으로 이어진다.
- 브라우저 안에서 상태가 계속 계산되므로 전시 내내 같은 화면을 반복 재생하지 않는다.
일곱 차례 시도에서 방향을 바꾼 네 순간
| 버전 | 시도 | 작가의 반려 이유 (실제 기록) |
|---|---|---|
| 2 | 서버 배양 + 나이테 렌더링 | "변화가 전혀 안 느껴지고 흐름·퍼짐이 없다." |
| 4 | 실시간 점균 흐름(Physarum) | "생명체 느낌이 없고 그냥 흐르는 느낌. 이건 아니다." |
| 5 | 진화 세포자동자 v0.4 | "너무 빠르다 · 더 우아하게 · 배양실별로 형태가 다르게." |
| 7 | 형태발생 + 계절 + 손 추적 | 성장·흔적·관객 입력을 한 생태계 안에서 연결했다. |
완성된 지시문이 처음부터 있었던 게 아니다. 제일 어려운 건 "살아있는 느낌이 아니다"를 말로 설명하는 일이었다. AI는 시도를 만들고 작가는 판정한다 — 원한 것은 그림이 아니라 살아있음이었고, 그 판정 기준이 작가의 몫이다.
바위에 자라는 것 — 준비된 프롬프트를 통째로
- 실습 자료의 주사위 예제가 어디까지 만들어졌는지 먼저 열어 보고, 이어서 ‘바위에 자라는 것’ 프롬프트를 통째로 붙여넣는다.
- 목표는 포자 한 알이 가장자리에서 자라고, 안쪽은 삭아 자국이 되는 Lichen의 축소판이다. 카메라 없이도 돌아가는 자율 모드를 요구한다.
- 완성되면 바꿔 볼 곳 — 색 계열(산호빛), 자랄 한계, 자국이 남는 시간.


화면 안에
하나의 세계를 세운다
3D 물체 하나를 띄우는 데서 끝나지 않는다. 공간·물리·빛·행동·관객 반응이 서로 모순 없이 이어질 때, 관객은 화면을 그림이 아니라 들어가 볼 수 있는 장소로 느낀다.

최종 작품의 출발점 — “지느러미를 천처럼 계산해줘”
크고 우아하게 천천히 계속 헤엄쳤으면 좋겠고, 추진할 때는 타탁-타탁 움직인 다음 잠깐 활강하는 리듬이 있었으면 좋겠어. 손을 내밀면 호기심을 보이고, 급하게 다가가면 놀라 달아나고, 가까이 오래 있으면 따라오거나 먹이를 먹게 해줘.
색과 빛은 참고 사진처럼 비단결 광택이 살아나야 하고, 검은 물속에 떠 있는 느낌이 나야 해. 설치 없이 브라우저에서 바로 열리는 HTML 파일 하나로 만들고, 화면 아래에는 폴리곤 수, FPS, 지느러미가 얼마나 늘어나는지 보여주는 수치를 띄워줘. H키로 설정창을 숨기고 F키로 전체화면이 되게 해줘.




이것은 한 번에 완성한 주문이 아니라 첫 제작 방향이다. 참고 사진은 복제 대상이 아니라 형태·색·광택을 판정하는 기준이었고, 이후 모델과 화면을 보며 계속 다시 지시했다.
코드로만 만든 물고기는 물고기답지 않았다

바이브 코딩은 틀린 첫 결과를 감추는 방법이 아니다. 왜 아닌지 화면에서 판단하고, 다음 제작 도구를 바꾸는 과정까지 작품 제작에 포함된다.
기술적 몰입은 환경의 조건, 현존감은 관객의 경험
기술적 몰입 · immersion
끊기지 않는 3D 공간, 자연스러운 시점과 크기, 즉각적인 반응, 일관된 소리와 빛처럼 시스템이 감각을 얼마나 둘러싸고 반응하는가의 문제다.
현존감 · presence
관객이 “내가 그곳에 있다” 혹은 “저 물고기가 정말 저곳에 있다”고 느끼는 주관적인 경험이다. 같은 화면을 보아도 사람마다 다를 수 있다.
한국어 ‘몰입감’은 심리적으로 빠져드는 경험도 뜻하지만, 여기서는 시스템이 감각과 행동을 얼마나 일관되게 둘러싸는지 말한다. 화면 기반 작품은 VR보다 범위가 작아도 공간의 연속성·빠른 반응·믿을 만한 행동으로 현존감을 만들 수 있다. Slater & Wilbur(1997) · Slater(2009)
이 작품에서는 다섯 가지 일관성을 점검했다
빛은 물속인데 움직임은 공중 같거나, 손을 내밀었는데 한참 뒤 반응하거나, 물고기의 성격이 순간마다 바뀌면 세계가 깨진다. 이 작품에서는 화려한 그래픽보다 서로 모순되지 않는 작은 법칙들이 물고기를 같은 공간에 존재하는 대상으로 느끼게 한다.
사진으로 3D를 만들고, Blender에서 최적화를 했다.



프로시저럴 형태가 어색해 Tripo의 이미지→3D로 모델을 만들었다. 하지만 원본은 정점이 너무 많아 실시간 지느러미 물리에 무거웠다. Blender에서 폴리곤을 줄이고 몸통·지느러미를 여덟 파트로 나눈 뒤 GLB로 다시 가져왔다. 이 Blender 작업을 말로 맡길 때 사용한 연결이 다음 장의 MCP다.
MCP는 코딩 에이전트와 Blender 사이의 연결 규칙이다
“이 모델을 웹 실시간 시뮬레이션용으로 정리해줘. 폴리곤을 줄이고, 지느러미를 각각 분리하고, UV와 법선을 확인한 뒤 GLB로 내보내줘.”

MCP(Model Context Protocol)는 AI 에이전트가 외부 앱의 데이터와 기능을 공통 형식으로 발견하고 호출하게 하는 연결 규약이다. 이 작업에서는 Blender 서버·애드온이 공개한 기능만 사용할 수 있으며, 버전·권한·구현에 따라 범위가 달라진다. 실행 결과를 판정하고 다시 지시하는 일은 사람의 몫이다.
이 작품이 정한 물고기 행동을 작은 규칙으로 나눈다
| 급한 접근 | 놀라 달아난다 |
| 느린 접근 | 호기심을 보인다 |
| 접촉 유지 | 쓰다듬기에 반응한다 |
| 손 이동 | 천천히 따라온다 |
| 주먹·위협 | 지느러미를 펼친다 |
| 일정 거리 | 경계하며 머문다 |
웹캠의 손 좌표는 그대로 쓰면 떨린다. 검출 사이의 위치를 부드럽게 이어 물리 입력으로 사용했다. 여섯 반응은 학습한 인공지능이 아니라 작가가 정한 행동 규칙이다.
참고 사진의 느낌을 팔레트와 빛으로 다시 만든다
참고 · 청록
결과 · 비단
참고 · 금빛
결과 · 금빛
참고 · 연보라
결과 · 연보라
참고 · 불꽃
결과 · 불꽃눈으로 “좋다·이상하다”를 판단하면서도 HUD의 정점·삼각형·FPS·지느러미 늘어남을 함께 봤다. 제작 기록 화면은 41,622 정점·82,080 삼각형·약 60 FPS를 보이지만, 성능 수치는 같은 기기·브라우저·해상도에서 비교할 때만 의미가 있다. 참고 이미지를 외부에 배포할 때는 원출처와 이용 조건도 따로 기록한다.

내 작품을
만들어보자
레퍼런스를 찾고, 거기에 나의 이야기와 경험을 연결하고, 코딩 에이전트와 첫 화면을 만든다. 창작은 혼자 무에서 꺼내는 일이 아니라 새롭게 연결하는 일에서 시작한다.

완성작이 아니라, 마음에 드는 한 부분을 고른다
베낄 대상을 고르는 일이 아니다. 내가 가져오고 싶은 감각과 관계를 찾는 일이다. 왜 좋은지 정확히 설명하지 못해도 “이게 제일 마음에 든다”는 선택이 있으면 다음 대화를 시작할 수 있다.
창작은 익숙한 재료를 다른 관계로 연결하는 데서 시작한다
기존 움직임에 돌을 만지며 느낀 시간과 지의류에 대한 생각을 연결하고, 관객의 행동과 화면의 의미를 바꾸면 다른 작품이 시작된다. 나의 경험을 더했다고 모든 재사용이 허용되는 것은 아니므로, 이용 조건과 출처도 함께 남긴다.
느낌과 나의 이야기를 한 번에 건넨다
말할 것은 세 가지면 충분하다
- 무엇이 마음에 들었는지 — 퍼짐, 무게, 느린 속도
- 무엇과 연결할지 — 돌에 쌓인 시간과 지의류
- 첫 화면에서 볼 반응 — 마우스 가까이에서 빛이 나타남
기술 이름을 몰라도 된다. 코딩 에이전트가 필요한 기술을 제안하거나 작은 프로토타입을 만들면, 화면을 본 뒤 원하는 것부터 하나씩 고쳐 나간다.
먼저 띄우고, 한 가지 관계만 만든다
재료를 먼저 실행한다
React 프로젝트면 컴포넌트를 설치하고, 단일 HTML이면 참고한 동작을 단순하게 다시 만든다.
입력 하나를 건넨다
마우스나 웹캠처럼 관객의 행동을 읽는 방법을 하나만 정한다.
변화 하나를 확인한다
다가가면 빛이 나타난다처럼 눈으로 판단할 수 있는 핵심 반응 하나를 만든다.
소리·API·여러 장면·세부 설정은 나중이다. 같은 동작을 세 번 반복해 매번 반응하고 콘솔 오류가 없으면 첫 버전은 통과다.
“이건 아닌데”를 다음 버전으로 바꾼다
“너무 빠르고 가볍다.”
“내가 생각한 돌의 시간이 아니다.”
정확한 기술 용어보다 먼저 느낌을 말한다. 마음에 들지 않는다는 판단도 작가가 가진 중요한 기준이다.
기술은 작품의 요구가 생긴 뒤 찾는다
무엇이 더 필요한가?”
기술 목록에서 작품을 고르는 것이 아니다. 이미 만든 화면을 보다가 필요한 기능이 생기면 그때 알맞은 재료를 찾는다.
기능을 붙일수록 인터넷 지연·비용·권한·비밀 키·연결 실패도 작품의 조건이 된다. 추가한 기술만큼 실패할 때의 장면도 함께 설계한다.
브라우저의 화면을 전시 가능한 작품으로 바꾼다
관객이 만난다
무엇을 해야 하는지 알 수 있고 입력과 반응이 매번 같은 원리로 이어지는가. 웹캠이 실패하면 마우스나 자율 모드로 계속되는가.
오래 버틴다
실제 전시 PC에서 목표 운영 시간 동안 FPS·메모리·로그가 안정적인가. 작품에 구현한 F/H 키, 커서 숨김, 설정값 저장·복원이 작동하는가.
다시 살아난다
재부팅·절전 복귀·카메라 권한 재승인을 시험했는가. 인터넷·API가 끊기면 대체 장면이 나오고 자동 시작 순서가 기록돼 있는가.

AI는 ‘어떻게’를 빠르게 만든다
작가는 ‘무엇을, 왜’를 결정한다
새로운 도구로 어떤 메시지를 전달할 것인가. 수많은 가능성에서 하나를 선택하고,
맥락과 경험으로 구현하며 그 결과를 끝까지 책임지는 사람이 작가다.