202. 3개월의 칩거
상혁이 EOD의 테스트를 위해 이라크에 가 있는 동안, 민준은 상혁이 건네준 숙제를 해결하기 위해 고군분투하고 있었다.
사실 돌려서 표현하는 방식으로 ‘그럴싸하게’보이게 하는 것이야 간단했지만, 상혁이 원하는 게 그런 것이 아니라는 것쯤은 잘 알고 있었기 때문에.
“일단, 간단한 게임부터 할 수 있게 만들어볼까.”
‘사람처럼 게임하는 AI’라는 개념을 구현하기 위하여, 민준은 우선 간단한 게임을 설정된 스타일대로 플레이하는 AI를 제작하기 시작했다.
일부 설정 값을 바꾸는 것으로, 게임에서 보여주는 AI패턴이 강하게 변화할 수 있도록.
그리고 그 과정에서 게임 플레이 중에 발생하는 다양한 상황에 대한 피드백을 출력할 수 있게.
그렇게 해서 완성한 민준의 게이머 AI VER-0.1은, 플레이어와 함께 ‘오셀로’를 플레이하는 프로그램 이 되어 있었다.
-FACE ANI:24 / TEXT SCR: 42-
-FACE ANI:45 / TEXT SCR: 56-
-FACE ANI:22 / TEXT SCR: 343-
민준은 화면에 지속적으로 출력되는 텍스트들을, 게임 도중에 상대 AI가 출력해야 하는 표정 번호와 텍스트 번호를 호출하게 만들어 놓았고, 민준은 그렇게 만들어진 테스트 버전을 가지고 지수를 찾아갔다.
그리고는 AI에 대한 간단할 설명과 함께 AI 출력하는 반응에 대한 데이터 입력을 요청했다.
“오! 재미있는 걸 만들고 계셨네요?”
“어. 할 수 있겠어?”
“흠, 성격에 맞춰서 페이스 할당하고 거기 맞는 텍스트 리액션을 넣으면 된다는 거죠?”
“어.”
“오셀로 플레이치고는 좀 반응 숫자가 너무 많은거 아니에요?”
“수다쟁이같은 성격이라고 생각해. 테스트를 위해서 피드백이 많은 편이 좋아서 만든 거니까.”
“알았어요. 언제까지 해 드리면 되요?”
“최대한 빨리?”
지수가 고개를 끄덕이자, 민준은 지수가 주로 시간을 보내고 있는 개발 2팀 작업실을 나섰다.
그리고 이틀 만에 자신을 찾아와 결과물을 내미는 지수를 보고 얼빠진 표정으로 말했다.
“벌써 다 됐다고?”
“뭐, 단순히 얼굴 표정하고 대사 넣는 것뿐이잖아요? 이틀이면 충분하죠. 하다 보니 재밌더라고요.”
자신이 지수에게 맡긴 작업이, ‘하다보면 재미있는’ 수준의 작업이 절대 아니라는 것을 잘 아는 민준은, 당황한 표정으로 지수가 회사 서버에 업로드 한 테스트용 스크립트를 다운 받았다.
그리고 겨우 오셀로라는 것을 알아볼 수 있을 정도의 테스트 빌드를 돌리며, 지수의 작업을 확인하기 시작했다.
[후후후 가소로운 닝겐같으니. 이 어둠의 지배자에게 덤빈 것을 후회하게 해 주겠다!]
[애송이 같은 공격이구나! 결국 너의 돌이 전부 내 색으로 물들게 될 것이다!]
[큭. 제법 하는군. 하지만 이걸로 끝이라고 생각하지 마랏!]
“얘, 이런 성격이었나?”
묘하게 중2병스러운 대사로 치환된 스크립트를 보면서 민준이 지수를 쳐다보자, 지수가 얼굴을 붉히며 말했다.
“왠지 장난기가 동해서···. 하하핫···.”
“옛날에 너 보는 거 같아서 재미는 있네.”
마치 중학생 시절의 지수와 오셀로를 하는 느낌을 받으며, 민준은 즐겁게 테스트 플레이를 마쳤다.
그리고 상혁이 만들자고 한 이 시스템이, 생각보다 강렬한 매력을 가지고 있다는 것을 깨달을 수 있었다.
“흠, 스크립트 넘버일 때는 좀 그랬는데, 리액션이 대사로 주어지니까 진짜로 사람하고 게임하는 느낌이 나네.”
그러자 지수가 격하게 고개를 끄덕이며 민준의 의견에 동의했다.
“그렇죠? 근데 이거 지금 인조학원에 넣으려고 작업하시는 거예요?”
“어. 일단 간단한 게임부터 시작해서 점점 복잡도를 늘려봐야지.”
“흠···. 그래서 최종 버전이 되면 어떻게 되는데요?”
“아마 자신이 커스터마이징한 성격의 캐릭터들이랑, 진짜로 함께 게임을 하는 느낌이 들겠지? 의도적으로는 그런 느낌을 주려고 만드는 시스템이니까.”
“아, 그러니까 성격이 하나가 아닌 거네요?”
“어. 볼래?”
민준이 요청한 대화형 리액션 스크립트의 수는, 어마어마한 경우의 수를 품고 있었지만, 대부분의 대사는 지수가 테스트 할 때는 볼 수 없었던 대사들이었다.
민준은 DB를 수정하여 설정되어있는 AI 수준을 최하로 낮춘 뒤, 반발심과 공포심 부분만 최대치로 올려놓았다.
그리고 다시 오셀로를 플레이하자, 아까와는 전혀 다른 대사가 출력되기 시작했다.
[으윽! 이 녀석! 그런 수를 두다니 그러고도 인간이라 할 수 있느냐!?]
[죽인다. 이 게임이 끝나고 반드시 네 녀석을 죽인다!]
[아무것도 할 줄 모르는 녀석이 게임만 잘한다고 건방떨지 마랏!]
[내가 잘못했어요. 그러니까 한수만 물러주세요! 허어어엉]
[방금 수는 실수였다! 한번만! 거기 한번만 먹지 말아줘!]
건방진 대사를 뿜던 아까전의 플레이와는 다르게, 지금의 AI는 완전히 다른 패턴의 대사를 출력하고 있었다.
그리고 아까전과 다르게 게임에서도 악수만 계속 거듭해서 두고 있었고.
지수는 어떻게 해도 볼 수 없었던 대사가 출력되는 것을 보며, 민준이 구현하고 있는 시스템의 전모를 깨달았다.
“아, 어떤 건지 알겠어요.”
“어떨 것 같아?”
“그러니까, 유저가 커스터마이징한 캐릭터가 실제로 게임안의 게임게임을 하면서 유저한테 마치 사람인 것처럼 인 게임 채팅을 한다는 거죠? 플레이도 실제 성격과 실력대로 하고요?”
“맞아.”
“장난 아닌데요? 그거?”
지수가 잔뜩 흥분한 목소리로 말했다.
“파티원을 어떻게 커스터마이징하느냐에 따라서 나중에 게임할 때 안의 결과물이 완전히 달라지는 거잖아요? 친구 여러 명이랑 게임하는 느낌으로 만들려는 거 맞죠?”
“의도야 그렇지. 가능할지가 문제지만.”
“엥?! 불가능해요? 지금 테스트 버전 느낌으로는 꽤 괜찮던데?”
“그거야 단순 상황에 따라서 조건부로 텍스트를 띄우니까 처음 할 때는 괜찮아 보이는 거지, 반복해서 플레이하면 금세 컴퓨터라는 걸 알아차릴 수밖에 없어. 인간‘처럼’사고 하는 AI와 인간 ‘같이’사고 하는 AI는 아예 구현 난이도 자체가 다르니까. 후자는 다음 세대 콘솔 성능은커녕 슈퍼컴퓨터 성능으로도 구현하기 힘들 거고.”
“흠···. 기술적 문제라는 건가···?”
잠시 고민하던 지수가 입을 열었다.
“하지만 제 생각에 그건 잘못된 생각인 것 같아요.”
“어?”
“아마도 민준 오빠가 지금 구현하려고 하는 거랑, 상혁 오빠가 바라는 건, 좀 다를 것 같다는 이야기죠.”
“무슨 말이야?”
“상혁 오빠라면, 아마 사람 ‘같이’행동하는 완벽한 AI를 원하는 게 아닐 것 같아서 하는 말이에요.”
지수는 설명을 계속했다.
“예를 들어 농구 게임을 만든다고 할 때, 캐릭터의 스피드가 증가한다고 하면 실제 인간의 스피드는 다양한 조건을 바탕으로 만들어지잖아요. 근육량이 늘고, 체지방이 줄고, 달리는 자세가 효율적이 되면서 드리블을 할 때 볼 컨트롤도 좋아져야 속도가 늘겠죠? 그 과정에서 연습도 수없이 해야 할 거고요.”
농구 슛을 던지듯 지수는 살짝 시늉하며 말을 이었다.
“하지만 개발자인 저희는 대충 달리는 모션을 만든 뒤, 모션 프레임을 조정하고 캐릭터 좌표가 이동하는 속도를 올려버리죠. 결과적으로 그 모든 로직을 통과해서 만들어지는 결과물과, 흉내만 내서 만든 둘 사이에 차이점은 없고요.”
“요컨대 어떻게 만들던 보는 사람이 차이가 없으면, 실제로 똑같이 구현할 필요는 없다는 이야기를 하고 싶은 거야?”
“그렇죠. 실제로 오빠가 넘겨준 스크립트는, 지나치게 모든 경우의 수를 다 고려해서 만든 면이 강하더라고요. 제가 작업해도 이틀이나 걸릴 정도로 대사량이 압도적이었으니까. 그런데 실제로 매 수마다 그렇게 리액션이 화려한 인간이 어디 있겠어요? 사람이란 건 원래 성격이나 심리 상태에 따라서 게임에 대한 리액션도 달라지는 것이···.”
“잠깐만!”
지수의 말을 듣던 민준이 외쳤다.
그리고는 뭔가를 떠올린 듯 턱에 손을 대고 곰곰이 생각하기 시작했다.
어쩌면 방금 지수가 한 말 속에, 자신이 고민하던 것에 대한 힌트가 담겨있을지도 모른다는 생각이 들어서.
지수는 그 옆에 서서 조용히 민준이 결론을 내기를 기다리고 있었다.
그리고 잠시 후, 민준이 안면에 미소를 지으며 지수를 향해 말했다.
“좋은 말이네. 그러게. 내가 너무 원론적으로 접근했던 것 같아.”
“뭔가 떠올리신 거예요?”
“응. 덕분에.”
그러자 지수가 씨익 웃으며 말했다.
“제가 오빠한테 도움이 될 때도 있네요.”
“뭐, 이미 너도 상혁이랑 비견되는 기획자니까. 회사 안에서 ‘미니 요다’라고 부르는 직원도 있는 거 모르냐?”
그러자 지수가 미간을 찌푸리며 민준에게 말했다.
“아니! 이렇게 귀여운 요다가 어디 있어요!? 주름하나 없는 탱글탱글한 미소녀에게 요다라니!”
“상혁이의 뒤를 이을 기획자란 뜻에서 말하는 거겠지.
설마 외모 때문에 그러겠냐.
그럼 상혁이도 주름투성이 난쟁이여야 하게?”
민준의 말을 들은 지수는 긴 귀가 달린 초록색 피부의 상혁을 떠올리고는 웃음을 터트렸다.
“푸하하핫! 그거 좀 웃기네요!”
“내가 그런 말 한건 상혁이한텐 비밀이다?”
“푸훕. 넵. 뭐, 그래도 상혁 오빠가 요다랑 닮은 부분이 있긴 하죠.”
“어? 어디가?”
빈말로라도 못생긴 축에 속하는 건 아닌 상혁에게 요다와 닮은 부분이 있다는 말에 민준이 황당해하자, 지수가 웃으며 말했다.
“키가 조금 작잖아요.”
“아···.”
그리고 민준은, ‘그렇게 따지면 지수 너도 작잖아.’라는 말을 했다가 지수에게 영혼까지 탈탈 털리는 수모를 겪어야 했다.
***
민준이 지수의 말에서 얻은 힌트는, ‘인간은 모든 행동에서 리액션을 취하지는 않는다.’라는 것이었다.
오셀로를 예로 들면, 우선 상대하는 상대와의 관계가 심리 상태에 영향을 끼치게 된다.
마음속으로 좋아하는 사람인가, 혹은 무시하던 사람인가, 혹은 싫어하는 사람인가, 함께 게임을 하고 싶지 않은 상대인가, 아니면 매일 지면서도 도전해오는 상대인가, 아니면 언젠가 이기고 싶은 라이벌인가.
그런 수많은 관계 속에서 게임을 대하는 사람의 마음가짐이 달라진다.
민준은 ‘성격’을 우선으로 설계했던 AI를 ‘관계’에 따라 동작하도록 재설계 했다.
통합 AI가, 먼저 각 게임 상황에서 플레이어나 동료 AI와의 관계에 대한 판단을 먼저 할 수 있도록.
그리고 그 안에서 게임안의 특정 조건이 발동했을 때, 성격에 따라 대사의 출력여부를 판단할 수 있도록.
물론 그렇다고 해도 쉬운 작업은 아니다.
단순히 성격 숫자만큼의 AI를 만들어야하던 기존 방식보다 조금 더 효율적이 된 것 뿐이지, 수많은 상황에 따라 성격별 대사를 잡아야하는 작업량 자체는 크게 줄어든 것은 아니었으니까.
그러나 그렇게 함으로써 일종의 ‘체계’를 잡을 수 있게 해두면, 이후에 스크립터들이 스크립트를 작업할 때 ‘규칙’에 따른 작업이 가능해진다.
확실하게 말하지만, AI는 만능이 아니다.
마치 전가의 보도처럼 AI를 쓰면 모든 문제가 해결될 것 같이 생각하는 것과는 다르게, AI라도 사람이 작업해야하는 부분은 사람이 작업해야했다.
진짜로 텍스트 하나하나를 성격이 부여된 인간처럼 생성하는 AI는, 현존하는 기술로는 구현이 불가능 했기 때문에.
민준은 그것을 확실하게 인지한 상태로, 사람처럼 보이게 하기 위해 AI가 판단해야할 부분과, ‘작업자들’이 채워 넣어야 할 부분을 명확하게 구분해 놓았다.
어차피 모든 경우의 수를 만드는 것은 민준에게 어려운 것은 아니었다.
그건 프로그램이 해 주는 거니까.
물론 그것을 채워야하는 입장에서는 욕 나올 정도로 많은 텍스트 작업이 필요하긴 하겠지만.
민준은 그런 부분에 있어서는 영역 구분이 확실한 남자였다.
‘나만 아니면 돼.’
프로그래머가 프로그래머의 역할을 하는 동안, 기획자는 기획자의 역할을 해야지.
자신은 상혁이 말한 ‘이상의 AI’를 구현할 뿐이었다.
그 AI가 말하는 대사 하나하나를 채우는 것은, 자신의 역할이 아니었으니까.
그 ‘자신의 역할’에 최선을 다하기 위해, 민준은 눈에 보이지 않을 속도로 키보드를 두드려나갔다.
인조학원의 AI에서 ‘메인 프레임’을 담당하게 될, 자신의 코드가 완성되었을 때 상혁이 보여줄 반응을 기대하면서.
***
“민준이가 안 보이는데?”
이라크에서의 장기 출장을 마치고 돌아온 상혁은, 평소처럼 돌아온 부실에 민준이 보이지 않는 것을 의아하게 여겼다.
그리고 이전에 MYOM의 메인 코드를 설계했을 때처럼 민준이 몇 주째 칩거 중이라는 소리를 듣고는, 자신에게 그 정보를 전한 현주에게 당황한 표정으로 물어 보았다.
“무슨 일이 있었던 거예요?”
“오빠, 사실은···.”
그러자 현주의 뒤에서 고개를 빼꼼 내밀고 있던 지수가 상혁에게 그간의 사정을 전해주었다.
민준이 만든 테스트 버전을 자신이 완성했고, 그 후에 함께 이야기를 나누고 나서 무한 작업에 들어가기 시작했다는 이야기를.
그리고 그 이야기를 듣던 상혁의 얼굴엔 묘한 미소가 떠오르기 시작했다.
“뭐, 금방 끝나겠죠. 기다려봅시다.”
“걱정 안 되세요?”
“괜찮아. 어차피 지금은 옆에서 말 걸어도 모를 상태니까. 가끔 가서 밥이나 챙겨주면 돼.”
“그래요?”
“원래 그런 녀석이야. 뭔가 꽂히면, 밥도 제대로 안 챙겨먹으면서 미친 듯이 코드만 만지는.”
그렇게 말한 상혁은, 민준이 들어가서 작업 중인 개인실 쪽을 바라보며 말했다.
“그런데 그럴 때마다, 항상 마법같은 일이 일어나곤 하더라고.”
상혁의 말에 지수가 예전일을 떠올렸다.
코넥트의 메인 프레임을 개발할 때, 민준이 작업실에 처박혔던 과거를.
그리고 자신이 짠 코드임에도 민준이 ‘수정 불가’선언을 내린 MYOM의 말도 안 되는 코드를 완성했던 사건을.
민준은 그런 식으로 무언가에 몰입할 때마다, 항상 ‘시대를 초월한’무언가를 완성해서 가져오곤 했었다.
그래서 상혁은, 이번엔 민준이 대체 어떤 물건을 가져올지에 대해서, 두근거리는 마음으로 기다릴 생각이었다.
그러나 그렇게 생각하는 상혁도, 민준에게 영감을 주어 무한작업을 하게 만든 지수도, 민준의 칩거가 그 후로 3달이나 더 이어질 것이라고는 생각하지 못했다.
아예 프로그래밍 적으로 마법이란 개념을 통째로 돌아가게 만든 MYOM때도, 그 정도로 오래 작업에 미쳐있지는 않았었으니까.
그 사이 중간에 제발 쉬라고 말리러 갔다가 엉덩이를 걷어차인 상혁은 결국 민준을 말리기를 포기해 버렸다.
대신 상혁은 민준에게 넉넉한 시간을 줄 수 있도록 최대한 일정을 조절하면서 나머지 프로젝트의 개발에 힘썼다.
중간 중간에 민솔을 보내거나 자신이 직접 민준의 몸상태를 케어하기도 하면서.
그 정도가 자신이 민준에게 해줄 수 있는 전부였기 때문에.
그리고 결국, 작업에 들어간 지 수개월을 소모한 민준이 작업을 마치고 작업실에서 나왔을 때, 상혁은 민준의 모습을 보고 입을 떡 벌릴 수밖에 없었다.
언제 감았는지 모를 정도로 떡쳐서 마치 레고 헤드처럼 보이는 머리.
사방에 흐른 피자소스와 치즈, 커피 얼룩이 덕지덕지 묻은 티셔츠.
완성을 위해서 페이스 조절을 하다가 막판에 무리하는 것은 민준이 가진 나쁜 습관중의 하나였다.
상혁은 회귀 전에 나란히 과로사 했던 엔딩을 이번에도 맞이하고 싶지는 않았기 때문에, 민준에게 당장 쉬러 갈 것을 명했다.
그리고 격렬하게 당장 테스트를 해 달라고 요청하는 민준을 보며, 자신이 꺼낼 수 있는 최대한의 협박 카드를 꺼내어 위협했다.
“지금 당장 쉬러 가지 않으면, 지금까지 작업해서 완성한 코드 전부 날려 버릴 거야! 아예 하드디스크 채로 디가우저(Degausser)에 넣고 밀어버릴 거라고!”
“어떻게 그런 말을···. 너···. 너 진짜 인간 맞냐?”
“3.”
“야, 지금 테스트 안 해주면 난 잠 못 잔다니까? 내가 이거 만드느라 얼마나···.”
“2···.”
“야! 이상혁! 난 괜찮다고!”
“1···.”
“에이! 나쁜 놈의 새끼! 간다! 간다고!”
“민솔이가 따라가서 봐줘.”
“넵!”
상혁의 말에 민솔이 쪼르르 달려가 민준의 팔에 팔짱을 꼈다.
그리고는 마치 나라잃은 표정으로 상혁을 원망스럽게 바라보고 있는 민준을 질질 끌고 가기 시작했다.
그 모습을 보고 있던 상혁은, 민준이 시야에서 사라지자 의자에 털썩 걸터앉아 민준이 업로드한 데이터 폴더를 열어놓고 한숨을 쉬었다.
“후.”
“데이터 삭제는 좀 심했어요.”
“쟤는 만들려는 게 어려울수록 막판에 페이스가 망가지는 애라서 좀 세게 나가야돼.”
그렇게 말한 상혁은 바로 PTW에 존재하는 모든 마스터 급 프로그래머에게 소집명령을 내렸다.
민준이 무려 4개월 가까운 기간을 미친 듯이 작업해서 완성해낸 결과물의 정체가, 무엇인지 대략적으로 파악하기 위해서.
물론 무엇을 완성한 것인지, 그리고 무엇을 테스트해야 하는지 물어보면 간단한 문제였지만, 그걸 물어보기엔 민준의 상태가 심각했기 때문에.
그렇다고 민준이 휴식을 마치고 돌아오길 기다리기엔 결과물의 정체가 너무 궁금해 미칠 것 같았다.
그래서 내린 결론이 일단 마스터급 프로그래머를 모두 모아서 민준이 만든 물건의 정체를 파악하게 시키는 것.
그리고 그렇게 상혁의 부름을 받고 모인 마스터 직원들은, 상혁의 설명을 듣고는 대번에 눈을 반짝이기 시작했다.
어찌됐건 회사 안에서 프로그래머들에게 민준은 월드클래스 천재였으니까.
그런 민준이 식음을 전폐하며 4달 동안 만든 코드?
흥미가 안 갈래야 안 갈수가 없었다.
바로 TF(Task Force : 어떤 과제를 성취하기 위해 필요한 전문가들로 구성되고 기한이 정해진 임시조직)가 결성되었고, 20명이 넘는 마스터 클래스 프로그래머들이 일제히 민준이 짠 코드를 분석하기 시작했다.
세계에서 실력으로 0.001%에 들어가는 프로그래머들만 모아놨다고 해도 과언이 아닌, 최강의 전문가 집단이.
그리고 그렇게 코드 분석에 들어간 마스터 클래스 직원들은, 코드 분석에 들어간 지 정확히 5시간 만에 상혁에게 돌아와 결과를 보고했다.
상혁이 기대하던 것과는, 전혀 다른 내용의 보고를.
“상혁 씨, 이거 정체가 대체 뭡니까?”
민준이 짠 코드. 그것은 보는 이가 정체조차 파악할 수 없는 형태의 도저히 알 수 없는 ‘무언가’라 할 수 있었다.