news 2026/2/6 22:56:30

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/2/7 9:11:04

PHP低代码平台插件性能优化全解析,提升响应速度300%的秘诀

第一章&#xff1a;PHP低代码平台插件开发概述在现代Web应用开发中&#xff0c;PHP低代码平台正逐渐成为快速构建业务系统的重要工具。通过可视化配置与少量代码扩展&#xff0c;开发者能够高效实现功能模块的搭建与集成。插件机制是这类平台的核心扩展方式&#xff0c;允许开发…

作者头像 李华
网站建设 2026/2/3 19:12:38

YOLOv8模型转换为TFLite格式的可行性

YOLOv8模型转换为TFLite格式的可行性 在智能摄像头、工业质检仪乃至农业无人机日益普及的今天&#xff0c;一个共同的技术挑战浮现出来&#xff1a;如何让高性能的目标检测模型在资源受限的边缘设备上稳定运行&#xff1f;YOLOv8作为当前最热门的目标检测架构之一&#xff0c;凭…

作者头像 李华
网站建设 2026/1/30 9:23:32

YOLOv8镜像支持Windows与Linux双平台运行

YOLOv8镜像支持Windows与Linux双平台运行 在智能安防摄像头实时识别行人、工业流水线自动检测产品缺陷的今天&#xff0c;一个常见却令人头疼的问题始终困扰着开发者&#xff1a;为什么在自己电脑上跑得好好的模型&#xff0c;部署到服务器就报错&#xff1f;CUDA版本不兼容、P…

作者头像 李华
网站建设 2026/2/5 2:03:23

YOLOv8推理结果可视化:model(‘path/to/bus.jpg‘)实现细节

YOLOv8推理结果可视化&#xff1a;model(path/to/bus.jpg) 实现细节 在智能安防摄像头实时识别行人、自动驾驶系统感知周围车辆、工业质检流水线上自动检出缺陷产品的背后&#xff0c;目标检测技术正以前所未有的速度融入现实世界。而在这股浪潮中&#xff0c;YOLO&#xff08;…

作者头像 李华
网站建设 2026/2/1 3:35:16

【高并发PHP系统异常预警】:构建智能日志分析引擎的4个核心步骤

第一章&#xff1a;高并发PHP系统异常预警概述在构建现代Web应用时&#xff0c;PHP作为广泛应用的服务器端脚本语言&#xff0c;常被用于处理高并发请求场景。随着用户量和业务复杂度的增长&#xff0c;系统稳定性面临严峻挑战&#xff0c;任何未及时发现的异常都可能导致服务中…

作者头像 李华