1. 三个模型同台做3D游戏,我为什么选这个题
最近圈子里聊得最多的,除了各家模型版本号的军备竞赛,就是"到底哪个模型能真正把一个大活儿从头干到尾"。Step 5 Preview、DeepSeek V4 Pro、GLM5.3 这三个名字被反复摆在一起比较,但大多数对比都停留在"写个贪吃蛇""做个待办清单"这种量级。说实话,这类任务看不出模型之间的真实差距——代码量小、逻辑线性、没有跨文件的架构约束,随便一个像样的模型都能糊弄过去。
所以我决定把难度拉满:让三个模型各自独立完成一个可运行的3D游戏。不是那种用现成引擎拖拽出来的Demo,而是从零开始、包含场景搭建、相机控制、物理碰撞、状态管理、UI交互的完整小项目。这个量级的任务会逼出模型在长上下文保持、跨文件一致性、数学计算准确性、以及"知道自己写错了要回头改"这几个维度的真实水平。
这篇文章不是那种"跑个分就下结论"的评测。我会把每个模型在实操过程中暴露的具体问题、我踩过的坑、以及最后怎么绕过去的完整链路都摊开讲。如果你正在纠结用哪个模型接手中等复杂度的开发任务,或者你本身就是做3D交互开发的,想看看这些模型能不能真正帮上忙,那这篇内容应该能给你省下不少试错时间。
需要先说明一点:我用的三个模型都是通过统一的对话式开发环境调用的,这样能排除工具链差异带来的干扰,把变量控制在模型本身。测试机器是一台常规配置的开发本,没有独显加速,所有渲染都走软件光栅化,这也意味着性能瓶颈会更快暴露出来。
2. 任务拆解:一个"最小但完整"的3D游戏该包含什么
2.1 我定的验收标准
在动手之前,我先给自己定了一套硬性验收标准,避免最后变成"看起来能跑就行"的糊弄式评测。这套标准也是我平时接外包时判断一个原型能不能交付的底线:
- 场景必须包含至少8个独立3D物体,且物体之间有空间层次关系,不能全堆在一个平面上
- 第一人称或第三人称相机控制,支持键盘移动和鼠标视角旋转
- 碰撞检测,玩家不能穿墙,碰到障碍物要有反馈
- 游戏状态机,至少包含"进行中""暂停""结束"三种状态,状态切换要有UI响应
- 计分或计时系统,并且数据要能持久化到本地
- 代码结构清晰,至少分成场景、控制、逻辑三个模块,不能全塞一个文件
这六条看起来不复杂,但真正让模型一次性全做对,难度比想象中大得多。尤其是碰撞检测和状态机这两块,涉及大量边界条件,模型很容易在"看起来对"和"实际能跑"之间翻车。
2.2 为什么不用现成引擎
有人可能会问:为什么不用Three.js或者Babylon.js这种现成引擎?直接用引擎的物理系统和相机控制器,模型只需要写业务逻辑,不是更公平吗?
我的考虑恰恰相反。用现成引擎确实能降低难度,但也会掩盖模型在底层数学和架构设计上的真实能力。3D游戏的核心难点从来不是调API,而是向量运算、矩阵变换、碰撞检测的几何判断这些硬骨头。如果模型连自己实现一个简单的AABB碰撞都写不利索,那它在更复杂的工程场景里大概率也靠不住。
所以我要求三个模型都用原生WebGL或者Canvas 2D伪3D的方式实现,不依赖任何第三方3D库。这样每个模型的数学功底和代码组织能力都会被完整暴露出来。
2.3 统一的提示词设计
为了保证公平,我给三个模型喂的提示词完全一致。提示词分三轮:
第一轮是架构设计,要求模型先输出模块划分和核心数据结构,不写具体代码。这一轮看的是模型的顶层设计能力。
第二轮是核心实现,要求模型按照自己设计的架构,把场景渲染、相机控制、碰撞检测三个模块写出来。这一轮看的是代码质量和数学准确性。
第三轮是联调修复,我会把运行时报错和视觉异常反馈给模型,看它能不能定位问题并给出修复方案。这一轮看的是调试能力和上下文保持能力。
三轮下来,模型之间的差距会非常明显。有的模型第一轮设计得很漂亮,第二轮就崩了;有的模型第一轮平平无奇,但三轮下来稳扎稳打,最后反而跑得最顺。
3. Step 5 Preview 的实操表现:稳,但有脾气
3.1 第一轮架构设计:模块划分很干净
Step 5 Preview 在第一轮给出的架构方案是我三个里面最满意的。它把项目分成了四个模块:
SceneManager:负责场景图的构建和物体的增删改查CameraController:处理相机的位置、朝向、投影矩阵PhysicsEngine:只做AABB碰撞检测和简单的重力模拟GameLoop:主循环,负责状态机和帧同步
这个划分的妙处在于职责边界非常清晰。比如它明确说了PhysicsEngine不负责渲染,只输出碰撞结果;CameraController不直接操作场景物体,只维护相机自身的变换矩阵。这种解耦意识在很多模型身上是看不到的,大部分模型会把渲染和逻辑混在一起写。
它还主动提了一个细节:用四元数而不是欧拉角来表示相机旋转,理由是避免万向节死锁。这个点让我有点意外,因为万向节死锁是3D开发里的经典坑,很多人类开发者都会忽略,模型能主动提出来说明它对3D数学的理解是到位的。
3.2 第二轮核心实现:数学准确,但有个隐蔽bug
进入代码实现阶段,Step 5 Preview 的表现整体扎实。透视投影矩阵、视图矩阵、向量叉乘这些容易写错的地方,它都写对了。我特意检查了它的矩阵乘法顺序,没有出现行主序和列主序搞混的低级错误。
但它在一个地方翻了车:碰撞检测的边界判断。它写的AABB检测逻辑是这样的:
function checkCollision(a, b) { return (a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y); }这段代码在二维平面上是对的,但它忘了这是3D场景,Z轴完全没有参与判断。结果就是玩家在Z轴方向上可以随意穿过墙壁。这个bug很隐蔽,因为从代码逻辑上看它"很合理",只有实际跑起来才会发现穿墙。
我把这个问题反馈回去之后,Step 5 Preview 很快就定位到了,并且给出了修正版本,把Z轴的判断补上了。它还主动加了一句注释说明"3D场景下三个轴都要参与碰撞判断",这个自我修正的态度是加分的。
3.3 第三轮联调:上下文保持能力不错
第三轮我连续反馈了三个问题:一个是相机旋转时画面抖动,一个是物体渲染顺序错乱导致遮挡关系不对,还有一个是暂停状态下游戏循环没有真正停止。
Step 5 Preview 在处理这三个问题时,没有丢失之前的上下文。它记得自己用的是四元数相机,所以在修复抖动问题时,它检查的是四元数归一化的问题,而不是去改欧拉角。它也记得场景是用画家算法排序的,所以修复遮挡问题时调整的是排序键值。
这一点很关键。很多模型在多轮对话后会"忘记"自己之前的设计决策,然后给出和现有架构冲突的修复方案,导致越修越乱。Step 5 Preview 在这方面的表现是三个模型里最稳的。
3.4 我踩到的坑:它对性能优化过于保守
Step 5 Preview 有一个让我又爱又恨的特点:它写的代码非常保守,几乎不做任何性能优化。比如它的渲染循环里,每一帧都在重新计算所有物体的变换矩阵,哪怕物体根本没动。我问他为什么不加脏标记,它说"为了保证正确性,优先选择每次都重算"。
这个选择在正确性上没问题,但在实际跑起来之后,帧率明显偏低。我手动加了脏标记之后,帧率大概提升了40%。所以用这个模型的时候,你得自己补上性能优化这一环,不能指望它主动帮你做。
4. DeepSeek V4 Pro 的实操表现:快,但需要盯紧
4.1 第一轮架构设计:激进但不够细
DeepSeek V4 Pro 的架构方案明显更"激进"。它提出用一个统一的Entity-Component-System(ECS)架构来组织所有物体,而不是Step 5 Preview那种传统的模块划分。
ECS的好处是扩展性强,加新功能只需要加Component,不用改核心逻辑。但问题是,对于一个只有8个物体的小项目来说,ECS有点杀鸡用牛刀。而且DeepSeek V4 Pro在描述ECS的时候,没有说清楚Component之间的通信机制,只说了"通过System来协调",具体怎么协调、数据怎么流转,都是模糊的。
这导致我在第二轮实现的时候,不得不反复追问它"这个Component的数据谁来更新""System的执行顺序是什么"。它每次都能给出答案,但这些答案之间有时候是矛盾的,说明它在第一轮设计时并没有想清楚整个数据流。
4.2 第二轮核心实现:代码生成速度最快
进入写代码阶段,DeepSeek V4 Pro 的速度是三个模型里最快的。同样的任务量,它大概比Step 5 Preview快30%左右。而且它的代码风格很统一,变量命名规范,注释也写得比较清楚。
但快是有代价的。它的代码里出现了几个低级数学错误:
- 向量归一化的时候忘了判断零向量,导致除以零产生NaN
- 相机的前向量和上向量叉乘顺序写反了,导致视角旋转方向相反
- 重力加速度的积分用的是显式欧拉,但没有做时间步长限制,帧率波动时物理表现不稳定
这几个错误单独看都不致命,但凑在一起就会让整个系统变得很脆弱。我花了不少时间逐个定位和修复。好消息是,每次我把错误指出来,DeepSeek V4 Pro 都能很快理解并给出正确的修复方案,它的纠错响应速度是三个模型里最快的。
4.3 第三轮联调:上下文丢失比较严重
DeepSeek V4 Pro 在第三轮暴露了一个明显问题:多轮对话后上下文丢失。我在修复完数学错误之后,回头问它一个关于ECS架构的问题,它给出的回答明显是基于"传统模块化架构"的,完全忘了自己之前设计的是ECS。
这个问题在长任务里很致命。因为一个3D游戏项目往往需要几十轮对话才能完成,如果模型在第20轮就忘了第5轮的设计决策,后面的修复就会变成"打补丁摞补丁",最后代码会变得不可维护。
我的应对策略是:每轮对话都手动把关键设计决策复述一遍,相当于给模型做"上下文锚定"。这样做确实有效,但增加了不少沟通成本。
4.4 一个意外的亮点:它的调试建议很实用
虽然DeepSeek V4 Pro在架构保持上不如Step 5 Preview,但它在调试建议上给了我惊喜。当我反馈"画面抖动"时,它不仅给出了修复方案,还主动建议我加一个帧时间统计面板,把每帧的渲染耗时、逻辑耗时、物理耗时分别打出来。
这个建议非常实用。我加上之后立刻发现,抖动的主要来源不是相机,而是物理计算偶尔会超过16毫秒,导致帧率不稳。如果没有这个统计面板,我可能会在相机代码里白找半天。这种"教你如何定位问题"的能力,比直接给答案更有价值。
5. GLM5.3 的实操表现:均衡,但缺乏惊喜
5.1 第一轮架构设计:中规中矩
GLM5.3 的架构方案是三个里面最"标准"的。它给出的模块划分和Step 5 Preview类似,但细节上更粗糙一些。比如它没有明确说相机用四元数还是欧拉角,也没有提碰撞检测的具体算法,只说了"用AABB"。
这种"标准答案"式设计的好处是不会有大的方向性错误,坏处是缺乏深度思考。它没有主动考虑万向节死锁、没有考虑性能优化、没有考虑状态机的边界条件。这些都需要我在后续轮次里主动追问,它才会补充。
5.2 第二轮核心实现:代码质量稳定但平庸
GLM5.3 生成的代码质量是稳定的,没有出现DeepSeek V4 Pro那种低级数学错误,但也没有Step 5 Preview那种"主动加注释解释为什么这样做"的亮点。它的代码读起来像是教科书上的示例,正确但缺乏工程感。
一个具体的例子:它的碰撞检测函数写对了三个轴的判断,但没有做任何提前退出优化。当两个物体在X轴就已经分离时,它还是会继续判断Y轴和Z轴。对于只有8个物体的小场景,这点开销可以忽略,但如果物体数量上去,这就是明显的性能浪费。
我指出这个问题后,GLM5.3 很快加了提前退出逻辑,但它没有主动想到这一点,说明它在写代码时更多是"完成任务"而不是"优化任务"。
5.3 第三轮联调:修复方案偏保守
在联调阶段,GLM5.3 的修复方案普遍偏保守。比如画面抖动问题,它的第一反应是"降低相机旋转速度",而不是去查根因。遮挡顺序问题,它的建议是"把所有物体按固定顺序渲染",而不是去修排序算法。
这种保守策略的好处是不会引入新bug,坏处是治标不治本。我最后是结合了DeepSeek V4 Pro的调试建议,自己定位到根因之后,再让GLM5.3按照我的思路去改。
5.4 它的强项:文档和注释
GLM5.3 有一个其他两个模型都比不上的优点:它写的注释和文档非常完整。每个函数都有JSDoc风格的注释,参数类型、返回值、副作用都写得很清楚。项目跑通之后,它还能自动生成一份README,说明每个模块的职责和调用关系。
如果你做的项目需要交付给别人维护,GLM5.3 在这方面的表现会让你省心不少。但如果只是自己跑个原型,这些注释就显得有点冗余了。
6. 三个模型的关键差异对照
为了让你更直观地看到差距,我把三个模型在几个核心维度上的表现整理成了表格。评分是我基于实际实操体验打的,满分5分。
| 维度 | Step 5 Preview | DeepSeek V4 Pro | GLM5.3 |
|---|---|---|---|
| 架构设计清晰度 | 5 | 3 | 4 |
| 数学准确性 | 5 | 3 | 4 |
| 代码生成速度 | 3 | 5 | 4 |
| 多轮上下文保持 | 5 | 2 | 4 |
| 调试建议实用性 | 4 | 5 | 3 |
| 代码注释完整度 | 4 | 3 | 5 |
| 性能优化意识 | 2 | 3 | 3 |
| 自我纠错能力 | 5 | 4 | 3 |
从表格能看出来,没有哪个模型是全面碾压的。Step 5 Preview 在架构和数学上最强,但性能优化需要你补;DeepSeek V4 Pro 速度最快、调试建议最好,但上下文保持是硬伤;GLM5.3 最均衡,但缺乏亮点,适合做"不求有功但求无过"的项目。
还有一个维度表格里没体现,但实际体验中很重要:模型对"我不知道"的处理方式。Step 5 Preview 在不确定的时候会明确说"这里我不确定,建议你验证一下";DeepSeek V4 Pro 倾向于"先给一个答案再说",哪怕这个答案是错的;GLM5.3 则会绕开不确定的部分,给一个模糊但不会错的回答。这三种策略没有绝对好坏,取决于你的使用场景。如果你需要快速推进,DeepSeek V4 Pro的风格更合适;如果你需要可靠性,Step 5 Preview更让人放心。
7. 实操中反复踩到的三个坑
7.1 坑一:模型对"3D"的理解经常停留在2.5D
这是三个模型都犯过的错误。它们在处理3D场景时,会不自觉地退化成2.5D思维——把Z轴当成一个"附加维度",而不是和X、Y平等的维度。
具体表现包括:碰撞检测漏掉Z轴、相机旋转只考虑水平方向、物体排序只按Y轴排。这些问题的根源是,模型在训练数据里见到的"3D游戏"大多是伪3D或者固定视角的,真正的自由视角3D场景相对较少。
我的应对方法是:在提示词里明确强调"这是一个全自由视角的3D场景,三个轴同等重要",并且在每轮反馈时都检查Z轴相关的逻辑。这样做之后,出错率明显下降。
7.2 坑二:状态机的边界条件总是被忽略
三个模型在实现状态机时,都只处理了"正常路径",没有处理边界条件。比如:
- 暂停状态下按移动键,玩家应该不能动,但模型往往忘了加这个判断
- 游戏结束后再按暂停键,状态应该保持不变,但模型可能会错误地切换到暂停态
- 从暂停恢复时,帧时间累加器没有重置,导致恢复后第一帧的时间步长异常大
这些边界条件在代码里可能只占几行,但缺了就会导致各种诡异bug。我的经验是:在让模型写状态机之前,先把所有状态转换列成一张表,让它按照表格来实现,而不是让它自由发挥。
7.3 坑三:性能问题总是最后才暴露
三个模型写的代码,在物体数量少的时候都能跑,但一旦把物体数量从8个加到30个,帧率就会明显下降。原因是它们都没有做视锥剔除和脏标记这两项基础优化。
视锥剔除是指:不在相机视野内的物体不参与渲染。脏标记是指:没有发生变化的物体不重新计算变换矩阵。这两项优化加起来大概能提升50%以上的帧率,但三个模型都没有主动实现。
我的建议是:在项目初期就把这两项优化写进需求里,明确告诉模型"必须实现视锥剔除和脏标记"。否则等你发现性能问题时,代码结构可能已经定型,再改就要动大手术。
8. 如果让我重新选一次,我会怎么搭配使用
经过这一轮完整实操,我的结论是:不要指望一个模型从头干到尾。每个模型都有自己的强项和短板,最优策略是根据任务阶段切换使用。
我的推荐搭配是这样的:
架构设计阶段用 Step 5 Preview。它的模块划分最清晰,数学决策最可靠,能帮你把地基打牢。这个阶段多花点时间值得,因为后面所有代码都建立在这个架构上。
核心实现阶段用 DeepSeek V4 Pro。它的生成速度最快,能帮你快速把代码量堆起来。但你要盯紧它的数学计算,尤其是向量和矩阵相关的部分,发现错误立刻让它改。
联调修复阶段用 GLM5.3。它的修复方案保守但稳定,不会引入新bug。而且它的注释和文档能力能帮你把修复过程记录下来,方便后续维护。
性能优化阶段自己上。三个模型在这方面都不够主动,你得自己补上视锥剔除、脏标记、对象池这些优化。这部分工作模型帮不上太多忙,但做好了收益很大。
还有一个细节:每轮对话都要做上下文锚定。把关键设计决策、已修复的bug、当前的项目状态简要复述一遍,能显著降低模型"失忆"的概率。这个习惯看起来麻烦,但能帮你省下大量返工时间。
最后说一个我自己的体会:用模型做3D游戏这种"数学密集+架构密集"的任务,你的角色更像是技术负责人而不是纯用户。你得懂3D数学,才能判断模型写的对不对;你得懂架构,才能在设计跑偏时及时拉回来;你得懂调试,才能在模型给不出根因时自己定位。模型能帮你省下大量敲代码的时间,但省不下思考的时间。这一点想清楚了,用哪个模型其实就没那么纠结了。