AI+Web3D:我让AI写了一年Three.js,结果它连一个内网白屏都修不了
很久没写了,
我必须先说一句:AI写3D代码,确实强。
强到让人心慌。
以前我要翻三天文档、试七八种方案才能搭出来的模型交互管线,它十几秒全吐出来。GLTF加载、PBR材质、后处理特效,甚至我还没来得及想到的细节优化,它都能自动补全。
比如这段,我让AI写一个简单得模型加载代码,说实话,我自己手写也就这个水平:
// AI生成的Three.js模型加载——标准环境完美运行
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
const loader = new GLTFLoader();
loader.load(
'/assets/model.glb',
(gltf) => {
scene.add(gltf.scene);
console.log('模型加载成功');
},
(progress) => {
console.log(`加载进度: ${(progress.loaded / progress.total * 100).toFixed(2)}%`);
},
(error) => {
console.error('模型加载失败:', error);
}
);
看起来没毛病对吧?加载进度回调、错误处理,该有的都有。
那一刻,说实话,我后背是凉的。六年的经验,在它面前好像瞬间贬值了。
但我这个人有个毛病:慌完,就会开始找它的破绽。

于是过去半年,我干了一件事:专门把AI写的Three.js代码,往"地狱环境"里扔。
什么是地狱环境?不是你那台MacBook,也不是Chrome最新版。是客户现场的工控机——Win7嵌入式、Chromium 49内核、核显、断网、安全软件还在后台悄悄删着东西。
AI的代码,在这里,死得很惨。
第一个翻车现场:内网离线环境,贴图全白
AI生成的加载器用的路径是 /assets/model.glb,里面内嵌的纹理引用了一堆相对路径。本地没问题,一丢到客户那台断网、没有外网DNS的内网服务器上——
全白。
控制台不报错,GLTFLoader 静默失败,连error回调都没触发。AI根本不知道,有些内网环境里,浏览器连 blob: 协议都会被安全策略拦截。
我最后改成了这样:
// 修复方案:内网离线环境适配
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
const loader = new GLTFLoader();
// 关键:设置跨域策略,接管纹理加载
loader.setCrossOrigin('anonymous');
// 关键:禁用外部资源请求,强制所有纹理base64内嵌
loader.setResourcePath('');
// 预检测:当前环境是否支持blob协议
const isBlobSupported = (() => {
try {
const testBlob = new Blob(['test'], { type: 'text/plain' });
URL.createObjectURL(testBlob);
return true;
} catch (e) {
return false;
}
})();
if (!isBlobSupported) {
console.warn('当前环境不支持Blob协议,纹理将降级为纯色材质');
// 后续走降级渲染分支
}
AI不会写这段。它没见过一个连 Blob 都跑不了的环境。
第二个翻车现场:
老浏览器,跑着跑着GPU上下文直接丢了
AI写的渲染循环干净利落:
// AI生成的标准渲染循环
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
stats.update();
}
animate();
放在Chrome最新版,稳如老狗。
放到那台国产化双核浏览器的极速模式下,跑不到五秒,整个canvas黑掉。控制台抛出一个AI从来没处理过的东西:
WebGL: CONTEXT_LOST_WEBGL
然后页面卡死,什么动静都没了。用户刷新也没用,因为浏览器已经把GPU进程挂起了。
AI的代码里,没有对这一行的任何防御。
我加的修复:
// 修复方案:老浏览器GPU上下文丢失防御
function animate() {
requestAnimationFrame(animate);
try {
renderer.render(scene, camera);
} catch (e) {
// 捕获渲染异常,避免整个循环崩溃
console.warn('渲染帧失败,跳过当前帧:', e.message);
return;
}
}
// 核心:接管上下文丢失事件
renderer.domElement.addEventListener('webglcontextlost', (event) => {
// 阻止默认行为,争取恢复时间
event.preventDefault();
console.warn('WebGL上下文丢失,2秒后尝试恢复...');
// 暂停渲染,释放部分GPU内存
cancelAnimationFrame(animationId);
// 尝试上下文恢复
setTimeout(() => {
renderer.domElement.addEventListener('webglcontextrestored', () => {
console.log('上下文已恢复,重新启动渲染');
animate();
}, { once: true });
}, 2000);
}, false);
// 额外保险:检测浏览器是否为国产双核
const isOldBrowser = /360|LieBao|MetaSr/.test(navigator.userAgent);
if (isOldBrowser) {
// 降低像素比,减少GPU内存压力
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1));
// 关闭阴影、后处理等耗GPU特性
renderer.shadowMap.enabled = false;
}
这段代码放进去之后,那台老机器跑了一个下午,没再崩过。
我盯着那些崩溃的日志,突然笑了。
不是嘲笑AI,是松了一口气。
原来,它强是真的,但它"没见过真实世界"也是真的。它的训练数据里,全是理想环境。标准浏览器、最新API、完善网络、最新驱动——这些在真实工业现场,是幻觉。
它不是神,它只是一个在完美环境里长大的学霸,从来没踩过泥坑。
而中国有多少这样的泥坑?国产化双核浏览器、内网安全策略拦截、老旧的硬件必须继续跑、杀毒软件把WebGL当病毒……这些,AI一行代码都解决不了。
不是说它以后解决不了,而是现在,它真的干不了。
想通这一点之后,我的焦虑就过去了。
不是因为我比AI聪明,而是因为我想明白了接下来我要干什么:
AI负责在完美的环境里,生成漂亮的Demo。
我负责在真实的地狱里,让它跑起来。
它给我降本增效,我给它擦屁股。
它当大脑,我当那个知道怎么在泥巴里走路的人。
技术壁垒,的确被冲垮了一道。
但新的壁垒,就在AI写的那堆代码"跑死在客户现场"的瞬间,重新立了起来。

所以现在,我拥抱AI,每天都在用。
但也每天都在它的输出里,找到了自己非存在不可的理由。
这件事,焦虑过,现在清醒了。
如果你也觉得技术被替代了,别盯着它擅长的看。
去把它写的代码,扔到你最烂的一台设备上,跑一下。
答案就在那个报错里。
技术交流 1203193731@qq.com
交流微信:yeyunfeigc

其它相关文章:
如何基于three.js(webgl)引擎架构,实现3D医院、3D园区导航,3D科室路径导航
如何基于three.js(webgl)引擎架构,实现3D密集架库房,3D档案室(3d机器人取档、机器人盘点、人工查档、设备巡检)
如何使用webgl(three.js)实现煤矿隧道、井下人员定位、掘进面、纵采面可视化解决方案——第十九课(一)
如何使用webgl(three.js)实现3D消防、3D建筑消防大楼、消防数字孪生、消防可视化解决方案——第十八课(一)
webgl(three.js)3D光伏,3D太阳能能源,3D智慧光伏、光伏发电、清洁能源三维可视化解决方案——第十六课
如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视化孪生系统——第十五课
webgl(three.js)实现室内三维定位,3D定位,3D楼宇bim、实时定位三维可视化解决方案——第十四课(定位升级版)
使用three.js(webgl)搭建智慧楼宇、设备检测、数字孪生——第十三课
如何用three.js(webgl)搭建3D粮仓、3D仓库、3D物联网设备监控-第十二课
如何用webgl(three.js)搭建处理3D隧道、3D桥梁、3D物联网设备、3D高速公路、三维隧道桥梁设备监控-第十一课
如何用three.js实现数字孪生、3D工厂、3D工业园区、智慧制造、智慧工业、智慧工厂-第十课
使用webgl(three.js)创建3D机房,3D机房微模块详细介绍(升级版二)
如何用webgl(three.js)搭建一个3D库房-第一课
如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室,-第二课
使用webgl(three.js)搭建一个3D建筑,3D消防模拟——第三课
使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课
如何用webgl(three.js)搭建不规则建筑模型,客流量热力图模拟
使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)
使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课

浙公网安备 33010602011771号