WORK 29 · 작품 ⑦ 심화 · 박성하

이머시브 베타

IMMERSIVE BETTA — 제작의 전 과정
의문에서 시작해 실시간 작품이 되기까지.

서장 · 출발점

어항을 둘 수 없어서
물속을 만들기로 했다

  • 베타를 키우고 싶었으나 집에 어항을 둘 수 없었다.
  • 대안은 가상의 반려 동물이다. 다만 가상은 대체로 현실감이 부족하다.
  • 물음은 하나로 좁혀진다 — 시각적 아름다움과 인터랙션만으로 정서적 교류가 성립하는가.

실감콘텐츠 Immersive Content

베타 레퍼런스
키우고 싶었던 대상. 이 사진이 이후 팔레트의 기준이 된다.
서장 · 기술적 의문

재보고 싶은 것이 세 가지 있었다

엔진

게임 엔진이 필요한가. 유니티·언리얼 없이, 설치도 빌드도 없이 브라우저 링크 하나로 성립하는가.

폴리곤

웹에서 몇 개까지 실시간인가. 간단한 3D를 움직이는 것은 가능하다. 한계선은 재봐야 안다.

천 시뮬레이션은 몇 개까지 가능한가. 지느러미가 흐르려면 매 프레임 물리 계산이 필요하다.

답을 아는 상태에서 시작한 것이 아니라, 재보려고 시작했다. 답은 종장에서 숫자로 제시한다.

서장 · 구성

시작 지시문의 다섯 조각이 그대로 다섯 막이 된다

1
재료
첫 실패 · 3D 생성 AI · Blender MCP · 여덟 파트 분할
2
물성
천 시뮬레이션의 발산 · 겹침 · 늘어남
3
성격
유영 리듬과 관객 반응
4
화면
휘도 재사상과 팔레트, 포스트 프로세싱
5
판정
반려 기록과 검증 절차
서장 · 시작 지시문

"지느러미를 이미지가 아니라 천으로 계산해줘.
몸이 움직이면 그 힘이 천에 전달되게."

[① 재료] 베타(열대어)가 검은 물속을 헤엄치는 웹페이지를 만들어줘. 참고 사진 8장을 첨부할게.
[② 물성] 핵심은 지느러미다. 눈속임 말고 진짜 천(cloth)으로 시뮬레이션해줘. 뿌리는 몸에 붙고, 끝으로 갈수록 부드럽게.
[③ 성격] 크고 우아하게, 천천히. 계속 헤엄치고, 추진할 땐 타탁-타탁, 사이엔 활강.
[④ 목표 화면] 참고 사진의 색과 비단결 광택이 목표. 파일 하나(HTML), 라이브러리 없이.
[⑤ 판정 기준] 화면 아래에 폴리곤 수·FPS·늘어남 최대치 계기판을 항상 띄워줘. "이상하다"는 그 수치로 함께 판정한다.

첫 문장이 작품의 정체성을 정한다 — 눈속임과 실제 계산을 가르는 문장이다. ⑤를 처음부터 요구하면 이후의 모든 반려가 재현 가능한 수치 문제가 된다.

제1막 · 첫 결과

모델을 주지 않으면
수식으로 몸을 만든다

  • 몸은 부풀린 캡슐, 지느러미는 얇은 막이다. 비단이 아니다.
  • 이 방식을 절차적 모델링이라 한다 — 형상을 데이터가 아니라 수식으로 생성한다.
  • 계기판: 입자 1,856 · 삼각형 3,282.
절차적 초기 버전
초기 버전 실행 화면 (움직이는 캡처)
제1막 · 판독

결과는 못 쓰지만, 판독할 정보는 충분했다

확인된 것

뼈대(리깅)를 심지 않았고 애니메이션 데이터도 없는데 브라우저 안에서 헤엄쳤다. 움직임은 데이터가 아니라 계산으로 만들 수 있다.

따라 나오는 판단

① 이 계산량이면 천 시뮬레이션도 성립한다.
② 형상만 확보하면 움직임은 지시로 만들 수 있다.

부족한 것은 계산이 아니라 형상이었다. 다음 과제가 여기서 정해진다.

제1막 · 조각 ①

재료 —
형상을 확보한다

인공지능은 코드를 쓰기 전에 한 번 더 쓰인다.

3D 생성 AI 출력 원본
제1막 · 재료
3D 생성 AI가 만든 형상
직접 모델링하는 대신 Tripo(이미지·텍스트 → 3D 생성 서비스)로 베타를 생성했다. 비늘과 지느러미 결이 들어 있다. 다만 94,235 정점으로, 매 프레임 물리 계산을 붙이기에는 무겁다.
제1막 · 정리 작업

정리는 필요하고, 손으로 하기는 번거롭다

1
해야 할 일
폴리곤 축소(리토폴로지) → 지느러미별 파트 분리 → UV·법선 정리 → 내보내기.
2
택한 방법 — Blender MCP
블렌더를 MCP로 에이전트에 연결했다. 앞서 배운 그 규격이다. 메뉴를 누르는 대신 작업을 문장으로 지시한다.
3
일반화
MCP가 있으면 에이전트의 작업 범위가 코드 밖의 도구까지 넓어진다.
제1막 · 모델 파이프라인

사진 → 생성 → 축소 → 분할

레퍼런스 사진 8장색·광택의 기준
3D 생성Tripo · 94,235 정점
리토폴로지40,939 정점
여덟 파트 분할41,622 정점
  • 분할 이유 — 지느러미마다 독립된 시뮬레이션 정점이 필요하다.
  • 분할하면 경계 정점이 복제되므로 40,939 → 41,622로 늘어난다. 이 숫자가 이후 모든 계기판에 표시된다.
제1막 · 레퍼런스

레퍼런스는 그림의 원본이 아니라 판정의 기준이다

"이렇게 그려줘"가 아니라 "이 색과 광택이 목표다"로 준다. 결과가 어긋났을 때 무엇과 어긋났는지 말할 수 있어야 한다.

제1막 · 작업 루프

이후의 모든 작업은 같은 궤도를 돈다

지시감각어를 포함해 말한다
구현에이전트가 수치로 옮긴다
검증계기판과 화면으로 확인한다
판정승인 또는 반려 — 사람의 몫
"크고 우아하게 천천히"부가질량 — 감쇠 없이 속도를 낮추는 유일한 수단
"타탁 타탁 하는 리듬"꼬리질 위상에 동기한 추진-활강 맥동
"자꾸 옆으로 누워"기울기 상한 31°→11°, 적용 후 실측 중앙값 1.2°
"뒷면은 안 보이게 컬링하면"백페이스 컬링 적용 — 닫힌 표면이므로 유효
제2막 · 조각 ②

물성 —
천이 천답게

발산 · 겹침 · 늘어남을 차례로 잡는다.

제2막 · 발산

시뮬레이션이 폭주한 네 가지 원인

1
되먹임 항력
속도가 붙을수록 힘이 커지는 구조 → 선형 항력과 면적 상한으로 교체.
2
보정이 속도로 누적된다
반복 횟수를 늘리면 오히려 늘어남이 커진다(p99: 3회 1.169 / 8회 1.262). 3회가 최적.
3
앞뒤 두 겹이 벌어진다
반대 겹과 1:1 두께 제약을 걸어 11.5배 → 2.9배.
4
구겨짐은 거리 제약으로 못 편다
면적을 보존한 채 접히기 때문이다 → 형상기억과 뿌리→끝 강성 테이퍼.
제2막 · 겹침

렌더링으로 푸는 편이 정확한 경우가 있다

겹의 앞뒤 관계를 물리로 강제하는 대신 보이지 않게 처리했다. 뒤집힘 724 → 7개, 늘어남은 변화 없음.

선회 자세
제2막 · 물성
굽힘은 남기고 파열만 막는다
급선회 시 지느러미 뿌리가 227배까지 늘어났다. 선회 굽힘에 상한을 두어 p99 1.17배로. 몸이 호를 그리는 동작 자체는 유지했다.
제3막 · 조각 ③

성격 —
물고기답게

감각어를 세 가지 구조로 나눠 구현한다.

제3막 · 유영

"물고기답다"를 셋으로 나눈다

배회진행 방향에 노이즈를 더하면 작은 원을 돈다 → 전방 원뿔 안에 목적지를 찍는 방식으로
리듬꼬리질 위상에 동기한 추진-활강
자세선회 시 몸은 호를 그리되 기울기는 얕게(31°는 누운 것으로 읽힌다)
  • 활동 영역이 몸길이보다 좁으면 벽만 만나 회전한다. 영역을 넓히고 카메라가 따라가도록 했다.
  • 이 세 가지는 새 발명이 아니라 표준 어휘다 — Reynolds의 조향 행동(1999)에 대응한다.
활강 자세
제3막 · 성격
추진 직후의 활강
위에서 본 검증 화면. 꼬리질로 발생한 힘이 지느러미 천으로 전달되어 뒤로 끌린다. 물성과 성격이 분리되지 않는 지점이다.
제3막 · 관객 반응

웹캠 손 추적을
물리 입력으로 쓴다

  • 30fps 검출을 100fps 렌더에 직접 쓰면 떨린다 → 매 프레임 저역통과 필터로 추종.
  • 지속 시간은 영상 프레임 수가 아니라 실제 시각으로 잰다.
  • 주먹을 쥔 좌표에 먹이가 생성되고, 하나씩 순서대로 섭취한다.
놀람급격한 접근
호기심느린 접근
쓰다듬기저속 접촉 유지
따라오기손 이동 추종
위협 반응지느러미 전개
경계거리 유지
여섯 가지 반응은 모두 규칙이다. 학습도 기억도 아직 없다.
제4막 · 조각 ④

화면 —
색과 빛

레퍼런스를 팔레트로 옮기는 방법.

제4막 · 휘도 재사상

어떤 색을 입혀도
회색이 되는 이유

  • 원본 텍스처의 선형 휘도 중앙값이 0.0117이다. 원본이 어두우므로 흰색을 지정해도 회색으로 출력된다.
  • 해법은 휘도 재사상 — 원본에서 명암의 순서만 가져오고, 밝기 범위는 팔레트마다 다시 정한다.
  • 범위 상한을 1보다 크게 두면 블룸 문턱을 넘어 광채가 생긴다.
0.0117

원본 텍스처의 선형 휘도 중앙값 (4096² 실측)

색상만 바꾸면 흰색 계열끼리 구별되지 않는다. 팔레트는 색상뿐 아니라 밝기 범위 · 감마 · 채도 · 광택을 함께 정의한다.

제4막 · 레퍼런스 → 구현

왼쪽이 레퍼런스, 오른쪽이 결과

황금은 재사상 상한을 1보다 크게 두어 블룸으로 광채를 만든 경우다.

제4막 · 확장

레퍼런스 밖의 색은 별도로 설계한다

총 15종. 자연색에서 출발하되 자연에 없는 색까지 같은 구조로 정의한다.

포스트 프로세싱
제4막 · 빛
블룸 문턱은 노출 적용 후 기준이다
렌더 파이프라인을 선형 HDR로 바꾸면서 문턱값을 그대로 두었더니 통과 픽셀이 0%가 되어 블룸이 동작하지 않았다. 화면상으로는 "약간 밋밋한" 정도로만 보인다 — 계기판 없이는 놓치는 종류의 오류다.
제5막 · 조각 ⑤

판정 —
검증과 반려

무엇을 근거로 승인하고 무엇을 근거로 되돌리는가.

제5막 · 반려 기록

반려는 실패가 아니라 사양 확정 과정이다

조명"이전이 훨씬 나았다" → 직전 상태로 롤백. 되돌릴 수 있게 만들어 두는 것이 전제다.
층 겹침"막 늘어난다" → 늘어남 최대 80배 확인, 해당 기능 전면 철거
검증 태도지표 하나("층 넘음 0%")만 보고 배포한 결과 → 이후 배포 전 화면 확인을 절차에 포함
"연분홍 느낌이 아니다" → 3회 조정 후 확정
리듬"끊기는 느낌" → 속도 맥동 변동계수 0.41 → 0.11
입 벌림"보이지 않는다" → 가정한 좌표 범위에 걸린 정점 0개. 실측 후 재작성
제5막 · 검증 사례

모델 교체는 눈으로
확인해서 끝나지 않는다

  • 편집한 모델을 그대로 넣으면 실패한다. 실제로 발견된 결함 다섯 종:
  • 새 면의 시뮬레이션 번호 미지정 · UV 좌표 (0,0) 붕괴 597개 · 미세 슬리버 면 9개 · 삼각형이 아닌 면 1개 · 고립 정점 2개.
  • 번호 규칙을 전 정점 41,622개에서 검증한 뒤 결정론적으로 재생성했고, UV는 인접 면을 기준으로 복구했다.
교체 후
교체 후 정면. 육안으로는 이상이 없어 보이는 상태에서도 위 결함들은 그대로 존재했다.
제5막 · 운영

조작 인터페이스와 성능은 작품의 일부다

  • 연산 비중이 가장 큰 법선 재계산 주기를 4프레임에 1회로 조정 — 48 → 60 FPS.
  • 파일 하나 · 라이브러리 없음이라는 초기 제약은 끝까지 유지했다.
종장 · 결과

처음의 세 의문에 답한다

0

필요한 게임 엔진의 수. HTML 파일 하나, 빌드 없음. 외부 라이브러리는 손 추적용 MediaPipe뿐.

82,080

60FPS로 렌더되는 삼각형 수. 초기 절차적 버전(3,282)의 25배.

41,622

매 프레임 10 서브스텝 × 3 반복으로 계산되는 천 시뮬레이션 정점 수.

네 번째 물음 — 정서적 교류가 가능한가. 손에 반응하고, 먹이를 먹고, 다가오거나 물러난다. 다만 기억하지는 못한다. 여기서부터가 다음 주제다.

부록 · 미구현 연구

인공지능 베타는
어떻게 만드나

이 분야에는 30년치 선행 연구가 있다. 무엇을 참고할 수 있는지 정리한다.

부록 · 선행 연구 ①

1994년에 이미 인공 물고기가 있었다

1994

Artificial Fishes — 근육 액추에이터가 달린 3차원 몸, 환경을 보는 눈, 그리고 운동·지각·행동·학습 중추를 가진 뇌.

Tu & Terzopoulos, SIGGRAPH '94

1994

Evolving Virtual Creatures — 형태와 신경 회로를 유전 알고리즘으로 동시에 진화시켜 헤엄·걷기·따라가기를 획득.

Karl Sims, SIGGRAPH '94

1996

Creatures — 개체마다 순환 신경망과 호르몬 기반 "생화학"을 갖고, 헤브 학습으로 변하며 번식까지 한다.

Steve Grand · 오픈소스 재구현 openc2e

지금 만든 물고기는 이 계보에서 물성(몸)은 앞서 있고 지능(뇌)은 뒤에 있다. 남은 것은 뇌다.

부록 · 선행 연구 ②

관객이 직접
가르치는 캐릭터

  • MIT 미디어랩 연구진은 클리커 트레이닝으로 훈련되는 가상의 개를 만들었다 — 실제 개 훈련 기법 그대로다.
  • 강화학습에 기반하되 동물 훈련의 통찰을 설계에 반영했다. 소리 신호를 행동의 단서로 학습하고, 새로운 동작을 합성한다.
  • 핵심은 성능이 아니라 관계다. 가르친 사람과 배운 캐릭터 사이에만 생기는 것이 있다.

Blumberg 외, Integrated Learning for Interactive Synthetic Characters, SIGGRAPH 2002

정서적 교류는 실증된 현상인가

물개 로봇 PARO(1993~, 산업기술종합연구소 시바타 다카노리)를 돌봄 시설에 투입한 연구들에서 기분 개선·사회적 상호작용 증가가 보고됐다. 로봇 강아지 AIBO에 대한 아동의 정서적 애착도 관찰됐다.

대상이 생물이 아니어도 교류는 발생한다. 관건은 사실성이 아니라 반응의 일관성과 지속성이다.

부록 · 접근 방법

인공지능 베타 — 네 가지 경로

1
기억 — 습관화와 연합 학습
반복 노출된 자극에는 반응이 줄고(습관화), 먹이와 함께 온 손은 접근 대상이 된다(연합 학습). 저장할 상태 값은 소수. 비용 최소, 체감 최대.
2
욕구 — 내부 상태 모델
배고픔·호기심·경계·피로가 시간에 따라 변화하며 서로를 억제한다. 관객이 없을 때도 행동이 발생한다. Creatures의 호르몬 모델이 이 계열.
3
학습 — 강화학습 정책
먹이 탐색·회피를 오프라인에서 학습(ML-Agents 등)시키고 ONNX로 내보낸 뒤, ONNX Runtime Web으로 브라우저에서 추론한다.
4
해석 — 언어·비전 모델
프레임 단위 제어에는 지연이 크다. 수 초 간격으로 장면을 읽어 상태만 지정하는 상위 층으로 쓴다. Generative Agents의 기억-회상-반성 구조가 참고가 된다.
부록 · 구현 판단

먼저 할 것은
학습이 아니라 기억이다

  • 물음이 "똑똑한가"가 아니라 "교류가 되는가"였다. 교류의 최소 조건은 지난번을 기억하는 것이다.
  • 습관화·연합 학습은 실제 동물 행동학의 기본 항목이고, 구현은 상태 값 몇 개와 감쇠식이면 된다.
  • 강화학습은 그 다음이다. 잘못 쓰면 손으로 조율한 현재의 움직임보다 부자연스러워질 위험이 있다.
경로난이도체감 변화
1 기억낮음매우 큼
2 욕구낮음
3 강화학습높음불확실
4 언어 모델중간제한적
체감 변화는 관객이 느끼는 "살아 있음"의 크기다. 연산량과 비례하지 않는다.
부록 · 참고 문헌

출처

인공 물고기Tu & Terzopoulos, Artificial Fishes: Physics, Locomotion, Perception, Behavior, SIGGRAPH '94, pp.43–50 · Artificial Life 1(4):327–351
진화하는 생명체Karl Sims, Evolving Virtual Creatures, SIGGRAPH '94, pp.15–22 · karlsims.com
이동 규칙Craig Reynolds, Steering Behaviors For Autonomous Characters, GDC 1999 · red3d.com/cwr
훈련되는 캐릭터Blumberg 외(MIT Media Lab), Integrated Learning for Interactive Synthetic Characters, SIGGRAPH 2002
욕구·생화학 생명Steve Grand, Creatures(1996) · 오픈소스 재구현 github.com/openc2e/openc2e
기억 구조를 가진 에이전트Park 외, Generative Agents: Interactive Simulacra of Human Behavior, UIST 2023 · github.com/joonspk-research/generative_agents
학습 도구Unity ML-Agents · github.com/Unity-Technologies/ml-agents
브라우저 추론ONNX Runtime Web (WebGPU/WASM) · github.com/microsoft/onnxruntime
로봇 반려동물 효과PARO(시바타 다카노리, AIST) 돌봄 시설 연구 · AIBO 애착 연구
종장 · 정리

이 작업에서 확인된 네 가지

1
측정하지 않은 것은 말하지 않는다
좌표 범위·휘도·늘어남 — 모두 실측 후 결정했다.
2
지표 하나로 판정하지 않는다
한 지표를 개선하면 다른 지표가 악화될 수 있다. 화면과 함께 본다.
3
되돌릴 수 있게 만든다
롤백이 가능해야 과감한 시도를 할 수 있다.
4
첫 결과물은 버리지 않는다
무엇이 부족한지 알려주는 것은 실패한 결과물이다.
결론

가상은 왜
만들어지는가

이 작품 하나의 이야기에서 한 걸음 물러선다.

결론 · 가상공간의 성격

가상은 이루지 못한 것을 실현하는 자리다

이루지 못하는 꿈

  • 날고 싶다 — 슈퍼맨이 되어 하늘을 난다.
  • 다른 삶을 살고 싶다 — 외형을 빌려 아바타로 산다.
  • 세계를 세우고 싶다 — 도시를 건설한다.
  • 어항을 둘 수 없다 — 물속을 만든다.

결핍이 만든 공간

  • 만나지 못하니 만날 곳을 새로 찾는다.
  • 전시하지 못하니 전시할 곳을 찾는다.
  • 땅이 부족하니 가상의 땅을 점유한다.

메타버스는 유행어이기 이전에 결핍의 목록이다. 공간이 먼저 있고 쓸모를 찾은 것이 아니라, 아쉬움이 먼저 있고 공간이 따라왔다.

가상공간은 욕망을 투영하는 공간이다.

결론 · 무엇이 밀고 있나

네 가지가 동시에 움직이고 있다

인공지능비어 있던 공간을 콘텐츠로 채운다 — 형상·움직임·소리까지
바이브 코딩만드는 쪽의 진입 장벽을 낮춘다 — 코드를 몰라도 시작한다
VR · AR · 스마트 글래스실감의 밀도를 올린다 — 화면 너머로 나온다
정책 · 제도뒤따라 바뀐다 — 소유·저작·거래의 규칙이 다시 쓰인다
  • 이 작품은 그 흐름의 아주 작은 표본이다 — 어항 하나를 갖지 못한 사람이, 링크 하나로 열리는 물속을 만들었다.
  • 세상이 변하는 중이고, 우리는 그 과정 안에 있다. 답이 정해진 국면이 아니라 질문이 열려 있는 국면이다.

질문을 던지는 것이
메시지를 던지는 것이다.

도구는 쉬워졌고 만드는 일의 문턱은 낮아졌다.
남는 것은 무엇을 물을 것인가다.
이 작품도 세 개의 의문에서 시작했다.