没做过游戏,我用 AI 把一个页面改成了 3D
我没有游戏开发经验。
但我手里有一个二维小页面:像素风铁匠铺、几个会说话的 NPC,以及一个“能不能把它变成真 3D”的念头。
最后,从决定开始到基本可用,只用了几个小时。
先看结果:打开 3D NPC 实验。
它当然不是游戏,也远谈不上完整的 3D 世界。但它能旋转视角,模型有真实空间关系,NPC 会冒气泡、轻微转头。对一个完全没做过游戏的人来说,已经足够证明一件事:3D 的门槛正在快速下降。
第一步不是建模,是准备一张适合建模的图
我最初想直接复用旧素材,效果很差。
原因很简单:图生 3D 不是“看懂画面后自由发挥”,它需要从单张图片里恢复形体。像素图分辨率低、轮廓断裂、远近关系不明确,模型只能猜。猜得越多,结构越容易崩。
后来重新生成了一套低多边形参考图,并明确告诉图片模型:这些图会用于后续图生 3D。
有效的参考图有几个共同点:
- 主体完整,不裁切;
- 背景干净,不和主体粘连;
- 光照均匀,避免大片死黑或过曝;
- 视角能同时看见正面、侧面和厚度;
- 结构不要过细,轮廓比纹理更重要;
- 人物和道具之间不要互相遮挡。
这一步比“提示词写得多华丽”重要得多。二维图如果没有把结构交代清楚,后面的 3D 模型只能在错误上继续加工。
图生 3D 已经够完成一个 MVP
这次我使用 Hyper3D 把参考图转换成模型。它允许在生成过程中继续追加提示词,并支持导出常见 3D 格式。
实际效果比预期好。角色的衣服、工具和大体比例都能保留下来;场景模型也能恢复主要空间结构。
但它并不神奇。单图生成最容易丢的是:
- 看不见的背面;
- 被遮挡的连接关系;
- 细小手指和面部;
- 薄片、绳索和复杂镂空;
- 人物关节与可动画骨骼。
因此,图生 3D 很适合快速做静态资产和风格化模型,却不能默认得到一套可以直接进入游戏生产的资产。
Three.js 让网页直接承载 3D
前端展示反而是最简单的一段。
页面只需要加载几个 GLB 模型:
- 一个铁匠铺场景;
- 三个 NPC;
- 环境光与方向光;
- OrbitControls 控制视角。
Three.js 的 GLTFLoader 可以直接加载 GLB,浏览器本身就是运行容器,不需要额外安装客户端。
真正花时间的并不是 API,而是空间关系:
- 人物被工作台挡住;
- 模型原点不一致;
- 三个角色比例不同;
- 朝向与相机不匹配;
- 相机转动后人物像飘在空中;
- 嵌入小窗口后,默认视角看不清重点。
这些问题都不高级,却必须逐个看、逐个调。3D 页面与普通页面最大的区别,是你不能只看 CSS 盒模型,还要同时管理位置、旋转、缩放、相机和光照。
T-Pose 是捷径,也是坑
生成人物参考图时,我一度要求使用 T-Pose,也就是人物双臂水平张开的标准姿势。
这样做的理由很合理:T-Pose 便于后续绑定骨骼和制作动画。
问题在于,图生 3D 默认生成的是没有骨骼的静态网格。如果后续自动绑骨失败,页面里就会站着几个永远张开双臂的人。
我尝试过自动绑定工具,也尝试过手动处理。现实很直接:自动识别会受模型结构影响,手动绑骨又需要真正的 3D 基础。为了一个 MVP 在这里继续消耗并不划算。
最后的解决办法并不优雅,但有效:重新生成自然站立姿势的角色。
这是整个实验里最重要的取舍。不是每个技术问题都必须正面打穿。先问自己:当前目标真的需要它吗?
模型压缩不是优化项,是上线前提
模型生成时我选择了高精度,结果单个 GLB 接近 100 MB。
本地打开当然没问题,一放到网页上就不现实。首屏加载一个 100 MB 模型,用户在看到内容之前已经离开了。
我使用 gltf-transform 做了三件事:
- 减少网格面数;
- 把贴图转成 WebP,并限制最大尺寸;
- 使用 Meshopt 或 Draco 压缩几何数据。
低多边形模型本来就不依赖极高网格精度,压缩后每个模型可以控制在几 MB,肉眼差异很小。
这次个人主页里的环形飞船也用了同样思路:原模型约 35 MB,真正的大头是两张 4K PNG 贴图。把网格减半、贴图降到 2K WebP,再做几何压缩后,最终模型约 1.5 MB。
先测清楚体积来自哪里,再决定减面还是压贴图,比套一个固定压缩比例可靠得多。
让角色“活着”,不一定需要复杂动画
没有骨骼动画,不代表页面只能完全静止。
我最后加了几个成本很低的细节:
- NPC 说话时,在头顶显示小气泡;
- 角色轻微朝向镜头;
- 用小幅正弦变化模拟摇头;
- 随机触发独白,但控制最短间隔;
- 小窗口里默认收起控制面板。
这些动作都很克制。它们不负责展示技术,只负责让用户感到“这个角色还活着”。
沉浸感经常来自很多低成本信号,而不是一套昂贵的完整动画系统。
几个小时能完成,是因为没有追求完美
这次实验能快速跑起来,依赖四件事:
- 图片模型能生成适合建模的干净参考图;
- 图生 3D 已经足够承担风格化静态资产;
- Three.js 能直接在网页里加载 GLB;
- glTF 工具链能把模型压到适合网络分发的体积。
更重要的是,我没有把“做一个 3D 页面”偷换成“学会完整游戏开发”。
先确定想验证什么,再只补齐完成验证所需的能力。MVP 不是为粗糙找借口,而是拒绝让暂时不重要的问题拖死真正重要的目标。