버튼 대신 언어로 3D 아바타 제어하기
Control a 3D avatar with language instead of buttons
핵심 요약
자연어 명령을 통해 3D 아바타의 동작을 실시간으로 제어하는 신경망 프로그램 기반 시스템입니다.
- 자연어 제어 — 버튼이나 스크립트 대신 평범한 영어 문장으로 아바타 동작을 명령함
- 신경망 프로그램 — 입력된 문장을 브라우저에서 실행 가능한 작은 액션 프로그램으로 변환함
- 게임 적용 가능성 — NPC가 고정된 스크립트 대신 사용자와의 대화에 따라 즉흥적으로 행동하게 함
- 기술 스택 — Qwen 3 0.6B 모델과 LoRA 어댑터를 사용하여 로컬 환경에서 가볍게 구동됨
말로 조종할 수 있는 3D 캐릭터를 하나 만들어 봤다: https://programasweights.com/avatar
원래 3D 아바타는 미리 정해진 버튼이나 스크립트로만 움직였잖아. 근데 이건 그냥 평범한 영어로 원하는 걸 말하기만 하면 돼. "걸으면서 손 흔들고, 그다음에 점프 두 번 해" 같이 버튼 하나하나 다 설정하기 귀찮은 복합적인 동작도 다 알아먹음.
작동 원리는 이래. 우리가 예전에 만든 programasweights라는 걸 기반으로 돌아가는데, 이게 평범한 영어 설명을 신경망 프로그램으로 컴파일해 주는 놈임. 이 아바타의 '감독' 역할을 하는 게 바로 그 프로그램인데, 실행할 때 네가 입력한 문장을 브라우저에서 바로 돌아가는 작은 액션 프로그램(루프, 홀드, 병렬 트랙 등)으로 바꿔버려. 이 아바타 뒤에 숨겨진 실제 프로그램은 여기 있음: https://programasweights.com/hub/9c2309c0c9019b180adc (너도 쉽게 직접 만들 수 있어).
컴파일된 프로그램을 로컬에서 쓰는 건 그냥 몇 줄이면 끝남 (pip install programasweights):
import programasweights as paw director = paw.function("9c2309c0c9019b180adc") # the avatar's compiled program print(director("jump twice")) # -> repeat 2 { jump } (First call downloads the tiny program + base model, then runs offline.)
디버깅 패널: URL 뒤에 ?dbg=1을 붙여봐. 디버그 패널이 열리면서 문장마다 어떤 액션 프로그램이 짜여지는지 실시간으로 볼 수 있음.
이걸 게임에 적용하면 진짜 재밌을 것 같아. NPC들이 맨날 똑같은 대본만 읊는 게 아니라, 유저랑 대화하고 감정을 느끼면서 즉흥적으로 행동하는 거지. 모델이 실시간으로 액션 프로그램을 짜는 방식이니까. AI가 게임을 더 재밌게 만들어야 한다고 생각함.
코드랑 논문: 추론/런타임 코드는 이미 https://github.com/programasweights에 공개했고, 이 방식에 대한 자세한 배경은 여기 있음: https://x.com/yuntiandeng/status/2044086557330579851. 만약 당장 전체 코드가 너무 궁금하면 제출용으로 썼던 정리 안 된 버전이 여기 있긴 한데: https://anonymous.4open.science/r/programasweights, 나중에 깔끔하게 정리해서 더 좋은 버전으로 다시 올릴 예정임.


