[릴스 해설] ASCII 문자로 만든 GTA 멀티플레이어


한 줄 요약: 이 릴스는 3D 모델과 셰이더 없이, 화면 전체를 문자만으로 그린 GTA 스타일 멀티플레이어 게임입니다 — 문자 렌더링의 원리와, 멀티플레이어가 왜 가장 까다로운 축인지를 함께 풀어 봅니다.

검은 배경 위로 주황색 문자가 빗줄기처럼 쏟아지고, 그 사이에 문자를 빼곡히 쌓아 만든 건물과 횡단보도, 그 앞에 초록색 문자로 조립된 캐릭터 하나가 서 있습니다. 화면 하단에는 도트 매트릭스 글꼴로 think라는 단어가 크게 표시됩니다. 인스타 핸들 yordan.sol이 올린 이 릴스의 캡션은 이렇습니다. “I built a GTA-like multiplayer game rendered entirely in ASCII. No 3D models and no shaders, everything you see is made from text.” — 3D 모델도, 셰이더도 없이, 보이는 모든 것은 문자로 만들었다는 선언입니다. 좋아요 3,700개가 넘었고, 댓글에는 ‘트론(Tron) 느낌’, ‘GTA for ATARI’, ‘더워드 포트리스처럼 20년은 개발해라’ 같은 반응이 달렸습니다.

게임이 ‘진짜’ 멀티플레이어인지, 어떤 엔진과 네트워크 코드로 만들어졌는지는 캡션과 릴스만으로는 확인할 수 없습니다. 대신 이 릴스가 건넨 두 가지 기술적 선언 — ASCII 렌더링멀티플레이어 — 는 각각 설명할 수 있는 검증된 기술입니다. 하나씩 풀어 보겠습니다.

ASCII 렌더링의 원리

일반적인 3D 게임의 렌더링 파이프라인은 3D 모델(기하) → 셰이더(빛과 색을 계산) → 픽셀 순서로 화면을 만듭니다. 캡션의 “No 3D models and no shaders”는 이 파이프라인의 앞뒤를 통째로 문자 도메인으로 바꿨다는 뜻입니다. 화소(픽셀)의 자리를 글자가 대신하는 셈입니다.

이미지를 ASCII로 바꾸는 변환 파이프라인은 잘 정리된 절차입니다. 먼저 화면을 모노스페이스(고정 폭) 글꼴의 격자로 나눕니다. 각 격자 칸마다 원본 장면의 밝기를 샘플링하고, 이 휘도 값을 밀도 램프라 부르는 문자 배열에 대응시킵니다. 밀도 램프는 빽빽한 문자에서 성긴 문자로 정렬된 배열로, 예를 들어 @ # % * + = - : . (공백) 같은 순서입니다. 어두운 샘플은 @처럼 잉크가 짙은 문자를, 밝은 샘플은 공백을 받습니다. 밝기 계산에는 사람의 눈이 녹색에 더 민감한 점을 반영한 휘도 공식(녹색에 가중치를 두는 가중 평균)이 쓰입니다. 마지막으로 모노스페이스 글자는 보통 세로로 2배 길기 때문에, 세로 행 수를 절반으로 줄여 비율이 찌그러지지 않게 보정합니다.

릴스 화면의 주황색 ’문자 비’는 이 원리의 연출 응용입니다. 매트릭스 영화를 오마주한 효과로, 배경 격자의 문자를 계속 교체해 흐르는 느낌을 만듭니다. 문자가 ‘화소’ 역할을 하므로, 문자를 바꾸는 것만으로 화면 전체가 살아 움직입니다.

글자는 픽셀이 아니다

위의 단순한 방법(휘도 → 밀도 램프)에는 알려진 한계가 있습니다. 각 칸에서 밝기 하나만 샘플하면 가장자리가 계단처럼 깨지고, 여러 샘플을 평균 내면 이번엔 전체가 흐릿해집니다. 2026년 1월에 공개된 ASCII 렌더링 심층 분석 글(Alex Harri)이 지적한 핵심이 이것입니다. 글자는 픽셀이 아니라 모양을 가진 도형이라는 점입니다. T는 위가 무겁고, L은 아래와 왼쪽이 무겁고, _는 아래쪽만 차지합니다.

이 글의 해법은 각 문자가 칸의 어느 영역을 얼마나 차지하는지를 수치 벡터(형태 벡터)로 만들어 두고, 렌더링할 때마다 장면의 샘플 값과 가장 비슷한 모양의 문자를 고르는 것입니다. 여기에 경계의 대비를 강화하는 후처리까지 더하면, 문자들이 물체의 윤곽을 훨씬 선명하게 따라갑니다. 릴스에서 초록 캐릭터가 ’문자를 쌓아 만든 조립체’처럼 또렷하게 보이는 것은, 이런 모양 기반 선택이 적용됐기 때문일 가능성이 높습니다. 다만 제작자가 실제로 어떤 기법을 썼는지는 공개된 바가 없습니다.

멀티플레이어의 난제

렌더링보다 더 어려운 선언은 멀티플레이어입니다. 혼자 하는 게임이라면 화면 하나만 계산하면 되지만, 여러 명이 같은 세계에 접속하면 세 가지 문제가 한 번에 생깁니다.

첫째, 상태 동기화입니다. 각 플레이어의 위치, 속도, 월드의 물체 상태를 모든 참가자가 같은 값으로 유지해야 합니다. 둘째, 지연 보정입니다. 패킷이 오가는 수십~수백 밀리초 사이에 다른 플레이어는 어디쯤 있었을지 예측해서 그려야 하고, 실제 값이 도착하면 부드럽게 교정해야 합니다. 셋째, 권한 문제입니다. 누구의 계산을 진짜로 인정할지(서버 권한 방식)를 정하지 않으면 치팅에 그대로 노출됩니다. GTA 스타일의 열린 도시는 자동차, 보행자, 물체 같은 상태의 종류와 양이 크기 때문에, 이 부담이 좁은 맵보다 훨씬 큽니다. 캡션은 “multiplayer game”이라고만 말할 뿐 네트워크 구조를 공개하지 않으므로, 이 부분은 릴스만으로는 판단할 수 없습니다.

ASCII라는 선택

이 릴스에서 흥미로운 점은 기술만이 아니라 선택입니다. 렌더링에 쓸 수 있는 성능과 도구가 넘치는 시대에, 굳이 문자만으로 장면을 만들기로 했습니다. 제약이 스타일을 만드는 전형적인 사례로, 검은 배경에 주황 문자 비라는 조합은 트론·매트릭스 계열의 레트로 감성을 즉시 연상시킵니다. 댓글의 ‘GTA for ATARI’, ‘20년은 개발해라’ 같은 반응도 이 감성에 대한 것입니다.

캡션 마지막의 “Follow to see the progression”(진행 과정을 보려면 팔로우)은 이런 콘텐츠의 전형적인 전략이기도 합니다. 완성작이 아니라 진행 중인 도전을 공개하면, 같은 프로젝트를 여러 릴스로 이어가며 시청자를 개발 여정에 동참시킬 수 있습니다. 한편 핸들 yordan.sol의 ’.sol’은 솔라나 네임서비스(SNS)에서 발급하는 도메인 관례라 웹3 커뮤니티와의 접점이 짐작되지만, 제작자에 대한 공개 정보는 이 릴스 외에 확인되지 않았습니다.

어떻게 연결되는가

한 줄로 요약하면: 픽셀 대신 문자를 표시 단위로 삼는 ASCII 렌더링은, 게임 화면을 만드는 파이프라인의 끝단을 통째로 바꾸는 선택이며, 여기에 멀티플레이어 동기화라는 또 하나의 난제를 얹은 프로젝트입니다.

이 블로그의 PS2 그래픽 칩 고장 글을 떠올리면 대비가 됩니다. 이 글에서 GPU가 죽어가며 화면이 붕괴한 것은, 정상적으로 픽셀을 만들던 파이프라인이 망가진 결과였습니다. 반면 이 릴스는 애초에 픽셀 대신 문자를 파이프라인의 출력으로 쓰기로 한 경우입니다. 같은 ’화면’이라도 표시 단위를 무엇으로 하느냐에 따라 가능한 표현과 어려운 문제가 완전히 달라집니다. 3D 모델과 셰이더라는 편리함을 포기하는 대신 얻은 것은, 문자 비가 쏟아지는 도시에서 멀티플레이어를 플레이한다는 보기 드문 장면입니다. 다음 릴스에서 이 게임이 어떻게 발전하는지도 지켜볼 만합니다.

출처: