1. 三款模型同台竞技:这个对比测试到底在测什么
三个大模型,同一个任务——从零做一个能跑的3D游戏。听起来像是评测机构的标准化跑分,但实际动手之后你会发现,这件事远比跑个benchmark复杂得多。Step 5 Preview、DeepSeek V4 Pro、GLM5.3,这三个名字最近在开发者圈子里被反复提及,各自都有明确的定位和拥趸。但把它们放在同一个3D游戏开发任务里横向对比,考验的就不只是代码生成能力了。
我拿到这个对比任务的时候,第一反应是:3D游戏开发这个场景选得很有意思。它不像写个排序算法或者CRUD接口那样有标准答案,3D游戏涉及渲染管线、场景图管理、物理碰撞、输入处理、资源加载、帧率控制等多个子系统,任何一个环节掉链子,最终跑起来的效果就是“能看但不能玩”或者“能玩但卡成PPT”。这恰好能暴露模型在长链条任务规划、跨文件代码一致性、图形学领域知识这几个维度的真实水平。
先说清楚这三个模型各自的特点。Step 5 Preview是阶跃星辰最新的预览版本,主打代码生成和复杂推理;DeepSeek V4 Pro是深度求索的旗舰模型,在数学和逻辑推理上一向口碑不错;GLM5.3是智谱的最新迭代,在中文理解和工程化落地方面积累深厚。三者都是当前国内第一梯队的选手,但风格差异明显。
我设计的测试任务是:用Three.js做一个第一人称视角的3D迷宫探索游戏,要求包含随机迷宫生成、WASD移动、鼠标视角控制、碰撞检测、小地图、计时器和通关判定。这个任务的好处是——它足够复杂,能拉开差距;又足够聚焦,不会因为需求模糊导致结果不可比。所有模型使用相同的提示词,分三个阶段交互:先出架构方案,再生成核心代码,最后根据运行报错进行修复。
提示:做模型对比测试时,提示词的一致性比提示词的“精妙程度”更重要。我见过太多对比文章,给A模型精心设计的提示词,给B模型随便扔一句话,然后得出结论说A比B强——这种测试没有参考价值。
为什么选Three.js而不是Unity或Godot?因为Three.js是纯代码驱动的,模型生成的每一行JavaScript都能直接对应到最终效果,没有编辑器操作的黑盒。Unity虽然更主流,但模型没法直接操作编辑器界面,生成的C#脚本还得手动挂载、配置参数,对比维度就不纯粹了。Three.js的另一个好处是浏览器直接跑,省去了编译和部署环节,测试效率高很多。
这个测试适合谁来参考?如果你正在选型代码生成工具,或者想了解当前大模型在3D图形编程上的真实能力边界,这篇实测记录应该能给你一些直观的参考。如果你只是好奇“AI能不能做游戏”,那结论可能会让你意外——能,但离“做好”还有一段距离。
2. 三阶段实测过程全记录
2.1 第一阶段:架构方案生成对比
第一阶段我让三个模型分别给出项目的架构设计。提示词是:“我要用Three.js做一个第一人称3D迷宫游戏,包含随机迷宫生成、WASD移动、鼠标视角、碰撞检测、小地图、计时器和通关判定。请给出完整的文件结构和模块划分方案。”
Step 5 Preview的回复最详细。它给出了一个六文件结构:main.js负责初始化和主循环,mazeGenerator.js用递归回溯算法生成迷宫,playerController.js处理输入和移动,collisionSystem.js做AABB碰撞检测,minimap.js用Canvas 2D绘制俯视图,gameState.js管理计时和通关逻辑。每个文件的职责边界清晰,模块间的依赖关系也标注了。特别值得一提的是,它主动提到了“用requestAnimationFrame驱动主循环,用deltaTime保证不同帧率下的移动速度一致”——这个细节说明它理解游戏循环的本质。
DeepSeek V4 Pro的方案更偏向“一步到位”。它给了一个单文件方案,所有逻辑塞在一个HTML文件里,大约800行代码。好处是复制粘贴就能跑,坏处是后续修改和扩展很麻烦。它在架构说明里提到“为了降低部署复杂度,采用单文件内联方式”,这个取舍有道理,但对于一个需要持续迭代的游戏项目来说,单文件结构很快就会变成维护噩梦。不过它在物理碰撞部分给出了具体的数学公式,包括射线与AABB求交的推导过程,这部分比另外两家更扎实。
GLM5.3的方案介于两者之间,给了四个文件:index.html、game.js、maze.js、utils.js。它的特色是在utils.js里封装了一个事件总线,用来解耦输入系统和游戏逻辑。这个设计模式在中小型游戏里确实好用,但GLM5.3没有进一步解释为什么需要事件总线,只是说“便于扩展”。从架构完整性来看,Step 5 Preview > GLM5.3 > DeepSeek V4 Pro。
| 对比维度 | Step 5 Preview | DeepSeek V4 Pro | GLM5.3 |
|---|---|---|---|
| 文件结构 | 6文件,职责清晰 | 单文件,约800行 | 4文件,含事件总线 |
| 模块解耦 | 高 | 低 | 中高 |
| 游戏循环设计 | 明确提到deltaTime | 未特别说明 | 提到固定时间步 |
| 碰撞检测方案 | AABB | 射线求交+AABB | AABB |
| 扩展性评估 | 优 | 差 | 良 |
2.2 第二阶段:核心代码生成质量
第二阶段是重头戏——让三个模型基于各自的架构方案生成完整代码。我逐个在本地环境跑了一遍,记录下实际运行效果。
Step 5 Preview生成的代码一次通过率最高。迷宫生成用的是递归回溯,代码逻辑正确,生成的迷宫没有死循环和孤立区域。玩家控制器里对键盘事件的处理很规范,用了keydown和keyup配合状态对象,而不是直接在事件回调里改位置——这个细节很关键,前者能保证按住W键持续移动,后者会导致按键重复触发。碰撞检测部分,它把玩家简化为一个圆柱体,用圆形与网格单元的相交测试来判断碰撞,虽然不是最精确的方案,但对于迷宫游戏来说够用了,而且计算量小。
不过Step 5 Preview有一个明显问题:小地图的坐标映射搞反了。它把世界坐标的X轴映射到了Canvas的Y轴,导致小地图上的方向跟实际移动方向不一致。这个bug我在第三阶段反馈后才修复。
DeepSeek V4 Pro的代码在数学上最严谨。它的碰撞检测用了射线投射,从玩家位置向移动方向发射一条射线,检测与墙壁的交点,然后根据交点距离决定是否允许移动。这个方案比AABB更精确,能处理斜向移动时的墙角碰撞。但问题在于——它生成的射线检测代码里,射线方向向量没有归一化,导致移动速度在不同方向上不一致。斜着走比直着走快,这在游戏里是致命的。我检查了代码,发现它在计算方向向量后直接用了,没有调用.normalize()。
GLM5.3的代码最“稳”。没有特别惊艳的设计,但每个模块都能正常工作。它的迷宫生成用了Prim算法,生成的迷宫通路比较宽敞,走起来舒服。小地图绘制用了离屏Canvas做缓存,每帧只重绘变化的部分,性能比另外两家好。但它的鼠标视角控制有个小毛病:没有做俯仰角限制,鼠标一直往上推,视角会翻转。这个bug在FPS游戏里很常见,修复也简单,加个Math.max和Math.min夹紧就行。
注意:模型生成的3D代码,最常见的三类bug是——向量未归一化导致速度不一致、坐标系映射错误导致方向反了、角度未夹紧导致视角翻转。这三个坑我在不同模型上都踩到过,建议在代码审查时优先检查这几处。
2.3 第三阶段:报错修复与迭代能力
第三阶段我模拟真实开发场景,把运行时报错和异常表现反馈给模型,看它们能不能准确定位并修复。
Step 5 Preview的修复能力最强。我把小地图方向反了的问题描述给它,它立刻定位到minimap.js里的坐标映射函数,解释说“世界坐标的X轴对应Canvas的X轴,Z轴对应Y轴,我写反了”,然后给出了修正后的代码。更关键的是,它还主动检查了其他地方的坐标映射,发现玩家位置指示器的旋转角度也错了,一并修了。这种“举一反三”的能力在调试阶段非常省心。
DeepSeek V4 Pro在修复射线未归一化的问题时,第一次改错了地方。它把归一化加在了碰撞检测函数里,但移动速度的计算在另一个函数中,导致问题依旧。我第二次反馈后,它才找到正确的修改位置。这说明它在跨文件追踪数据流方面稍弱,需要更明确的错误定位信息。
GLM5.3修复俯仰角限制只花了一轮。它直接在鼠标移动事件里加了角度夹紧逻辑,代码简洁有效。但当我反馈“小地图性能可以优化”时,它给出的方案是“降低小地图刷新频率到每秒10次”,这个方案能用但不够优雅——更好的做法是只在玩家移动时重绘,静止时不重绘。GLM5.3没有主动想到这个层面。
| 修复场景 | Step 5 Preview | DeepSeek V4 Pro | GLM5.3 |
|---|---|---|---|
| 坐标映射错误 | 一轮修复,主动排查关联问题 | 未测试 | 未测试 |
| 向量归一化 | 未测试 | 两轮修复,首次定位错误 | 未测试 |
| 俯仰角限制 | 未测试 | 未测试 | 一轮修复 |
| 性能优化建议 | 主动提出离屏Canvas方案 | 未测试 | 给出降频方案,不够优雅 |
3. 三款模型的能力边界与选型建议
3.1 各自擅长的场景
跑完整个测试,三个模型的画像已经比较清晰了。
Step 5 Preview适合复杂项目的从零搭建。它的架构设计能力明显高出一档,能把一个模糊的需求拆解成职责清晰的模块,并且在编码阶段保持跨文件的一致性。如果你要做一个中等规模以上的项目,需要模型帮你规划整体结构,Step 5 Preview是首选。它的代码风格也最接近有经验的开发者——变量命名规范、注释到位、错误处理完善。
DeepSeek V4 Pro适合算法密集型的模块开发。它的数学功底在三个模型里最强,碰撞检测的射线求交推导、迷宫生成的递归回溯实现,都写得严谨准确。但它在工程化方面偏弱,单文件方案虽然跑得快,但不利于维护。如果你的任务核心是某个具体算法,比如寻路、物理模拟、 procedural generation,DeepSeek V4 Pro能给出质量最高的代码。
GLM5.3适合快速原型验证。它的代码最“稳”,很少出现跑不起来的情况,虽然缺少惊艳的设计,但胜在可靠。对于需要快速验证想法、做demo的场景,GLM5.3的产出效率最高。它的中文注释也最自然,适合中文团队协作。
3.2 共同的短板
三个模型在3D游戏开发上有一个共同的短板:对性能优化的理解停留在表面。它们都能写出功能正确的代码,但很少主动考虑渲染批次合并、几何体实例化、纹理压缩这些进阶优化手段。Step 5 Preview提到了离屏Canvas缓存小地图,这已经是三个模型里最深入的性能优化了。如果你要做的是一个商业级的3D应用,模型生成的代码只能作为起点,后续的性能调优还得靠人工。
另一个共同问题是对边界情况的处理不够全面。比如窗口resize时的相机宽高比更新、页面失焦时暂停游戏循环、移动端触摸事件的支持,这些在实际项目中必须考虑的问题,三个模型都没有主动提及。你需要在使用时自己补全这些逻辑。
实操心得:用模型生成3D游戏代码时,建议在提示词里明确加上“考虑窗口resize、页面失焦暂停、移动端触摸支持”这几个要求。不加的话,它们大概率会忽略。
3.3 关于WorkBuddy的配合使用
这次测试过程中,我用WorkBuddy做了一些辅助工作。WorkBuddy的工作台模式很适合管理这种多模型对比的任务——我可以把三个模型的对话分别放在不同的工作区里,互不干扰。它的跨对话记忆功能在第三阶段修复时特别有用,我不需要反复粘贴之前的代码,WorkBuddy能自动关联上下文。
WorkBuddy的自定义指令功能也值得一说。我给它定了一条规则:“所有代码生成任务,优先考虑模块解耦和可测试性”,后续所有对话都自动遵循这个规则,省去了每次重复说明的麻烦。对于需要长期维护的项目,这个功能能显著提升一致性。
不过WorkBuddy的系统缓存目录默认在C盘,如果你跟我一样C盘空间紧张,建议在设置里改到D盘。具体路径在“设置-高级-缓存管理”里,改完之后重启WorkBuddy生效。另外它的安全审核机制比较严格,生成涉及网络请求的代码时会触发审核提示,这是正常现象,确认代码用途合规即可继续。
4. 常见问题与排查技巧实录
4.1 模型生成3D代码的高频问题速查
| 问题现象 | 可能原因 | 排查方法 | 修复方案 |
|---|---|---|---|
| 斜向移动速度异常 | 方向向量未归一化 | 检查移动计算前是否调用normalize | 对方向向量做归一化处理 |
| 小地图方向与实际相反 | 坐标轴映射错误 | 对比世界坐标与Canvas坐标的对应关系 | 交换X/Z轴到Canvas X/Y轴的映射 |
| 鼠标上推视角翻转 | 俯仰角未夹紧 | 检查pitch角是否限制在±90度内 | 用Math.max/min夹紧角度 |
| 按住按键不持续移动 | 在keydown回调里直接改位置 | 检查是否用状态对象记录按键 | 用keydown/keyup维护按键状态 |
| 帧率波动时移动速度不一致 | 未使用deltaTime | 检查移动量是否乘以帧间隔 | 用clock.getDelta()获取帧间隔 |
| 迷宫出现孤立区域 | 生成算法有缺陷 | 用洪水填充验证连通性 | 换用递归回溯或Prim算法 |
4.2 提示词工程的实际技巧
跟这三个模型打交道的过程中,我总结了几条实用的提示词技巧。
第一条:明确技术栈版本。Three.js的API在不同版本间有破坏性变更,比如Geometry在r125之后被移除,改用BufferGeometry。如果你不说版本,模型可能生成过时的API调用。我的做法是在提示词开头就写“使用Three.js r160版本”。
第二条:分阶段交互比一次性生成效果好。一次性让模型生成完整游戏代码,它容易在细节上偷懒。分三个阶段——先架构、再核心模块、最后整合——每个阶段聚焦一个目标,产出质量明显更高。Step 5 Preview在分阶段模式下表现尤其好,因为它的上下文保持能力最强。
第三条:报错信息要具体。不要只说“跑不起来”,要给出控制台报错、异常表现、复现步骤。模型不是调试器,它需要足够的信息才能定位问题。我通常会把Chrome DevTools的报错截图转成文字贴给模型,修复准确率能提升不少。
4.3 本地环境搭建的注意事项
Three.js项目虽然浏览器直接跑,但有几个环境细节容易踩坑。
如果你用ES Module方式引入Three.js,需要通过HTTP服务访问,直接双击HTML文件会触发CORS错误。最简单的做法是在项目目录下跑python -m http.server 8000,然后浏览器访问localhost:8000。Node环境的话,npx serve也行。
纹理加载是另一个坑。模型生成的代码里,纹理路径经常写的是相对路径,但实际文件可能不在对应位置。建议在代码里加一个纹理加载失败的回调,打印出具体是哪个文件没找到,方便排查。
还有一点:模型生成的代码默认假设屏幕是桌面端宽屏。如果你在移动端浏览器打开,可能会发现控制台报“touch事件未处理”的警告。这不是bug,但会影响移动端体验。需要自己补上触摸事件监听。
5. 从实测结果看3D游戏开发的AI辅助边界
5.1 模型能做什么,不能做什么
把三个模型的表现放在一起看,AI在3D游戏开发中的能力边界已经比较清晰了。
能做的:生成标准化的游戏循环骨架、实现常见的算法(迷宫生成、碰撞检测、寻路)、编写输入处理和状态管理代码、根据报错定位问题并给出修复方案。这些任务占了一个3D游戏项目60%到70%的代码量,模型能显著缩短开发时间。
不能做的:性能调优的深度优化、美术资源的创建和处理、游戏手感的调校、复杂物理模拟的精确参数调整。这些任务要么需要人类的美学判断,要么需要针对具体硬件的反复测试,模型目前还替代不了。
做得不够好的:边界情况的全面考虑、跨模块的数据流追踪、对“代码可维护性”的主动追求。模型倾向于生成“能跑就行”的代码,如果你不明确要求,它不会主动做模块解耦、错误处理、单元测试这些工程化的工作。
5.2 实际项目中的协作模式
基于这次测试,我目前采用的协作模式是:模型出草稿,人工做精修。
具体来说,新项目启动时,让Step 5 Preview出架构方案和核心模块代码,我审查后调整模块划分。算法密集的部分,比如迷宫生成和碰撞检测,让DeepSeek V4 Pro单独生成,我验证数学正确性。快速原型阶段用GLM5.3,因为它的代码最稳,很少需要调试。
代码审查的重点放在三个地方:向量运算是否正确、坐标系映射是否一致、边界情况是否处理。这三处是模型最容易出错的地方,也是人工审查价值最大的地方。
5.3 后续可以扩展的方向
这次测试只覆盖了Three.js这一个技术栈。如果你用的是Babylon.js、PlayCanvas或者原生WebGL,模型的表现可能会有差异。Babylon.js的API更面向对象,模型生成代码的准确率可能会更高;原生WebGL的样板代码多,模型容易在细节上出错。
另一个值得探索的方向是让模型生成单元测试。3D游戏的逻辑部分——迷宫生成、碰撞检测、计分规则——都是可以单元测试的。如果让模型同时生成实现代码和测试代码,能大幅提升代码的可靠性。我试过让Step 5 Preview给迷宫生成函数写测试,它生成了包括连通性验证、边界检查、性能基准在内的完整测试用例,质量超出预期。
最后分享一个我在这次测试里学到的小技巧:当你觉得模型生成的代码“哪里不对但又说不上来”的时候,把代码贴回给模型,让它“以代码审查者的身份找出潜在问题”。三个模型在这种模式下都能发现一些自己之前忽略的bug。Step 5 Preview甚至能指出“这个变量名有歧义,建议重命名”这种代码风格层面的问题。这个自审查的步骤,我現在已经加到了标准工作流里。