카파시의 글 한 편에서 시작된 질문은 하나였다. 한국의 고전도 필요할 때 펼쳐지는 하나의 ‘온디맨드 세계’가 될 수 있을까?
그 질문을 따라 AI로 『심청전』을 Three.js 세계로 만들고, 다시 판소리 애니메이션으로 발전시켰다. AI가 장면을 생성했지만, 그것을 작품으로 만든 것은 검증의 반복과 사람의 선택, 그리고 소리의 리듬이었다.
카파시의 실험은 어떤 질문을 남겼을까?
카파시의 실험은 이야기를 읽는 AI가 어디까지 하나의 세계를 구축할 수 있는지 묻게 했다.
카파시는 『반지의 제왕』 첫 문단을 LLM에 건네고 Three.js 세계를 만들어보게 했다. 모델은 두 시간 동안 수천 줄의 코드를 쓰며 인물과 사물을 3차원 공간에 배치하고 움직였다.
그 글을 읽고 한국의 고전을 떠올렸다. 초가집과 인당수, 용궁과 연꽃을 설명하는 데서 그치지 않고 실제로 움직이는 공간으로 만들 수 있을까. 독자가 이야기를 읽는 대신 그 안으로 들어가게 할 수 있을까.
그래서 『심청전』 전체를 AI에 건넸다.
『심청전』은 어떻게 Three.js 세계가 되었을까?
첫 번째 결과물은 8막, 7분 26초의 절차적 애니메이션이었다.
약 11,400줄의 TypeScript 코드 안에서 초가집과 한옥, 인물, 인당수의 파도, 용궁, 연꽃, 궁궐이 만들어졌다. 외부 3D 모델이나 텍스처 이미지는 쓰지 않았다.
코드가 배경이 되고 배우가 되었다. 카메라와 조명, 파도의 움직임도 코드가 맡았다.
| 구성 요소 | 구현 방식 |
|---|---|
| 배경 | Three.js 도형과 절차적 배치 |
| 인물과 사물 | 코드로 생성한 3D 오브젝트 |
| 인당수와 파도 | 수치와 애니메이션으로 제어 |
| 연꽃과 용궁 | 장면별 위치·회전·조명 설계 |
| 카메라 | 막의 흐름에 맞춘 이동과 시선 제어 |
| 외부 3D 모델·텍스처 | 사용하지 않음 |
처음에는 긴 코드를 생성하면 세계가 완성될 것이라고 생각했다. 실제 작업은 달랐다. 세계를 완성한 것은 생성량이 아니라, 만들어진 장면을 계속 바라보는 일이었다.
생성보다 검증이 더 흥미로웠던 이유
이 프로젝트에서 가장 흥미로운 지점은 AI가 자신이 만든 세계를 다시 관찰하며 고쳤다는 사실이었다.
AI는 장면을 스크린샷으로 촬영하고 화면 좌표와 공간 좌표를 확인했다. 눈으로 보이는 결과와 코드에 기록된 위치가 일치하는지 비교한 뒤 수정안을 적용했다.
그 과정에서 예상보다 구체적인 오류들이 발견됐다.
- 안개가 너무 짙어 배경과 인물이 사라졌다.
- 카메라가 인물이 아닌 빈 공간을 바라봤다.
- 파도가 배보다 커져 배 전체를 삼켰다.
- 일부 사물은 조명의 영향을 잘못 받아 검게 렌더링됐다.
- 인물의 얼굴이 카메라 반대편을 향했다.
- 연꽃의 회전축이 틀어져 옆으로 비틀렸다.
한 번에 완성된 긴 코드가 아니었다.
만들고, 보고, 측정하고, 다시 고치는 루프가 세계를 완성했다.
생성형 AI 작업에서 결과를 바꾸는 것은 첫 번째 프롬프트의 문장력만이 아니다. AI가 자기 결과를 관찰할 수 있는 장치와, 무엇을 오류로 판단할지 알려주는 기준이 함께 필요하다.
절차적 세계는 어떻게 판소리 애니메이션이 되었을까?
두 번째 단계에서는 기술 시연에 가까웠던 절차적 세계를 실제로 보고 들을 수 있는 작품으로 바꾸었다.
완성된 영상은 8막, 약 8분이다. 영상은 Seedance 2.5, 목소리는 Fish Audio, 음악은 Suno AI를 활용했다.
도구가 발전하면서 영상을 만드는 일 자체는 이전보다 수월해졌다. 그러나 작품의 감정을 설계하는 일까지 쉬워진 것은 아니었다.
가장 어려운 문제는 판소리를 단순한 내레이션으로 다루지 않는 것이었다.
판소리의 리듬은 어디에서 만들어질까?
판소리의 힘은 아니리, 창, 추임새가 만드는 낙차에서 나왔다.
말로 이야기를 이어가는 아니리, 소리로 감정을 터뜨리는 창, 그 사이에 호흡을 불어넣는 고수의 추임새는 같은 높이에서 작동하지 않았다.
| 요소 | 역할 | 영상에서의 기능 |
|---|---|---|
| 아니리 | 말로 사건을 전달 | 장면과 장면을 연결하고 감정을 눌러 둠 |
| 창 | 소리로 감정을 분출 | 슬픔과 결심이 폭발하는 순간을 만듦 |
| 추임새 | 호흡과 반응을 제공 | 긴장을 풀거나 다음 감정으로 밀어 줌 |
특히 아니리를 눌러 두어야 창이 살아났다. 모든 대목을 강하게 만들면 정작 가장 슬퍼야 할 순간이 평평하게 들렸다.
심청이 인당수에 몸을 던지는 장면은 영상 효과만으로 완성되지 않았다. 그 직전까지 말을 얼마나 아끼는지, 소리를 어느 순간에 터뜨리는지가 장면의 무게를 결정했다.
AI는 무엇을 만들었고, 사람은 무엇을 선택했을까?
AI는 세계를 만들었지만, 어떤 장면을 남길지는 결정하지 못했다.
눈먼 아버지의 눈을 뜨게 하려고 딸이 인당수에 몸을 던지는 이야기에는 오랫동안 사람들이 함께 울어온 자리가 있다. 그 감정의 축이 없었다면 아무리 뛰어난 AI를 사용해도 8분의 영상을 작품으로 채우기는 어려웠을 것이다.
제작 과정에서 사람은 계속 선택해야 했다.
- 어디에서 말을 멈출 것인가
- 어떤 장면을 오래 보여줄 것인가
- 언제 창을 터뜨릴 것인가
- 기술적으로 가능해도 무엇을 버릴 것인가
- 원작의 감정을 어떤 리듬으로 옮길 것인가
도구가 세계를 만들었다면, 선택과 리듬은 그 세계를 작품으로 만들었다.
제작에는 어떤 도구가 사용되었을까?
각 도구는 하나의 역할을 맡았고, 감독과 편집은 그 결과를 하나의 흐름으로 묶었다.
| 작업 | 도구·담당 |
|---|---|
| 각본·사설 | Claude |
| 영상 | Seedance 2.5 |
| 목소리 | Fish Audio |
| 음악 | Suno AI |
| 감독·편집 | 달의이성 |
도구 목록보다 더 중요했던 것은 도구 사이의 연결 방식이었다. 각본의 감정선이 영상의 장면 길이로 이어지고, 다시 목소리의 높낮이와 음악의 여백으로 연결되어야 했다.
완성된 『심청전』 판소리 애니메이션
완성작은 아래 영상에서 볼 수 있다.
자주 묻는 질문
AI가 『심청전』 전체를 자동으로 애니메이션으로 만든 것인가?
AI가 코드와 장면, 음성과 음악 제작에 참여했지만 완전 자동 제작은 아니다. 화면을 관찰하고 오류를 수정하는 반복 과정과 장면 선택, 감정의 강약, 최종 편집에는 사람의 판단이 들어갔다.
외부 3D 모델 없이 Three.js 애니메이션을 만들 수 있는가?
가능하다. 이 프로젝트의 첫 번째 버전은 외부 3D 모델과 텍스처를 사용하지 않고 도형, 좌표, 조명, 애니메이션을 코드로 구성했다. 다만 절차적으로 생성한 장면을 안정적으로 보여주려면 카메라와 좌표를 반복해서 검증해야 한다.
판소리 애니메이션에서 가장 어려웠던 부분은 무엇인가?
소리를 계속 강하게 유지하지 않는 일이 가장 어려웠다. 아니리로 감정을 눌러 두고 필요한 순간에 창이 터지도록 대비를 만들어야 판소리의 힘이 살아났다.
생성형 AI로 고전을 만들 때 원작은 어떤 역할을 하는가?
원작은 이미지와 사건의 재료만 제공하지 않는다. 무엇을 남기고 버릴지 결정하는 기준도 제공한다. 기술이 장면을 확장하더라도 작품의 중심 감정은 원작에서 가져와야 한다.
남은 세 가지 판단
- AI 생성의 품질은 첫 결과보다 관찰하고 수정하는 루프에서 결정된다.
- 판소리의 감정은 큰 소리 자체가 아니라 아니리와 창 사이의 낙차에서 살아난다.
- AI가 세계를 만들 수 있어도, 그 세계를 작품으로 만드는 것은 사람의 선택과 리듬이다.
댓글
GitHub 계정으로 의견을 남길 수 있습니다. 댓글은 GitHub Discussions에 저장됩니다.