这是一款基于 Three.js r162 的可交互 3D 神经网络粒子动画:黑色星空为底、上万颗节点组成一个巨大的量子网络,节点之间用发光曲线相连并沿路径流动数据。用户点击画面任意位置就会发出一圈向外扩散的能量脉冲,冲击波扫过的节点和连线会随之亮起、放大再回落;拖拽可任意旋转视角,右上角面板可切换紫色星云、日落火焰、海洋极光三种主题,并用密度滑杆把节点数量从 30% 到 100% 之间动态重构。整套渲染管线走 `EffectComposer` + `UnrealBloomPass` + `OutputPass`,节点和连线都是自定义 GLSL Shader,附带完整 simplex noise 实现。
这款量子神经网络特效的核心亮点
三种拓扑均由算法程序生成而非硬编码:晶体球用黄金比 φ 分布把节点铺在 5 层同心球面并按距离连接;双螺旋是 4 条相位交错的螺旋线上下贯穿并做跨螺旋短接;分形网从原点 6 向发散、每级按 3 子分支递归 4 层,落点做叶节点互连。
点击脉冲不是简单粒子发射,而是把点击点投影到相机前方一个动态构造的 `Plane` 上,再把三维坐标写入 shader uniforms;GLSL 里根据 `distance(worldPos, pulsePos)` 与波速积得到「震波前沿距离」,前沿附近的节点和连线放大、变色、增亮。
连线不是直线,而是用 `mix(p0, midPoint, t)` + 垂直方向 sin 偏移做贝塞尔曲线,再叠加低频 simplex 噪声让曲线随时间轻微漂浮,视觉上更像神经突触而非线段。
三个后处理 Pass 串联:`RenderPass` 出基础色,`UnrealBloomPass`(强度 1.8、半径 0.6、阈值 0.7)放大高亮,`OutputPass` 做 sRGB 转换;`FogExp2` 密度 0.002 让远处节点自然淡出。
Shader 与拓扑生成里的三个关键取舍
其一,节点用 `THREE.Points` + `ShaderMaterial` 而非几何体阵列,`gl_PointSize` 按 `1000.0 / -mvPosition.z` 做透视缩放,一万级节点也能流畅跑。其二,脉冲同时支持最多 3 个并发,shader 里循环三次累加 `getPulseIntensity`,`min(total, 1.0)` 防止叠加过曝——这也是为什么快速连点也不会撞满。其三,密度滑杆改变节点数量时并非重新采样,而是按「连接数 × 距离倒数」评分排序保留 top N,稀疏时优先保留网络骨干而非随机丢点,视觉上不会散架。
接入自己的项目要改什么
三种主题色板集中在文件顶部 `colorPalettes` 数组(三组各 5 色),换成品牌主色即可;想加第四种拓扑,在 `generateNeuralNetwork` 里新增一个 `generateXxx` 并加进 `switch (formationIndex % 3)` 的 case,同时把 `config.numFormations` 从 3 改成 4。想让画面更冷静,把 `bloomPass` 的第二参数(强度)从 1.8 调到 1.0 以下、`controls.autoRotateSpeed` 从 0.2 调到 0,画面就会静止且不那么爆。GLSL 内均有注释,星空、节点、连线三段可分别裁掉。
浏览器需支持 WebGL2 且启用硬件加速:Chrome 90+、Safari 15+、Edge 90+、Firefox 88+ 均可。手机端建议先把 `renderer.setPixelRatio` 上限从 2 降到 1、`particleCount` 相关的 `numPoints` 减半。详细运行方法请参见压缩包内的帮助文档。
常见问题
为什么画面一片黑或者只看到几个点
先检查浏览器控制台是否有 WebGL2 相关报错。若为 iOS 低版本 Safari,可能不支持 `ShaderMaterial` 里 `varying` 数组的写法,需要升级到 Safari 15 以上。
能改成本地部署不走 CDN 吗
可以。把 importmap 里的 three 和 three/addons 换成本地路径即可,但要保证同版本(源码用 r162),跨大版本 addons API 可能改动。
脉冲的颜色可以固定成一种而不是随机吗
能。在 `triggerPulse` 函数里,把 `const randomColor = palette[Math.floor(Math.random() * palette.length)]` 改成一个固定 THREE.Color 即可。
4K 屏幕上帧率掉到 30 以下怎么办
把 `renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))` 里的 2 改成 1,同时把 `bloomPass` 分辨率降为 `window.innerWidth/2`,通常能回到 60。
适合放在哪些页面
适合 AI/大模型公司官网首屏、区块链项目 Landing Page、算力/数据服务 Banner、科技类活动海报、开发者大会主视觉。整套是自包含模块,下载后可直接嵌入任意页面作为背景层或独立展示区。