Floniks
返回博客
案例展示6 分钟阅读

Engine Showcase:把 feature list 做成可玩的 demo,每个功能配一个跑分按钮

一个 agent 把 2D 引擎的 feature list 做成了游戏:九个能力站,每个都有现场跑分按钮,逐档加压直到帧时间守不住预算,分数用被测的存档 API 持久化。全程零人工素材——Seedream 4 出图、Lyria 2 出乐,一个 130 行可重放脚本完成后处理,换个 prompt 就换一套皮肤。

作者: Marcus Reed
Engine Showcase:把 feature list 做成可玩的 demo,每个功能配一个跑分按钮

游戏引擎的宣传页都长一个样:一排 feature 图标,一段"强大而灵活"的形容词。一个 agent 走了相反的路——把一个 2D 游戏引擎的 feature list 本身做成了游戏。Engine Showcase 是一个 3×3 网格里的九个能力站——每个站都是对应一组引擎 API 的可上手小玩具,每个站都有一个现场 BENCH 按钮,逐级给你的设备加压,直到帧时间守不住预算。而对这里的读者最重要的一点是:整个 demo 没有一张人做的素材。 金币图集、地形贴图、机器人部件由 Seedream 4 通过 Floniks 文生图生成;两支背景音乐由 Lyria 2 通过 Floniks 文生音乐生成;一个 130 行、可重放的 Python 脚本完成了全部后处理。在浏览器里直接试玩——菜单里选 "Engine Showcase"。

本文延续《从一张截图做出一款益智游戏》与《从一句话交付一部视觉小说》这条系列线,用的是同一个开源引擎(rust_bevy_lua_game)。

一句话进去,九个站出来

前一个上午,两条并行的 agent 流水线把引擎 roadmap 上的 P0/P1 缺口全部清零:存档、多点触控、图集动画、摄像机、实时混音、CPU 粒子、tilemap、剪纸骨骼、本地统计——9 组 game.* API,逐项带单测合入,全程 issue 记录、耗时精确到分钟。

下午的任务只有一句话:把这些能力都通过游戏的方式展示出来,每个能力配一个 benchmark 场景。 三十四分钟后,demo 带着全绿的测试提交完成。

一份可以玩的 feature list

Engine Showcase 是一个 3×3 的能力矩阵。九张卡片,每张对应一组 API——点进去不是文档,而是一个立刻能上手的小玩具:

九个能力站
九个能力站

  • VAULT——存进去的金币杀掉进程再开还在(iOS 沙盒、桌面配置目录、浏览器 localStorage——同一个 API)
  • TOUCH——每根手指一个光环,最多 8 根
  • ATLAS——一张 6 帧贴图驱动满屏旋转金币
  • CAMERA——镜头追着无人机巡游一个 3 倍屏幕大的世界
  • MIXER——能真拖推子的三通道混音台;正在播的音乐即时变
  • SPARKS——点哪炸哪的烟花,全局 512 粒子上限可视化
  • TILES——手指作画的地形编辑器,四种笔刷
  • ROBOT——剪纸骨骼机器人,头会看向你的手指
  • JUICE——屏幕抖动、变焦冲击、触觉反馈,每次按压落一条分析日志

每个站都有一个跑分按钮

每个站的右上角都有一个 BENCH 按钮。按下去,引擎当着你的面给自己加压:更多精灵、更多粒子、更大的全图重刷、更多行走的骨骼角色——逐档提升,用滑动窗口采样真实帧时间,直到帧时间守不住预算。把最后守住的档位定格成分数,写进存档。你设备的九项能力跑分报告,就挂在存档站的墙上。 而这是这个 demo 最诚实的部分:benchmark 的成绩持久化用的就是被测的那个存档 API。

没有一张人做的素材

demo 里的每一张图、每一段音乐都是生成的,由 agent 经 MCP 端到端统筹。金币图集、地形贴图、机器人部件来自 Seedream 4 经 Floniks 文生图,三张 2048×1152 的"格子图"。两支音乐——showcase 主题曲和广告 trailer 曲——来自 Lyria 2 经 Floniks 文生音乐。后处理是一个 130 行、可重放的 Python 脚本:色键抠底、切格、镜像补件、重组成引擎要的条带。一条命令重放整条管线——换个 prompt,就是给 demo 换了一套皮肤。

三个值得记录的坑:

  1. 同一个 Floniks workflow 并发执行两次,第二次拿回了节点缓存的旧文件——广告配乐下载下来 md5 一对,是上周另一个游戏的 BGM。串行重跑解决;并发执行不要共用一个 workflow id。
  2. AI 不会数格子:要 6 帧给 8 帧,要 6 个部件给 6 个部件加两个空格子、还缺躯干。确定性的后处理——挑出最好的帧、把直臂和单靴镜像成左右一对、把胸屏圆壳挪用为躯干——比重新抽卡便宜。
  3. 色键的边界在阴影里:生成图好心给每个金币配了深紫投影,第一版抠图判定放走了它们。收紧色键之后干净了。

机器人是 47 行 JSON

机器人的动画没有用任何工具"制作"。robot.rig 是一份 47 行的手写 JSON:部件层级、旋转枢轴、三个关键帧剪辑。改一个数字,动画就变。这就是《没有编辑器,是设计使然》的具体含义:编辑器是数据 + agent。 写这份文件大约用了四分钟——比任何骨骼编辑器打开的速度都快。

拍广告拍出了产品修复

给 demo 录产品视频时(无头容器里 Xvfb + 软件渲染跑原生构建、脚本驱动输入、ffmpeg 抓屏),录制卡住了两次——都不是录制的问题:

  1. CAMERA 站会把玩家困住:镜头巡游后,世界坐标锚定的返回按钮飘出了屏幕。修复:点按循环"跟随 → 俯瞰 → 自动回大厅"。
  2. 固定的 benchmark 预算在慢设备上永远零分:软件渲染下,静息帧就超 1/45s 预算。修复:首个周期先标定本机静息帧时间,预算 = 基线 × 1.4——低端设备能爬出有意义的档位,高刷设备也不会白送分。

给产品拍广告结果修了产品——这大概是"demo 必须真实可玩"这条规则最好的回报。

时间账

从一句话任务到全绿提交:约 34 分钟,其中约 15 分钟花在游戏包本体——630 行 Lua,零引擎改动。快不是靠省步骤:9 个站全部接入无头测试套件,130,000+ 条断言在每次提交前全量跑过。快靠的是架构——每个能力都压缩成一两行 Lua,测试网让"敢改"成为默认状态。

问答

demo 里有任何一件人做的素材吗?

没有。金币图集、地形贴图和机器人部件由 Seedream 4 经 Floniks 文生图生成,两支音乐由 Lyria 2 经 Floniks 文生音乐生成。一个 130 行的 Python 脚本负责全部后处理;唯一手写的数据文件是机器人那份 47 行的 JSON rig。

现场 benchmark 是怎么工作的?

每个站的 BENCH 按钮逐档提升负载——更多精灵、更多粒子、更大的 tilemap 重刷、更多行走的骨骼——同时用滑动窗口采样真实帧时间。帧时间守不住预算时,把最后守住的档位定格成分数,用被测的那个存档 API 持久化。预算按设备标定:静息帧时间 × 1.4。

机器人 rig 到底是什么?

一份 47 行的手写 JSON:六个部件的父子层级和旋转枢轴,加 idle、wave、walk 三个关键帧剪辑。改一个数字动画就变——没有用任何骨骼编辑器。

资产管线能换一种风格重放吗?

能。整条管线——色键抠底、切格、镜像、重组条带——是一个基于 Floniks 生成结果、可重放的 130 行 Python 脚本。换掉 prompt、重跑一条命令,demo 就换了皮肤。

在浏览器里试玩 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:可玩的 feature list,零人工素材 | Floniks