记一次:我为什么不再让 AI 直接生成博客里的赛博朋克家具

2026年07月10日0 次阅读0 人喜欢
技术小破站建设Three.js3D赛博朋克前端踩坑记录性能优化
所属合集

先说结论

我暂时不打算把博客首页做成一张高保真的赛博朋克电影海报。

这次我决定换个更笨、但更靠谱的办法:用 Blender 做模块化家具,导出 GLB,再交给 Three.js 负责场景组合和交互。

AI 生成 3D 模型,快是快

前面我试了 Meshy,也试了混元。

给它们看的参考图是正交视图,里面有正面、侧面、背面和俯视图。我原本以为这已经足够清楚了,结果生成出来以后,四个视角被理解成了四个物体。

这事其实也不能完全怪工具。

图生 3D 更擅长回答“这个东西大概长什么样”,不太擅长回答:

  • 这四张图是不是同一个物体
  • 哪些部分需要拆成独立 Mesh
  • 哪个节点是根节点
  • 交互时应该移动整个家具,还是只移动坐垫
  • 碰撞体应该放在哪里

最后得到的模型看起来像沙发,但离“能放进博客首页里交互的沙发”还有一段距离。

我真正需要的不是一个模型

我需要的是一套可以被程序理解的资产。

比如一个沙发,至少应该有这样的结构:

text 复制代码
sofa_root
├── sofa_base
├── backrest
├── cushion_left
├── cushion_right
├── armrest_left
├── armrest_right
├── accent_strip_cyan
├── accent_strip_magenta
└── collider_sofa

点击沙发时,我可以让整个 sofa_root 高亮。

点击左边坐垫时,我可以只让 cushion_left 抬起来。

需要做碰撞检测时,我可以使用 collider_sofa,不用拿一堆高精度三角面去和相机射线硬碰硬。

这才是我想要的“3D 家具”。

为什么选 Blender

Blender 不会替我猜。

这听起来不如 AI 自动生成那么酷,但对这个项目反而是优点。

我可以明确规定:

  • 沙发宽 2.4 米
  • 根节点位于地面中心
  • 坐垫是两个独立对象
  • 灯带是独立的 emissive 网格
  • 碰撞体是单独的简化盒体
  • 不把文章文字烘焙进模型贴图
  • 不把灯光和摄像机一起导出

这些东西如果交给图生 3D,常常要靠运气。如果用 Blender,可以靠规则。

低模不等于粗糙

我一开始也担心,低面数会不会让赛博朋克房间看起来像一堆积木。

后来发现,赛博朋克感并不主要来自模型面数。

真正影响观感的是:

  • 暗色材质和少量金属反射
  • 青色、紫色和暖黄色的局部光源
  • 结构清楚的小倒角
  • 屏幕上的动态数据
  • 发光灯带的位置
  • 镜头构图和空间留白
  • Bloom 的强度控制

所以我现在更倾向于:

低复杂度几何体,高质量灯光和材质。

这比做一个很重的高模场景更适合博客。

Blender 和 Three.js 怎么分工

Blender 负责资产本身:

  • 建模
  • 部件拆分
  • 材质槽
  • UV
  • 原点和尺寸
  • 碰撞体
  • GLB 导出

Three.js 负责运行时:

  • 加载 GLB
  • 组合房间
  • 切换昼夜主题
  • 控制灯光
  • 加载文章数据
  • 给屏幕生成 CanvasTexture
  • 射线检测和点击反馈
  • 移动端性能降级

这样一来,模型只是模型,博客内容也不会被锁死在模型里。

文章标题和摘要继续用 HTML,终端屏幕只负责做视觉入口。点击以后,还是打开真实的文章页面。

这次先从沙发开始

我先抽取了之前房间设计里的沙发,做了一张实时 3D 风格参考图,也补了一张只包含同一个沙发四个视角的建模参考图。

但我不会再把“生成一张图”当成建模完成。

接下来要验证的是:

  • Blender 里是否能稳定拆出独立部件
  • GLB 导出后节点名称是否保留
  • Three.js 是否能准确射线命中目标部件
  • 沙发移动时碰撞体是否同步
  • 桌面端和移动端是否都能接受

如果沙发这一件能跑通,后面的床、衣柜、服务器机架和文章终端就可以复用同一套方法。

最后

之前那套方案更像是在追求一张漂亮的概念图。

现在我想做的是一个真正能住进去的博客首页。

它可以不那么写实,但每个东西都应该有自己的位置、名字和用途。说白了,先把房间搭稳,再考虑霓虹灯是不是够亮。

站长

加载评论中...