-
Minor On Air 기획 - < 판정 모델이 필요한 순간 > TOP NEW
개요 비가 오면 농부는 싫어할까? 보통은 그렇다고 답한다. 그럼 표에 농부 × 비 = 불만이라고 한 줄 쓰면 끝이다. 그런데 그 농부가 사실 일하기 싫은 농부라면? 비가 오면 오늘은 쉴 수 있으니 오히려 좋아한다. 같은 비, 같은 농부인데 반응이 뒤집혔다. 이 프로젝트를 시작할 때부터 붙잡고 있던 질문이 있다. 이거, Jev 말고 if 분기로도 되지 않나? 앞 글에서 게임을 구름 캐는 천사로 피봇하면서 이 질문이 다시 나왔다. 게임에 판정 모델이나 LLM을 넣을지 고민 중이라면, 그 판단을 “반응이 맥락 때문에 뒤집히는가” 하나로 줄인 과정과 그걸 검증할 케이스 설계를 볼 수 있을 거다. 적어보겠다... Read More
-
Minor On Air 기획 - < 광질이 재미없을 때 > TOP NEW
개요 조미료를 고르기도 전에 요리가 맛없다는 판정이 나왔다. 처음 기획할 때 광질 게임을 요리로, AI를 조미료로 두었다. 요리가 맛없으면 무엇을 쳐도 소용없다고. 그런데 둘이 맛본 첫 요리에는 재미, 도파민 요소가 아예 없었다.. 광질 게임인데 광질이 맛없으면 광질을 버려야 할까? 우리는 광질을 재료로 남기고 재미를 다른 데로 옮겼고, 그러다 광부가 하늘에서 구름 캐는 천사가 됐다. 그 과정을 적어보겠다! “재미없다”를 빈칸으로 바꾸기 테스트 판에는 때리면 도망가는 광물, 캐다 보면 터지는 광물, 팀 점수가 다 들어가 있었다. 그런데도 남은 건 “재미없다” 하나였고, 이것만으로는 무엇을 고칠지 알 수 없... Read More
-
Minor On Air 개발 - < AI 3D 모델링에 하네스 씌우기 > TOP NEW
개요 말로만 그림을 설명하고 상대가 그리게 하는 게임에서, 그리는 쪽이 갑자기 스케치 세 장을 내밀며 “이 중에 뭐야?”라고 물으면 어떻게 될까? AI로 플레이어 로봇을 모델링하면서 도면을 아무리 자세히 그려도 blockout(큰 덩어리만 잡은 초안)에서 더 나아가지 않았다. 그래서 설명을 더 하는 대신 AI가 일하는 틀, 하네스를 만들었다. 고쳐도 되는 범위, 고친 뒤 재야 할 것, 남겨야 할 기록을 저장소 규칙과 코드로 정해 둔 것이다. 그러자 장면이 바뀌었다. 내가 추상적으로 말한 것이 후보 보드로 렌더되어 돌아왔고, AI가 이 중 어느 쪽이냐고 되물었다. 고치기 전에 먼저 재고, 잰 숫자와 수정안부터 ... Read More
-
Minor On Air 개발 - < 도면으로 AI 3D 모델링 > TOP NEW
개요 말로만 그림을 설명하고 상대가 그리게 하는 게임이 있다. 설명이 자세할수록 그림이 닮아갈 거라 믿게 된다. 나도 그렇게 믿었다. 도면만 제대로 뽑아주면 AI가 잘 만들 거라 생각해서, GPT로 정면·측면·단면·분해도까지 담은 도면을 만드는 데 시간을 바쳤다. 그런데 Blender 안의 로봇은 아무리 설명을 보태도 blockout(큰 덩어리만 잡은 초안 모델)에서 더 나아가지 않았다.. Minor On Air는 로봇 광부들이 거대한 생명체 안에서 광석을 캐는 1인칭 협동 게임이다. 이번엔 플레이어가 조종할 그 로봇을 AI로 모델링해 보려 했다. ChatGPT 6.1-sol과 Claude Opus 5.5를... Read More
-
Algorithm - < 문자열 매칭 네 가지 > TOP NEW
개요 끝이 안 보이는 줄. 빨강, 파랑, 노랑, 초록 모자를 차례로 쓴 네 명을 찾아야 한다. 맨 앞 사람부터 모자를 본다. 빨강이 아니다. 한 칸 옆. 또 아니다. 한 칸 옆.. 그러다 네 번째 사람을 먼저 봤다고 해보자. 보라 모자다. ..그럼 이 사람이 끼어 있는 네 명은 볼 필요도 없잖아? 한 명 보고 네 칸을 건너뛴다. 보이어-무어가 패턴을 오른쪽 끝부터 비교하는 이유다. 찾는 줄이 길수록 더 멀리 뛴다. 이번에 배운 건 텍스트 안에서 패턴의 위치를 찾는 알고리즘 네 가지다. 브루트포스, 라빈-카프, 보이어-무어( 호스풀 방식 ), KMP. 넷은 결국 같은 두 질문에 다르게 답한다. 실패... Read More
-
이론 정리 - < IO 멀티플렉싱은 블로킹을 한 곳에 모은다 > TOP NEW
개요 아파트 경비원 한 명이 수백 세대를 맡는다. 세대마다 문 앞에 서 있을 순 없으니 경비실 호출 패널만 본다. 불이 들어온 세대 번호로 가면 된다. 순찰도 돌아야 한다. 규칙은 “호출이 10분 동안 없으면 순찰을 돈다.” 택배가 몰리는 날 호출이 5분마다 오면 순찰은 한 번도 못 돈다..! 게임 서버가 이 경비원이다. 호출 패널은 epoll, 순찰은 틱( 몬스터를 움직이고 버프 시간을 줄이는, 일정 간격의 세계 갱신 )이다. 처음엔 서버도 이 규칙대로 짜면 된다고 생각했다. 패널을 기다리는 함수가 돌려주는 숫자가 0이면 “그동안 호출이 없었다”는 뜻이니 그때 틱을 돌리면 된다고. 그 숫자는 시간이 아니라 ... Read More
-
Algorithm - < 최단 경로 세 가지 > TOP NEW
개요 이번에 배운 건 최단 경로를 구하는 알고리즘 세 가지다. 다익스트라, 벨만-포드, 플로이드-워셜. 셋 다 “가장 싼 길”을 찾지만 쓰는 자리가 다르고, 그 자리를 가르는 건 두 질문이다. 몇 쌍을 묻는가. 한 점에서 출발하는 거리면 다익스트라·벨만-포드, 모든 점 사이의 거리면 플로이드-워셜 음수 간선을 믿을 수 있는가. 간선이 전부 0 이상이면 다익스트라, 음수가 섞이면 벨만-포드·플로이드-워셜 세 알고리즘이 맞는 이유를 한 문장씩으로 줄여 두면, 그 문장이 깨지는 조건도 같이 보인다. 다익스트라: 큐에서 꺼낸 순간 거리가 확정된다. 간선이 0 이상일 때만 참이다 벨만-포드: V−... Read More
-
C# - < 이벤트 구독 해제 > TOP NEW
개요 보스전이 있는 게임을 떠올려 보자. 화면 위에는 보스 체력바가 있고, 옆에는 퀘스트 기록창이 있다. 둘 다 보스의 “죽었다” 이벤트를 구독해 두고, 보스가 죽으면 알림을 받아 각자 할 일을 한다. 보스 쪽은 알림을 보낸 다음 보상 상자를 떨어뜨린다. 전투 도중 UI가 한 번 다시 만들어지면서 체력바가 닫혔다가 새로 생겼다. 그런데 옛 체력바는 구독을 풀지 않은 채 사라졌다. 이 상태로 보스를 잡으면 보상 상자가 안 떨어진다. 보상 코드에는 아무 문제가 없다. 일은 이렇게 이어진다. 보스가 “죽었다” 알림을 보낸다 알림 목록에 아직 남아 있던 옛 체력바도 알림을 받는다 옛 체력바가 이미 사라... Read More