· 月明Verse · AI 创作 · 20 分钟阅读
我用半小时,把一张图做成了2D肉鸽游戏
用 GPT Image 2、Codex、Blender 和 Three.js,把原创形象从参考图接力做成立体角色与可玩的网页肉鸽游戏,并公开六组提示词。

GPT Image 2、Codex、Blender 和 Three.js 全流程分享

昨天我做了一个有点上头的小实验。
我先用 GPT Image 2 做以图生图,把自己的宇航员形象整理成一张 Q 版全身图;再让 Codex 操作 Blender,把图片做成可编辑的 3D 模型;接着导出 GLB,用 Three.js 放进网页展厅;模型能转起来之后,我又让 GPT-6 Astra 基于同一个 IP 和网页项目,做成了一款俯视角 2D 月面肉鸽游戏。
从参考图到能玩的版本,整个过程大约用了半小时。现在它已经能在电脑和手机浏览器里运行:有移动、自动射击、冲刺、技能、经验升级、道具、不同敌人和首领战。
这篇不讲跑分,也不讨论谁超过了谁。我只把这次做成它的过程、工具分工和六组提示词完整放出来。
如果你手里也有一张自己的头像、品牌角色或者原创 IP,读完可以直接照着这条顺序,从一张图开始,先做出能在网页里转动的 3D 角色,再继续加入玩法。
AI 做完整作品,难点不在生成某一个环节,而在让上一步的结果能被下一步继续使用。
做出来的不止一张效果图,还有一局完整游戏
先看手机端。

手机画面里已经打到第 7 波,累计 245 击杀。左下角是虚拟摇杆,右下角有月牙斩、星环爆发、冲刺和修复按钮;中间还能看到首领血条、技能特效、经验掉落和敌人弹幕。
电脑端使用 WASD 移动,角色自动瞄准射击,空格触发冲刺,E、R、Q 分别对应技能和修复。升级时游戏会暂停,从三项不重复强化中选择一项;死亡、胜利之后也能完整重开。
玩法上,我参考的是 Roguelite(肉鸽)/幸存者类游戏:角色持续移动和自动攻击,在一波波敌人中拾取经验、选择强化,最后进入首领战。这个半小时完成的 2D 网页 Demo,已经具备从开局、战斗、成长到结算的闭环。
我这次想验证的是:Astra 能不能接住前面已经做好的角色、模型和网页,在现有项目里继续完成游戏。
结果是:这条从图片到 3D 角色,再到 2D 网页游戏的链路跑通了。
如果你也想做,先拆成五个看得见的结果
一上来就让 AI “做一个完整游戏”,很容易得到一张漂亮页面,却不知道下一步该从哪里修改。
更稳的方式,是把任务拆成五个能直接验收的结果。每完成一项,再把文件交给下一步。
- GPT Image 2 以图生图:得到一张外观统一、身体完整的 Q 版角色图。
- Codex + Blender MCP / Python:得到一个还能继续修改的 3D 角色模型。
- 导出 GLB:得到一个网页项目能够读取的模型文件。
- Three.js:让角色能在电脑和手机浏览器中显示、旋转和缩放。
- TypeScript 游戏代码:在俯视角 2D 场景中,让角色能够战斗、升级、使用技能并完成一局游戏。

如果你从一张人物图开始,可以先把角色外观说清楚:头身比例是什么样,哪些配色和配饰必须保留,手脚有没有完整露出来。GPT Image 2 生成的 Q 版全身图,会成为后续建模时的视觉参考。
接下来,Codex 根据这张参考图在 Blender 里创建三维几何、拆分身体部件、设置材质,并导出 GLB。你可以把 GLB 理解成这条流程里的“3D 交接文件”:Blender 把角色装进去,Three.js 再通过 GLTFLoader 在网页中读取它。Three.js 官方文档也提供了加载 glTF/GLB 场景的标准方式。
模型负责“长什么样”,Three.js 负责“怎样显示”,TypeScript 游戏代码负责“怎样玩”。把这三层分开,后面改角色、场景或者玩法时,不需要全部推倒重来。
第一步:把原始形象整理成适合建模的 Q 版图
这是我交给 GPT Image 2 做以图生图的参考图。

原图的识别点很明确:宇航服、黑色面罩、绿色月牙,以及扶着头盔的姿势。但原图是坐姿,身体有遮挡,如果直接照着它做模型,腿部比例、手臂位置和背面结构都要靠猜。
为了减少这些看不见部分的猜测,我先补了一张干净的 Q 版全身图。

下面这段是项目里实际使用的原始提示词:
Transform the person or character in the reference image into a polished 3D chibi desktop companion.
Preserve their recognizable identity, hairstyle, face, outfit colors, and distinctive accessories.
Show one single full-body character, standing in a relaxed front three-quarter pose, with the entire head, hands, legs, and feet visible.
Use an expressive oversized head, compact cute proportions, a premium animated-film figurine look, soft studio lighting, and a clean silhouette.
Place the character centered on a plain light neutral background.
No text, no watermark, no frame, no extra people, no duplicated limbs, and no cropped body parts.这段默认会把人物调整成轻松站姿。如果你的原图动作本身就是角色标志,可以把第三句换成:
Preserve the exact arm pose, hand placement, body orientation, and stance of the reference image. Keep the entire head, hands, legs, and feet visible.这一环节不追求氛围,验收标准是一张 轮廓完整、配色清楚、手脚不被裁切、能交给下一步使用 的角色图。
第二步:让 Codex 在 Blender 里把图片做成立体角色
有了 Q 版角色图,我把下面这段交给 Codex:
根据附件角色图,在 Blender 中制作可编辑的 3D 模型。
先检查 Blender MCP 是否可用;可用时通过 MCP 操作,否则说明情况并使用本机 Blender Python。
优先匹配头身比例、标志性配饰、手臂姿势和配色。先给出同角度轮廓预览,再补细节。
头盔、躯干、手臂、大腿、小腿和靴子独立命名,保留后续动画所需的关节分组。
单张图看不到的背面可以合理补全,并说明推测部分。
交付 .blend、角色专用 .glb 和预览图,检查导出后的材质、朝向与尺寸。
这里我没有只要求一张渲染图,而是明确要 .blend、角色专用 .glb 和预览图。
原因很简单:一张渲染图只能看,.blend 才能继续改模型,.glb 才能交给网页。头盔、躯干、手臂和腿部分开命名,也是为了后面做动作时还能找到对应部件。
如果你不会手动操作 Blender,这一步也可以交给 Codex:Blender MCP 把 Codex 和 Blender 的 Python API 接起来,你用自然语言描述角色和交付要求,它在 Blender 中执行创建物体、调整尺寸、设置材质和导出文件等操作。
使用前记得给它一个独立项目目录。Blender 官方的 MCP 说明明确提醒:模型生成的代码会在 Blender 环境中执行。不要让这个工作区接触隐私和重要文件,同时保留可回退的 .blend 文件。
第三步:用 GLB 把模型送进浏览器
模型做好之后,我没有立即做游戏,而是先做了一个角色展厅。
使用现有 GLB 和 Three.js,制作可运行的网页角色展厅。
通过 GLTFLoader 加载模型,支持拖动旋转、缩放和重置视角,兼容电脑与手机。
模型正确居中落地,使用柔和灯光与接地阴影,避免发光过曝。
保留 UV、材质和动画分组,加入加载状态及失败提示。
已有项目就继续修改。实际运行并修复构建、资源加载问题,提供访问入口。
为什么不直接从 Blender 跳到游戏?
因为角色展厅是一个很便宜的验收点。只要模型能在手机和电脑上被加载、旋转、缩放,材质没有丢,方向和尺寸也正常,就说明“模型交给网页”这次交接成功了。
如果这一步都没跑通,直接叠加敌人、技能和碰撞,出了问题很难判断究竟是模型、加载器还是游戏逻辑造成的。
先验证最小交接,再增加复杂度,是这次能够在半小时内做完的关键。
第四步:让 Astra 在现有项目上补齐游戏闭环
角色已经能在网页中显示之后,我再让 Codex Astra 增加 /game 页面:
基于当前角色和 Three.js 项目,增加 /game 页面,制作俯视角 2D 月面 Roguelite,保留原来的 3D 角色展厅。
WASD 移动,自动瞄准射击,空格冲刺短暂无敌,Q 使用修复包;手机提供摇杆和按钮。
敌人包含近战追击、远程攻击、预警冲锋,以及约 150 秒出现的首领。
击杀掉经验,拾取升级,升级时暂停并提供三项不重复强化。
实现道具、伤害判定、攻击预警、暂停、死亡、胜利和完整重开。
先完成从开始到结算的可玩流程,将游戏规则与渲染分开,检查碰撞、暂停、升级和重开状态。这段提示词的重点落在最后两句:先完成从开始到结算的可玩流程,并把游戏规则与渲染分开。
如果只说“给我做一个肉鸽游戏”,模型很容易把时间花在开场动画、菜单和特效上,画面看着热闹,但没有死亡、胜利、暂停或重开。
我把验收条件写进提示词之后,Astra 要交付的就不再是一页会动的网页,而是一套能够完成一局的状态系统。
OpenAI 在 Astra 发布材料中也把游戏开发作为能力展示之一:模型不只需要写代码,还要理解空间、响应式界面、游戏手感,并在运行后继续发现问题。这次我自己的实测,感受最明显的正是“接着已有项目往下做”的能力。
第五步:玩法跑通后,再统一场景和技能
基础循环能玩之后,再替换占位美术:
保持现有玩法,替换占位美术,统一月面科幻风格。
用图像生成制作月壤贴图、可染色甲壳贴图,以及弹药/经验/命中特效图集。
用 Blender 重建有分节肢体的怪物、着陆平台、着陆器、信标和岩石。
把生成图片实际接入材质与精灵,保留 UV 和关节分组。
敌我特效颜色清晰,攻击预警始终可见,灯光柔和。
交付游戏实际使用的资源,明确哪些是二维图片、哪些是三维模型。角色动作和技能反馈,则单独用下一条处理:
改善当前宇航员的步态与技能视觉反馈。
保留正确的髋膝层级,按实际移动距离驱动交替迈步、屈膝和起停过渡,减少脚底滑动。
上半身保持瞄准,下半身跟随移动方向。
新增开局可用的技能:
E 月牙斩:扇形伤害,多层月光弧线和飞散粒子。
R 星环爆发:范围伤害与击退,清除附近敌方弹幕,三层扩散光环。
空格冲刺:保留短暂无敌,增加人物姿态残影。
技能必须有真实伤害、冷却和触控按钮,视觉范围与判定匹配。
控制亮度,检查暂停、升级、死亡和重开时的动画与特效回收。
这两条提示词刻意把“好看”和“能用”绑在一起。
技能不能只有光效,还要有真实伤害和冷却;按钮不能只在电脑上工作,还要出现在触屏端;动画也不能只管播放,还要在暂停、死亡和重开时正确回收。
这类约束看起来没有“电影级特效”那么抓眼球,却决定了成品究竟是演示视频,还是读者可以上手玩的东西。
半小时跑通的关键:每一步都有交付物
回头看这次过程,我没有找到什么“一句话生成游戏”的魔法。
半小时能跑通,是因为每一步都给了明确的交付物:
- 以图生图交付一张身体完整的角色图;
- Blender 交付可编辑工程和 GLB;
- Three.js 先交付能加载、旋转和缩放的展厅;
- 游戏阶段先交付从开始到结算的闭环;
- 美术阶段再替换占位资源,增加动作和技能反馈。
上一环节只要交出合格结果,下一环节就能接着做。哪一步有问题,也能回到那个交接点单独修。
测试 GPT-6 Astra 这类模型时,可以把重点放在长任务上:给它现有文件、可用工具和验收标准,看它能不能接着已有成果,把任务推进到可使用的结果。
你照着做之前,需要准备什么
想复用这套流程,需要先把下面几项环境准备好:
你需要准备:
- 一张主体清楚、识别特征明确的参考图;
- 能使用以图生图的工具;
- 已安装 Blender,并配置可用的 Blender MCP,或允许 Codex 使用 Blender Python;
- 一个能运行 Three.js 和 TypeScript 的网页项目;
- 能检查网页、运行构建并修改文件的 Codex 环境。
第一次尝试时,不建议直接照搬所有敌人和技能。先完成“一个角色、一种敌人、一种攻击、一次升级、一次结算”,确认电脑和手机都能操作,再继续加内容。
一条好提示词负责提出要求,一条能完成作品的工作流还要定义交付物、验收点和下一步怎样接住结果。
这是一次个人实验。它从一张参考图出发,先做出可编辑的 3D 模型和网页展厅,再在手机和电脑浏览器中完成了一局 2D 肉鸽游戏。这条制作链已经跑通。
上面的六组提示词都可以直接复制。建议不要一次性全部发送,按顺序执行,每一步确认交付物之后再进入下一步。
如果你也想把自己的头像、品牌角色或者原创 IP 做成小游戏,就从第一张完整的 Q 版全身图开始。
如果你也在折腾 AI 工具、Agent 和真实项目,欢迎关注「月明水清深」,后续实测我会继续拆。
—— 月明水清深