Codex+Blender 搭建一个可自由探索的3D世界


零基础打造交互式3D场景。


这个3D世界,就是这次用Codex和Blender折腾出来的,现在整个场景可以在本地浏览器里打开,人物也能进去探索。


跑步、跳跃,走到码头开船,拿矿镐采集矿石,或者在河边钓鱼...而这里面大部分工作都交给了AI。 


小编只需要负责提供参考图、提出要求以及检查效果,像建模脚本、网页代码以及后续修改主要由AI完成。


Codex+Blender 搭建一个可自由探索的3D世界


先说一说工具,这次用到的有Codex、Blender和Three.js。


Codex负责写代码和调度操作,Blender负责制作与导出模型,Three.js让这些模型在网页里显示和运动。


当然这里的Codex也可以换成像WorkBuddy这样的Agent去实现,最终效果还是取决于模型。


Codex+Blender 搭建一个可自由探索的3D世界


其中Blender在网站免费下载,安装后还需要配置Blender MCP,这样Codex才能查看和操作软件里的物体。


如果是第一次使用,可以参考这个开源项目,把连接丢给Agent安装就行。


装完重启Codex和Blender,并且在Blender的插件设置里确认已启用MCP for Blender。进入3D视图按N,找到MCP面板,没自动连接的话点击启动服务。


Codex+Blender 搭建一个可自由探索的3D世界


可以测试先让Codex创建一个立方体,换个颜色并保存工程,看到Blender里的物体跟着变化,就说明这一步基本打通了。


接下来正式开工了,把你想构建的场景先通过生图构建,再把参考图发给Codex,让它识别场景里的物体。


这里没有要求一口气还原整张图,因为模型越多,出了问题越难定位。我们先把图里的元素拆开,帐篷、篝火、宝箱、木桥、瞭望塔和石头遗迹都作为独立道具制作。


Codex+Blender 搭建一个可自由探索的3D世界


最初一共整理了18件道具,分成营地、交互物品、木构设施和遗迹四组,每件都有自己的尺寸、材质和文件。


给Codex的第一轮要求可以是这样:


分析这张参考图,整理其中需要制作的 3D 道具。先不要搭建完整地形。


按营地物品、建筑设施、可交互道具和装饰遗迹分类,为每件物体确定大致尺寸、朝向和用途。


优先使用 Blender Python 制作结构清楚、方便修改的模型,分别保存,并生成一张道具总览图。


Codex随后调用Blender的Python接口来搭模型。比如木桥,会先生成木桩、横梁和踏板,再按照一条下垂的曲线安排绳索。


Codex+Blender 搭建一个可自由探索的3D世界


宝箱则把箱身和箱盖分开,给盖子保留转轴,这样后面人物开箱时才有东西可以动。


这个过程还遇到了一个小问题。最初Blender的实时连接中断过,小编便让Codex改成编写Python 脚本,再调用本地Blender后台执行。


也就是说,MCP之外还有脚本这种办法,即使连接出了问题,依然可以继续制作道具。


Codex+Blender 搭建一个可自由探索的3D世界


当然,所有东西都让AI用代码建模也没必要。


复杂一点的物体,可以交给AI 3D生成工具。这次小编用的是混元3D,主要考虑到它能提供可下载的模型,方便后续继续处理。


如果更在意造型质量,也可以试试Tripo、Meshy或Hi3D等,不同产品的免费额度和导出条件需要自己确认。


Codex+Blender 搭建一个可自由探索的3D世界


还有一种办法更省事,就是直接找现成模型。


比如Fab的Quixel Megascans素材页,可以搜索石块、木材以及各种环境道具。


这次使用的一条小船、旧葫芦和容器就是外部GLB素材,下载后再交给Codex处理,容器最后还被改成了码头边的鱼篓。


Codex+Blender 搭建一个可自由探索的3D世界


整体体会就是,简单的规则物件交给代码搭建,复杂造型用生成工具,已有的高质量素材拿来调整,省下来的时间更适合打磨整张场景。


不过模型能看,还不代表能直接用。


第一轮检查就发现不少问题,帐篷支架悬空,吊桥的绳子没有接到桥头,宝箱铰链不太对,部分石头也出现了不合理的穿插。


Codex+Blender 搭建一个可自由探索的3D世界


小编让Codex给每件道具渲染正面、侧面和斜后方视图,18件模型一共拍了54张检查图,再逐个返修:


为每个道具生成正面、侧面、斜后方三张检查图,重点检查悬空、穿模、破面、结构连接和模型原点。


发现问题后只修复对应模型,并在修改后重新渲染。确保宝箱盖能单独旋转,桥梁和建筑的支撑结构完整。


接着就是导出模型。


这里用的是GLB格式,可以把模型与材质打包在一个文件里,后面交给网页读取。


Codex+Blender 搭建一个可自由探索的3D世界


Codex还负责减面、整理贴图和压缩文件,18件自建道具的三角面数量由约46.3万降到22.5万,最终GLB总量约30.2MB。


这个步骤对浏览器能否顺畅加载很重要。道具准备得差不多,就可以让它们出现在同一个空间里了。


小编让Codex新建一个TypeScript网页项目,用Three.js加载GLB,再根据参考图安排地形、河道、道路和模型位置。


Codex+Blender 搭建一个可自由探索的3D世界


这里最大的麻烦是摆放位置。


有的木箱看着贴地,实际只贴了模型原点,底部还悬在空中,后来改成检查物体真实的边界,再调整高度。


瀑布也是如此,最初水面和岩壁接不上,修改后才让上游水流与瀑布边缘衔接起来。


Codex+Blender 搭建一个可自由探索的3D世界


Codex+Blender 搭建一个可自由探索的3D世界


Codex+Blender 搭建一个可自由探索的3D世界


Codex+Blender 搭建一个可自由探索的3D世界


画面搭好后,小编又让Codex加了四套光照:白天能看清楚建筑和道路,黄昏的阳光斜着打进河谷,蓝调时段更适合拍远景,夜晚则会点亮营地灯光。


页面还加入了摄影模式,可以调整景深和辉光,很适合拿来做展示视频。


做到这里,其实已经有一个能旋转、能观看的3D世界了。不过还想通过第三视角亲自走进去看看,于是继续加人物。


Codex+Blender 搭建一个可自由探索的3D世界


人物模型同样通过GLB导入。麻烦的是,最初拿到的角色只有外观,没有骨骼和动画。


想让她迈腿、抬手、爬梯子,就得先绑定骨骼。


同样丢给Codex,先把原本约86MB的人物模型压缩到约5.3MB,再为人物制作了23根骨骼,接入网页角色系统。


Codex+Blender 搭建一个可自由探索的3D世界


第一次跑起来还有点好笑,人物动作非常僵硬,拿着矿镐时工具又大又别扭,跑步姿势看着像机械狗。


小编便让Codex继续调整手脚关节,并引入CMU的真人动作捕捉数据,处理走路和跑步动作,再让握持姿势跟工具的方向对齐。


有了身体动作,还要让她真的踩在地面上。这里用到了Rapier物理引擎,负责判断人物与坡道、楼梯、码头、船板的接触。


Codex+Blender 搭建一个可自由探索的3D世界


其他交互也是一点点加进去的。


这一步感受最明显的是,视觉效果只是3D场景的起点。当用户