news 2026/6/15 15:20:38

Three.js + AI 纹理生成:打造一个赛博朋克风格的 3D 个人主页

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Three.js + AI 纹理生成:打造一个赛博朋克风格的 3D 个人主页

🤯 前言:降维打击你的竞争对手

想象一下,面试官打开你的主页:

  • 普通版:白底黑字,一张证件照,几行 HTML/CSS 写的技能条。
  • 你的版本:霓虹闪烁的雨夜,高耸入云的赛博大厦,鼠标滑动时镜头穿梭在城市森林中,点击全息广告牌弹出你的 GitHub 项目。

这不仅展示了你的代码能力,更展示了你的技术审美对前沿技术(AI + 3D)的整合能力


🏗️ 一、 技术架构:AI 负责“皮囊”,代码负责“灵魂”

我们不需要成为 3D 建模师。我们的思路是:用简单的几何体(盒子)构建城市,用 AI 生成的复杂纹理赋予它细节。

工作流 (Mermaid):

Three.js 开发

AI 资产生产

Midjourney / SD

NormalMap Online

InstancedMesh

MeshStandardMaterial

Post-Processing

导入 Assets

提示词 (Prompt)

无缝纹理图 (Seamless Texture)

法线贴图 / 粗糙度贴图

BoxGeometry (简单的立方体)

城市群

辉光特效 (Bloom)


🎨 二、 Step 1: 用 AI 生成“赛博建筑”皮肤

我们要解决的核心痛点是:如何不建模,却让立方体看起来像高科技大楼?
答案:UV 贴图欺诈

1. 生成无缝贴图 (Seamless Texture)

打开 Midjourney 或 Stable Diffusion。
关键参数--tile(MJ) 或Tiling(SD)。这能保证图片上下左右拼接时没有缝隙。

MJ Prompt 参考:

Prompt:cyberpunk skyscraper facade texture, windows, neon lights, metal panels, seamless, flat view, high detail, 8k, dark atmosphere --tile --v 5.2

你将得到一张类似这样的图:哪怕只贴在一个平面上,看起来也像有凹凸感的大楼表面。

2. 生成法线贴图 (Normal Map)

光有颜色图(Diffuse)是不够的,光照上去会很假。
我们需要一张紫色的法线贴图来模拟凹凸感。

  • 工具:将 AI 生成的图上传到 NormalMap-Online。
  • 产出:下载生成的 Normal Map。

💻 三、 Step 2: Three.js 代码实战

1. 搭建基础场景

我们需要一个黑色的背景和雾气,营造赛博朋克的神秘感。

import*asTHREEfrom'three';// 场景初始化constscene=newTHREE.Scene();scene.background=newTHREE.Color(0x000510);// 深蓝黑色// 雾气:实现“远处不可见”的效果,增加景深scene.fog=newTHREE.FogExp2(0x000510,0.002);constcamera=newTHREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,1000);camera.position.set(0,10,20);constrenderer=newTHREE.WebGLRenderer({antialias:true});renderer.setSize(window.innerWidth,window.innerHeight);document.body.appendChild(renderer.domElement);
2. 加载 AI 纹理
constloader=newTHREE.TextureLoader();// 加载 AI 生成的图constbaseTexture=loader.load('textures/cyber_building.jpg');constnormalTexture=loader.load('textures/cyber_normal.png');// 材质定义constbuildingMaterial=newTHREE.MeshStandardMaterial({map:baseTexture,normalMap:normalTexture,roughness:0.2,// 光滑一点,模拟玻璃/金属metalness:0.8});
3. 生成城市森林 (InstancedMesh)

面试加分点:不要用for循环创建 1000 个Mesh,那会卡死浏览器。
使用InstancedMesh,一次 GPU 绘制调用(Draw Call)就能渲染成千上万个相同的物体。

constcount=1000;constgeometry=newTHREE.BoxGeometry(1,1,1);// 关键:实例化网格constcity=newTHREE.InstancedMesh(geometry,buildingMaterial,count);constdummy=newTHREE.Object3D();constspread=100;// 城市范围for(leti=0;i<count;i++){// 随机位置dummy.position.set((Math.random()-0.5)*spread,0,(Math.random()-0.5)*spread);// 随机高度 (Y轴拉伸)constheight=Math.random()*10+2;dummy.scale.set(1,height,1);dummy.position.y=height/2;// 调整中心点,使其立在地面上dummy.updateMatrix();city.setMatrixAt(i,dummy.matrix);}scene.add(city);

✨ 四、 Step 3: 注入灵魂 —— 后处理 (Post-Processing)

没有“辉光”的赛博朋克是没有灵魂的。我们需要UnrealBloomPass

import{EffectComposer}from'three/examples/jsm/postprocessing/EffectComposer.js';import{RenderPass}from'three/examples/jsm/postprocessing/RenderPass.js';import{UnrealBloomPass}from'three/examples/jsm/postprocessing/UnrealBloomPass.js';constrenderScene=newRenderPass(scene,camera);// 辉光参数:强度、半径、阈值constbloomPass=newUnrealBloomPass(newTHREE.Vector2(window.innerWidth,window.innerHeight),1.5,0.4,0.85);bloomPass.threshold=0;bloomPass.strength=1.2;// 强度bloomPass.radius=0.5;constcomposer=newEffectComposer(renderer);composer.addPass(renderScene);composer.addPass(bloomPass);// 动画循环functionanimate(){requestAnimationFrame(animate);// 缓慢旋转城市,制造动态感city.rotation.y+=0.001;// 使用 composer 渲染而不是 renderercomposer.render();}animate();

🚀 五、 优化与交互:让 HR 眼前一亮

为了让这个 Demo 变成一个真正的“产品”,你还需要做两件事:

  1. 交互性 (Raycaster)
    添加鼠标悬停事件。当鼠标划过某栋大楼时,大楼变色,并弹出一个 HTML Tooltip(例如:“点击查看我的 Vue 项目”)。
    原理:使用THREE.Raycaster检测鼠标与InstancedMesh的碰撞。
  2. 性能优化 (Performance)
  • 纹理压缩:将 JPG/PNG 转为.webp甚至.ktx2格式,减少加载时间。
  • LOD (Level of Detail):虽然 InstancedMesh 很快,但如果场景过大,考虑引入 Fog 剔除远处的渲染计算。

🎯 总结

通过这个项目,你向面试官证明了:

  1. 工程能力:你懂 WebGL 性能优化(InstancedMesh)。
  2. 前沿视野:你会利用 AI 工具(Stable Diffusion)解决资源瓶颈。
  3. 视觉审美:你懂 Post-Processing 和光影氛围的营造。

这就是所谓的**“全栈视觉工程师”**,也是未来前端最有竞争力的方向之一。

Next Step:
现在的城市是静止的。试着加入“雨滴粒子系统”(Particle System),让整个场景变成一个下着雨的赛博朋克夜晚,氛围感绝对拉满!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:38:46

揭秘PHP大数据场景下的分库分表适配难题:99%开发者忽略的3个关键点

第一章&#xff1a;PHP大数据场景下分库分表的背景与挑战随着互联网业务的快速发展&#xff0c;传统单一数据库架构在面对海量数据和高并发请求时逐渐暴露出性能瓶颈。PHP作为广泛应用于Web开发的脚本语言&#xff0c;其底层依赖的MySQL等关系型数据库在单机部署模式下难以支撑…

作者头像 李华
网站建设 2026/6/15 14:19:40

‌生成式AI集成测试工具指南:赋能软件测试新时代

AI驱动的测试变革 在2025年的软件开发生态中&#xff0c;生成式AI&#xff08;如GPT系列、扩散模型&#xff09;正重塑测试领域。它通过自动生成测试用例、预测缺陷和优化覆盖率&#xff0c;将测试效率提升数倍。本指南专为软件测试从业者设计&#xff0c;提供一套可落地的集成…

作者头像 李华
网站建设 2026/6/15 11:38:20

万万没想到!当年死记硬背的向量公式,如今成了我搞懂大模型的关键

整理RAG流程中向量检索模块的逻辑时&#xff0c;屏幕上“向量夹角衡量相似度”的结论突然让我愣住——那些被我归为“高考过去就作废”的高中向量知识&#xff0c;竟在毕业多年后以如此具体的方式重现&#xff0c;成为我理解前沿技术的关键钥匙。这场跨越时光的知识重逢&#x…

作者头像 李华