1. 三个模型同台做3D游戏,我为什么选了这个题目
最近圈子里讨论度比较高的几款模型,Step 5 Preview、DeepSeek V4 Pro、GLM5.3,各自都有不少拥趸。单独跑分、单独写算法题,大家可能都见过不少对比,但真正放到一个完整的、有交互、有渲染、有状态管理的项目里,差距往往不是靠几道LeetCode能看出来的。我这次干脆把三个模型拉到同一个任务上——从零做一个能跑起来的3D游戏,看看它们在真实工程场景下各自的表现。
选3D游戏作为测试载体,不是随便拍脑袋决定的。3D游戏这个场景天然具备几个特点:它同时涉及数学计算(向量、矩阵、碰撞检测)、图形渲染管线、状态机管理、输入事件处理、资源加载与释放,还要考虑性能。这些维度几乎覆盖了一个中大型前端/客户端项目的所有核心难点。一个模型能不能把3D游戏做出来,基本能反映它在复杂工程任务上的综合能力。
另外,这次测试还涉及一个绕不开的工具——WorkBuddy。热词里大量出现WorkBuddy相关的搜索,比如"workbuddy使用教程""workbuddy skill""workbuddy自定义指令""workbuddy跨对话记忆skill"等等,说明很多人正在把它当作日常开发的工作台。我在这次实测中,也把WorkBuddy作为统一的调度和协作环境来用,让三个模型在相同的工具链条件下完成任务,尽量保证对比的公平性。
这篇文章会完整还原我的测试设计、每个模型的实际产出、踩到的坑,以及我从这次对比中总结出的、关于"什么任务该交给哪个模型"的判断依据。如果你正在纠结选哪个模型做项目,或者想了解WorkBuddy在真实开发流程里怎么用,这篇应该能给你一些直接可参考的结论。
2. 测试任务的设计:一个3D游戏到底要拆成哪些模块
2.1 为什么不用"写个贪吃蛇"这种题目
很多人做模型对比,喜欢用"写一个贪吃蛇""实现一个待办列表"这种题目。这类任务的问题是太短、太封闭,模型只要把常见代码模式背出来就能拿高分,区分度很低。3D游戏不一样,它没有一个可以照抄的标准答案,必须真正理解需求、做技术选型、处理边界情况。
我最终定的任务是:做一个第一人称视角的3D迷宫探索游戏。玩家在迷宫中移动,收集散落的物品,找到出口。要求包含:基于WebGL的渲染、键盘鼠标控制、碰撞检测、小地图、计时与计分、以及一个简单的开始/结束界面。
这个任务规模适中,既不会大到模型完全跑偏,也不会小到看不出差异。更重要的是,它强制模型必须处理"渲染循环"和"状态同步"这两个3D游戏的核心问题。
2.2 任务拆解与验收标准
为了让三个模型的产出可对比,我把任务拆成了六个可独立验收的模块,每个模块都有明确的通过标准:
| 模块 | 功能要求 | 验收标准 |
|---|---|---|
| 场景搭建 | 生成迷宫墙体与地面 | 迷宫结构随机且连通,无穿模 |
| 相机控制 | 第一人称视角移动 | 鼠标转向平滑,键盘移动无卡顿 |
| 碰撞检测 | 玩家不能穿墙 | 贴墙移动不抖动,角落不卡死 |
| 交互逻辑 | 收集物品与到达出口 | 收集有反馈,出口触发结算 |
| UI系统 | 开始界面、HUD、结算界面 | 状态切换正确,数据实时更新 |
| 性能 | 稳定帧率 | 中端设备上不低于50FPS |
验收标准写清楚之后,我给三个模型的提示词是完全一致的,只说明需求和验收标准,不提供任何代码框架,让它们从零开始。这样才能看出模型在"从需求到实现"这个完整链路上的能力。
2.3 WorkBuddy在测试中扮演的角色
这次测试我用WorkBuddy作为统一的工作台。具体来说,三个模型都在WorkBuddy的环境里运行,通过它的自定义指令功能,我给每个模型设定了相同的项目规则,比如代码风格、文件组织方式、注释要求。热词里有人问"给workbuddy定几条规则,后续对所有任务都生效",这个功能在这次测试里帮了大忙——我只需要配置一次规则,三个模型都遵循同一套约束,排除了风格差异带来的干扰。
另外,WorkBuddy的跨对话记忆skill在这次多轮迭代中也很关键。3D游戏的开发不是一次生成就能完成的,需要多轮修改。有了跨对话记忆,模型在后续轮次里能记住之前的设计决策,不会每次修改都把之前的架构推翻重来。这一点在对比中体现得很明显——没有记忆能力的模型,改到第三轮就开始自相矛盾了。
3. Step 5 Preview的首轮表现:架构清晰但细节需要打磨
3.1 它给出的技术选型与理由
Step 5 Preview拿到需求后,第一件事是给出了技术选型说明。它选择了Three.js作为渲染引擎,理由是Three.js封装了WebGL的底层细节,能快速搭建3D场景,同时保留了足够的灵活性来处理自定义的碰撞检测逻辑。这个选择我认为是合理的——从零手写WebGL对模型来说风险太大,容易在着色器层面翻车。
在迷宫生成上,它选择了递归回溯算法(Recursive Backtracking)。这个算法生成的迷宫保证连通、没有死循环,而且实现起来不算复杂。Step 5 Preview在代码注释里解释了为什么不用Prim算法——因为递归回溯生成的迷宫路径更"蜿蜒",探索体验更好。这个细节说明它不只是把算法堆上去,而是考虑了游戏体验。
在状态管理上,它用了一个简单的状态机,把游戏分成"菜单""游戏中""结算"三个状态。这个设计很干净,避免了用一堆布尔标志位来管理游戏状态。实测下来,状态切换没有出现逻辑混乱。
3.2 首轮代码的实际运行效果
首轮生成的代码直接跑起来,整体是能玩的。迷宫正常生成,玩家可以移动,能收集物品,到达出口会弹出结算界面。但细节上有几个明显问题:
第一个问题是鼠标转向的灵敏度没有做归一化处理。不同刷新率的显示器上,转向速度不一样。在高刷屏上转得太快,在60Hz屏幕上又偏慢。这是一个典型的"没考虑设备差异"的问题,说明模型在写输入处理时,默认了固定的时间步长。
第二个问题是碰撞检测用的是简单的AABB(轴对齐包围盒),在迷宫这种全是直角墙体的场景里够用,但玩家贴墙移动时会有轻微抖动。原因是碰撞响应没有做位置修正,只是简单地阻止移动。这个抖动幅度不大,但仔细看能看出来。
第三个问题是性能。首轮代码里,每一帧都在重新计算迷宫的可见性,没有做任何剔除优化。在迷宫规模变大时,帧率会明显下降。我实测把迷宫从15x15扩大到31x31,帧率从60掉到了35左右。
3.3 迭代两轮之后的完成度
针对上面三个问题,我让Step 5 Preview迭代了两轮。第一轮修鼠标灵敏度和碰撞抖动,第二轮做性能优化。
鼠标灵敏度问题,它引入了基于deltaTime的转向计算,把转向速度乘以帧间隔时间,这样不同刷新率下体验就一致了。碰撞抖动问题,它在碰撞响应里加了位置回退,检测到碰撞后把玩家位置推回到碰撞前的合法位置,而不是简单地阻止移动。这两个修改都很到位。
性能优化这轮,它做了视锥剔除(Frustum Culling),只渲染相机视野内的墙体。同时把迷宫墙体做了合并,减少了draw call数量。优化后,31x31的迷宫帧率回到了55FPS以上。
两轮迭代后,Step 5 Preview的完成度是最高的。它的优势在于架构清晰、迭代方向准确,每次修改都能命中问题核心。缺点是一开始对设备差异和性能边界考虑不足,需要人工指出问题才会去优化。
4. DeepSeek V4 Pro的路线:数学功底扎实,但工程组织偏弱
4.1 它在碰撞检测上的处理明显更严谨
DeepSeek V4 Pro拿到同样的需求后,走了一条不太一样的路。它在碰撞检测上没有用简单的AABB,而是用了胶囊体(Capsule)碰撞。胶囊体碰撞在FPS游戏里是标准做法,因为它能更好地处理玩家贴墙和过拐角的情况,不会出现AABB那种"卡在墙角"的问题。
这个选择说明DeepSeek V4 Pro对3D游戏的实际需求理解得更深。胶囊体碰撞的实现涉及点到线段的最短距离计算,数学上比AABB复杂不少,但它一次就写对了。我检查了它的距离计算函数,向量运算和边界处理都没有问题。
在迷宫生成上,它用了另一种算法——随机化Kruskal算法。这个算法生成的迷宫和递归回溯不同,路径更"均匀",没有特别长的走廊。两种算法各有优劣,但从实现质量看,DeepSeek V4 Pro的代码更规范,边界条件处理得更完整。
4.2 代码组织上的短板暴露
DeepSeek V4 Pro的问题出在工程组织上。它把所有逻辑都塞进了一个大文件里,场景、相机、碰撞、UI、状态管理全混在一起,超过800行。虽然功能都能跑,但可维护性很差。我想改一个UI的样式,得在几百行里翻半天。
更麻烦的是,它没有做模块拆分,导致后续迭代时改动容易互相影响。我让它加一个"暂停"功能,结果它修改状态管理逻辑时,不小心影响了结算界面的触发条件,导致到达出口时有时候不弹结算。这个bug排查起来很费劲,因为所有逻辑都缠在一起。
另外,它在资源管理上也有疏漏。Three.js的几何体和材质在场景切换时没有释放,反复开始新游戏会导致内存持续增长。这个问题在短时间测试里看不出来,但连续玩十几局之后,浏览器内存占用明显上升。
4.3 数学强、工程弱的典型画像
综合来看,DeepSeek V4 Pro呈现出一个很典型的画像:底层算法和数学计算能力很强,碰撞检测、向量运算、迷宫生成这些"硬核"部分做得比另外两个模型都好;但在工程组织、模块拆分、资源管理这些"软件工程"层面,明显偏弱。
这个特点决定了它的适用场景。如果你的任务是算法密集、数学密集的,比如物理模拟、路径规划、几何计算,DeepSeek V4 Pro是很靠谱的选择。但如果是需要长期维护、多人协作的工程项目,它的代码组织方式会带来不少麻烦,需要人工做大量的重构。
我在WorkBuddy里给它加了一条自定义指令,要求"所有代码必须按功能拆分成独立模块,单文件不超过200行"。加上这条规则后,它第二轮的输出明显改善了,文件结构清晰了很多。这也说明,模型的能力边界有时候可以通过工具侧的约束来弥补。
5. GLM5.3的取舍:UI出彩,核心逻辑偏保守
5.1 界面和交互反馈是它的强项
GLM5.3在三个模型里,UI做得是最好的。它生成的开始界面有渐变背景、按钮有悬停动效、HUD上的计时器和计分板排版很舒服,结算界面还加了简单的动画过渡。这些细节另外两个模型都没怎么管,但GLM5.3主动做了。
交互反馈上也是。收集物品时,它加了一个缩放消失的动画和音效提示(用Web Audio API生成的简单音调);到达出口时,屏幕会有一个淡出效果再切到结算界面。这些体验上的打磨,说明GLM5.3在"用户感知"这个层面考虑得比较多。
我猜测这和它的训练侧重有关。GLM系列在中文语境下的对话和内容生成一直表现不错,对"什么让人感觉舒服"这件事可能有更好的直觉。放到游戏开发里,就体现为对UI和反馈的重视。
5.2 核心玩法逻辑上的保守选择
但GLM5.3在核心玩法逻辑上偏保守。它的碰撞检测用的是最简单的"网格占位"方式——把迷宫看成一个个格子,玩家移动前检查目标格子是不是墙。这种方式实现简单,在格子对齐的场景下够用,但玩家移动是连续的,不是一格一格跳的,所以贴墙移动时会有明显的"吸附感",不够顺滑。
迷宫生成它用了最基础的深度优先搜索,没有做随机化处理,导致每次生成的迷宫结构比较相似,重复可玩性不高。性能方面,它没有做任何剔除优化,但因为场景简单,帧率还能维持在可接受范围。
状态管理上,它用了一堆布尔变量(isPlaying、isPaused、isGameOver)来控制,没有用状态机。这种写法在状态少的时候没问题,但状态一多就容易出现互斥逻辑错误。我测试时发现,如果在结算界面快速点击"重新开始",有时候会同时触发两个状态,导致界面显示异常。
5.3 三轮迭代后的最终状态
GLM5.3我迭代了三轮。第一轮修碰撞的吸附感,第二轮优化迷宫生成的随机性,第三轮修状态管理的互斥问题。
碰撞吸附感这轮,它把网格占位改成了基于射线检测的方式,向前方发射射线判断是否撞墙,移动顺滑了很多。迷宫随机性这轮,它在DFS基础上加了随机权重,让生成结果更多样。状态管理这轮,它终于换成了状态机,互斥问题解决了。
三轮之后,GLM5.3的完成度追上来不少,UI依然是三个里最好的,核心逻辑也达到了可用水平。但整体迭代效率不如Step 5 Preview,每轮修改的精准度稍差一些,有时候改了一个问题会引入一个小新问题。
6. 三个模型的能力对比与选型建议
6.1 一张表看清各自的位置
把三个模型在六个模块上的表现整理成表格,差异就很直观了:
| 模块 | Step 5 Preview | DeepSeek V4 Pro | GLM5.3 |
|---|---|---|---|
| 场景搭建 | 良好,算法选择合理 | 优秀,算法实现严谨 | 一般,随机性不足 |
| 相机控制 | 良好,需修灵敏度 | 良好 | 良好 |
| 碰撞检测 | 一般,需优化 | 优秀,胶囊体方案 | 偏弱,需大改 |
| 交互逻辑 | 良好 | 良好 | 优秀,反馈丰富 |
| UI系统 | 一般 | 偏弱 | 优秀 |
| 性能 | 需优化后达标 | 良好 | 一般 |
| 代码组织 | 优秀 | 偏弱 | 中等 |
| 迭代效率 | 优秀 | 中等 | 中等 |
从这张表能看出来,三个模型没有一个是全面碾压的,各有各的强项和短板。选哪个,取决于你的任务更看重哪些维度。
6.2 不同任务场景下的选择逻辑
如果你做的是需要长期维护的工程项目,Step 5 Preview是首选。它的代码组织最规范,模块拆分清晰,迭代时不容易引入回归问题。虽然首轮可能需要你指出一些优化点,但它改得准、改得快。
如果你做的是算法密集、数学密集的任务,比如物理引擎、路径规划、几何处理,DeepSeek V4 Pro更合适。它的底层计算能力是三个里最强的,能一次写对复杂的数学逻辑。但你要接受它的代码组织需要人工重构,或者像我一样在WorkBuddy里加约束规则来强制它拆分模块。
如果你做的是面向用户的产品,UI和交互体验很重要,GLM5.3值得考虑。它在界面打磨和反馈设计上有明显优势,能让产品第一眼看起来更专业。但核心逻辑部分你需要多花点时间验收和迭代。
6.3 WorkBuddy在多模型协作中的实际价值
这次测试让我对WorkBuddy的价值有了更具体的认识。它不只是一个"跑模型的工具",更像是一个统一的工作台,让多个模型在相同的规则和记忆条件下工作。
具体来说,三个地方帮了大忙。一是自定义指令,我可以给每个模型设定统一的代码规范,排除风格差异的干扰。二是跨对话记忆,多轮迭代时模型能记住之前的设计决策,不会每次推翻重来。三是工作台的统一管理,三个模型的产出都在同一个环境里,对比和切换很方便。
热词里有人问"workbuddy怎么更改系统缓存目录""workbuddy win7能不能用""docker安装workbuddy"这些问题,说明大家在使用层面还有不少疑问。我的建议是,先把基础的自定义指令和记忆功能用起来,这两个功能对开发效率的提升最直接。至于缓存目录、系统兼容性这些,属于环境配置问题,按官方文档走就行,不用太纠结。
7. 实测中踩到的坑和几条实用经验
7.1 提示词里必须写清楚验收标准
这次测试最大的教训是:提示词里一定要写清楚验收标准。我第一轮给三个模型的提示词只说了"做一个3D迷宫游戏",结果三个模型的产出差异很大,有的连基本功能都不全。第二轮我把六个模块的验收标准写进去之后,三个模型的产出质量都明显提升。
模型不是不会做,而是不知道你要什么标准。你把标准写清楚,它就能往那个方向努力。这一点在WorkBuddy里尤其重要,因为它的自定义指令可以复用,你写一次标准,后续所有任务都能用。
7.2 多轮迭代时不要让模型"自由发挥"
3D游戏这种复杂任务,一次生成不可能完美,必须多轮迭代。但迭代时有个坑:如果你只说"优化一下性能",模型可能会大改架构,把之前能跑的功能改坏。我的做法是,每次迭代只针对一个具体问题,明确说"只改碰撞检测,不要动其他模块"。这样能把改动范围控制住,避免回归问题。
WorkBuddy的跨对话记忆在这里也有帮助。模型记得之前的架构决策,就不会轻易推翻重来。但即便如此,明确限定改动范围仍然是必要的。
7.3 性能问题要尽早暴露
三个模型在首轮都没有主动做性能优化,都是等我指出问题才去改。这说明模型在生成代码时,默认场景规模不大,不会主动考虑性能边界。
我的经验是,在提示词里就直接写明性能要求,比如"迷宫规模最大31x31,中端设备帧率不低于50FPS"。把性能作为验收标准的一部分,模型就会在生成时考虑剔除、合并等优化手段。等到跑起来发现卡顿再去优化,往往要改的地方更多。
7.4 资源释放是最容易被忽略的环节
三个模型里,只有Step 5 Preview在迭代后主动加了资源释放逻辑。另外两个模型都没有处理Three.js几何体和材质的释放,反复开始新游戏会导致内存增长。
这个问题在短时间测试里不明显,但真实产品里是致命的。如果你用模型生成3D项目,一定要在验收标准里加上"资源释放"这一条,或者在代码审查时专门检查dispose调用。模型不会主动想到这一点,因为它看不到长时间运行后的内存曲线。
8. 关于模型选型,我现在的判断
做完这次实测,我对三个模型的定位更清楚了。Step 5 Preview是"工程型选手",架构清晰、迭代精准,适合需要长期维护的项目。DeepSeek V4 Pro是"算法型选手",数学和底层计算强,适合技术密集型的任务。GLM5.3是"产品型选手",UI和交互体验好,适合面向用户的产品开发。
但我也要说,这三个模型没有绝对的优劣,只有适不适合。而且模型的能力边界不是固定的,通过WorkBuddy这样的工具侧约束,可以弥补不少短板。比如给DeepSeek V4 Pro加一条"单文件不超过200行"的规则,它的代码组织问题就改善了很多。
最后分享一个我自己的做法:不要只用一个模型。复杂项目里,我经常让Step 5 Preview搭架构,让DeepSeek V4 Pro写核心算法,让GLM5.3做UI。三个模型各司其职,产出质量比单用一个模型高不少。WorkBuddy的统一工作台让这种多模型协作变得很顺手,这也是我觉得它比单纯"跑模型"更有价值的地方。
如果你也在做类似的模型对比,建议把验收标准写细、把迭代范围控住、把性能要求前置。这三点做到了,对比结果才有参考价值,不然很容易被首轮的表面差异误导。