Floniks
블로그로 돌아가기
쇼케이스9분 읽기

Engine Showcase: 기능 목록을 플레이 가능한 데모로——모든 기능에 벤치마크 버튼

에이전트가 2D 엔진의 기능 목록을 게임으로 만들었습니다: 아홉 개의 능력 스테이션, 각각에 라이브 벤치마크 버튼이 붙어 프레임 타임이 예산을 깰 때까지 부하를 올리고, 점수는 테스트 대상인 저장 API로 영속화됩니다. 수작업 에셋 제로——Seedream 4 아트, Lyria 2 음악, 130줄짜리 재실행 가능 스크립트가 후처리를 맡아, 프롬프트만 바꾸면 스킨이 바뀝니다.

작성자: Marcus Reed
Engine Showcase: 기능 목록을 플레이 가능한 데모로——모든 기능에 벤치마크 버튼

게임 엔진 홍보 페이지는 다 똑같이 생겼습니다: 기능 아이콘 한 줄, 그리고 "강력하고 유연하다"는 형용사 문단. 에이전트는 반대 길을 택해 2D 게임 엔진의 기능 목록 자체를 게임으로 만들었습니다. Engine Showcase는 3×3 그리드에 놓인 아홉 개의 능력 스테이션입니다——각각이 엔진 API 한 계열에 대응하는, 손으로 만져 볼 수 있는 장난감이고, 스테이션마다 라이브 BENCH 버튼이 붙어 프레임 타임이 예산을 지키지 못할 때까지 당신의 기기에 부하를 올립니다. 그리고 이 블로그 독자에게 가장 중요한 대목: 이 데모에는 사람이 만든 에셋이 단 하나도 없습니다. 코인 아틀라스, 지형 타일셋, 로봇 부품은 Seedream 4가 Floniks text-to-image로 생성했고, 배경음악 두 곡은 Lyria 2가 Floniks text-to-music으로 생성했으며, 130줄짜리 재실행 가능한 Python 스크립트가 후처리를 전부 맡았습니다. 브라우저에서 바로 플레이——메뉴에서 "Engine Showcase"를 고르세요.

이 글은 《스크린샷 한 장으로 퍼즐 게임 만들기》와 《한 문장으로 비주얼 노벨 출시하기》를 잇는 시리즈로, 같은 오픈소스 엔진(rust_bevy_lua_game)을 사용합니다.

한 문장이 들어가고, 아홉 개의 스테이션이 나온다

전날 오전, 병렬로 도는 두 개의 에이전트 파이프라인이 엔진 로드맵의 P0/P1 공백을 전부 메웠습니다: 영속 저장, 멀티터치, 아틀라스 애니메이션, 카메라 리그, 라이브 믹싱, CPU 파티클, 타일맵, 컷아웃 스켈레탈 리그, 로컬 통계——game.* API 아홉 계열이 각각 단위 테스트와 함께 병합되었고, 전 과정이 분 단위 소요 시간과 함께 이슈에 기록되었습니다.

오후의 요청은 딱 한 문장이었습니다: 이 능력들을 전부 게임의 형태로 보여 주고, 능력마다 벤치마크 장면을 하나씩 붙여 달라. 그로부터 34분 뒤, 데모는 테스트 전부 초록인 채로 커밋되었습니다.

플레이할 수 있는 기능 목록

Engine Showcase는 3×3 능력 매트릭스입니다. 아홉 장의 카드가 API 한 계열씩에 대응하고——카드를 탭하면 문서가 아니라 곧바로 손을 얹을 수 있는 장난감이 열립니다:

아홉 개의 능력 스테이션
아홉 개의 능력 스테이션

  • VAULT——저금한 코인은 프로세스를 죽이고 다시 켜도 남아 있다(iOS 샌드박스, 데스크톱 설정 디렉터리, 브라우저 localStorage——같은 API 하나)
  • TOUCH——손가락 하나마다 빛나는 링 하나, 최대 여덟 개
  • ATLAS——6프레임 시트 한 장이 화면 가득한 회전 코인을 구동
  • CAMERA——화면 세 배 크기의 세계를 드론을 쫓아 렌즈가 순회
  • MIXER——페이더를 정말로 드래그할 수 있는 3채널 믹서; 재생 중인 음악이 즉시 바뀐다
  • SPARKS——탭하는 곳마다 불꽃놀이, 전역 512 파티클 상한이 눈에 보인다
  • TILES——손가락으로 그리는 지형 에디터, 브러시 네 종
  • ROBOT——컷아웃 스켈레탈 로봇, 머리가 당신의 손가락을 따라본다
  • JUICE——화면 흔들림, 줌 펀치, 햅틱, 누를 때마다 분석 로그 한 줄이 떨어진다

모든 스테이션에 벤치마크 버튼

모든 스테이션의 오른쪽 위에는 BENCH가 앉아 있습니다. 누르면 엔진이 당신 눈앞에서 스스로에게 부하를 겁니다: 더 많은 스프라이트, 더 많은 파티클, 더 큰 전체 맵 다시 쓰기, 더 많은 걸어 다니는 스켈레톤——한 단계씩 올리면서 슬라이딩 윈도로 실제 프레임 타임을 샘플링하고, 프레임 타임이 예산을 지키지 못할 때까지 계속합니다. 마지막으로 버텨 낸 단계가 점수로 확정되어 저장 파일에 기록됩니다. 당신 기기의 아홉 항목 능력 리포트는 저장 스테이션의 벽에 걸려 있습니다. 그리고 이것이 이 데모의 가장 정직한 부분입니다: 벤치마크 성적은 바로 그 벤치마크 대상인 저장 API로 영속화됩니다.

사람이 만든 에셋은 단 하나도 없다

데모 안의 모든 그림과 음악은 생성물이며, 에이전트가 MCP를 통해 엔드 투 엔드로 총괄했습니다. 코인 아틀라스, 지형 타일셋, 로봇 부품은 Seedream 4에서 Floniks text-to-image를 거쳐 2048×1152 "그리드 시트" 세 장으로 도착했습니다. 음악 두 곡——쇼케이스 테마곡과 트레일러용 곡——은 Lyria 2에서 Floniks text-to-music을 거쳐 왔습니다. 후처리는 130줄짜리 재실행 가능한 Python 스크립트입니다: 컬러 키 매팅, 그리드 분할, 빠진 부품의 미러 보완, 엔진이 기대하는 스트립으로 재조립. 명령 하나로 파이프라인 전체가 다시 돌아갑니다——프롬프트만 갈아 끼우면 데모의 스킨이 바뀝니다.

기록해 둘 가치가 있는 함정 세 가지:

  1. 같은 Floniks 워크플로를 동시에 두 번 실행했더니 두 번째는 노드에 캐시된 옛 파일이 돌아왔다——트레일러 음악을 내려받아 보니 md5가 일치, 지난주 다른 게임의 BGM이었습니다. 직렬 재실행으로 해결; 동시 실행에서 하나의 workflow id를 공유하지 마세요.
  2. AI는 칸을 세지 못한다: 6프레임을 요청하면 8프레임이 오고, 부품 6개를 요청하면 6개 + 빈 칸 두 개에 몸통은 빠져 있습니다. 결정적 후처리——가장 좋은 프레임을 고르고, 곧은 팔과 부츠 한 짝을 좌우 쌍으로 미러하고, 가슴의 원판을 몸통으로 승격——가 다시 뽑기보다 쌉니다.
  3. 컬러 키의 경계는 그림자 속에 있다: 생성 이미지가 친절하게도 모든 코인에 짙은 보라색 그림자를 붙여 줬고, 첫 매팅 판정은 그것들을 그냥 통과시켰습니다. 키를 조이자 깨끗해졌습니다.

로봇은 47줄의 JSON

로봇의 애니메이션은 어떤 도구로도 "제작"되지 않았습니다. robot.rig는 손으로 쓴 47줄짜리 JSON 파일입니다: 부품 계층, 회전 피벗, 키프레임 클립 세 개. 숫자 하나를 바꾸면 애니메이션이 바뀝니다. 이것이 《에디터가 없는 것은 설계다》의 구체적인 의미입니다: 에디터란 데이터 + 에이전트다. 이 파일을 쓰는 데 약 4분——어떤 스켈레탈 에디터가 켜지는 것보다도 빠릅니다.

광고를 찍다가 제품을 고쳤다

제품 영상을 녹화하는 동안(헤드리스 컨테이너에서 Xvfb + 소프트웨어 렌더링으로 네이티브 빌드 구동, 스크립트 입력, ffmpeg 캡처) 녹화가 두 번 멈췄습니다——둘 다 녹화 쪽 문제가 아니었습니다:

  1. CAMERA 스테이션이 플레이어를 가둘 수 있었다: 카메라 투어가 끝난 뒤, 월드 좌표에 고정된 뒤로 가기 버튼이 화면 밖으로 흘러가 있었습니다. 수정: 탭이 이제 "추적 → 부감 → 자동으로 허브 복귀"를 순환합니다.
  2. 고정된 벤치마크 예산은 느린 기기에서 영원히 0점: 소프트웨어 렌더링에서는 유휴 프레임조차 1/45초 예산을 넘깁니다. 수정: 첫 사이클에서 기기의 안정 시 프레임 타임을 보정하고, 예산 = 기준선 × 1.4로——저사양 기기도 의미 있는 단계까지 오르고, 고주사율 기기가 공짜 점수를 받는 일도 없습니다.

제품 광고를 찍다가 제품을 수리하게 됐다——"데모는 진짜로 플레이 가능해야 한다"는 규칙이 준 아마도 최고의 보답입니다.

시간 장부

한 문장짜리 과제에서 전부 초록인 커밋까지: 약 34분, 그중 약 15분이 게임 팩 본체——Lua 630줄, 엔진 변경 제로. 속도는 단계를 건너뛰어 산 것이 아닙니다: 아홉 스테이션 전부가 헤드리스 테스트 스위트에 연결되고, 130,000개 이상의 어서션이 커밋 때마다 전량 돌아갑니다. 속도를 사 준 것은 아키텍처입니다——모든 능력이 한두 줄의 Lua로 압축되고, 테스트 그물이 "과감하게 바꾸기"를 기본 상태로 만들어 줍니다.

질문과 답변

데모의 에셋 중 사람이 만든 것이 있나요?

없습니다. 코인 아틀라스, 지형 타일셋, 로봇 부품은 Seedream 4가 Floniks text-to-image로 생성했고, 음악 두 곡은 Lyria 2가 Floniks text-to-music으로 생성했습니다. 130줄짜리 Python 스크립트가 후처리를 전부 맡았고, 유일하게 손으로 쓴 데이터 파일은 로봇의 47줄 JSON 리그입니다.

라이브 벤치마크는 어떻게 동작하나요?

각 스테이션의 BENCH 버튼이 부하를 한 단계씩 올립니다——더 많은 스프라이트, 더 많은 파티클, 더 큰 타일맵 다시 쓰기, 더 많은 걸어 다니는 리그——동시에 슬라이딩 윈도로 실제 프레임 타임을 샘플링합니다. 프레임 타임이 예산을 깨면 마지막으로 버틴 단계가 점수로 확정되고, 바로 그 테스트 대상인 저장 API로 영속화됩니다. 예산은 기기별로 보정됩니다: 안정 시 프레임 타임 × 1.4.

로봇 리그란 정확히 무엇인가요?

손으로 쓴 47줄짜리 JSON 파일입니다: 부모-자식 계층과 회전 피벗을 가진 몸체 부품 여섯 개, 그리고 키프레임 클립 세 개(idle, wave, walk). 숫자 하나를 바꾸면 애니메이션이 바뀝니다——스켈레탈 에디터는 전혀 쓰지 않았습니다.

에셋 파이프라인을 다른 스타일로 다시 돌릴 수 있나요?

네. 파이프라인 전체——컬러 키 매팅, 그리드 분할, 미러링, 스트립 재조립——는 Floniks 생성물 위에서 도는 재실행 가능한 130줄 Python 스크립트 하나입니다. 프롬프트를 갈아 끼우고 명령 하나만 다시 돌리면 데모의 스킨이 바뀝니다.

브라우저에서 Engine Showcase 플레이하기, 전체 소스는 rust_bevy_lua_game 저장소에서, 그리고 당신의 에셋 파이프라인은 Floniks MCP 서버로 연결하세요.

태그

#showcase#benchmark#ai-game-development#asset-generation#text-to-image#text-to-music#mcp#webassembly

관련 글

Engine Showcase: 플레이 가능한 기능 목록, 수작업 에셋 제로 | Floniks