3D 星系可视化
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_45a9f65a/threejs-galaxy-visualization。
技能介绍
要解决什么问题
把知识图谱或关系数据做成「能转、能点、不糊」的 3D 场景,常见坑是:透明叠加与 Bloom 一起把 GPU 打满、选中节点时全场亮度失控、以及 idle 时仍每帧全量遍历。本技能按 Three.js 实战管线,把场景分层、节点多层渲染和性能开关写成可照着实现的约定。
技能如何工作
- 场景架构:自后向前依次加入深空环境、相机与
OrbitControls、渲染器,保证背景先画、前景叠加顺序正确。 - 程序化纹理:用 Canvas 2D 运行时生成
glowTexture、starGlowTexture、spikeTexture,基色为白色(255,255,255),便于SpriteMaterial.color乘出任意色相;Canvas 纹理需设minFilter = THREE.LinearFilter避免 mipmap 糊边。 - 节点四层叠绘:每个数据节点对应 3~4 层 sprite/mesh(核心球、内晕、外光、可选衍射十字),统一
transparent: true、depthWrite: false、THREE.AdditiveBlending,用加法混合做层次而不依赖常驻后处理。 - 背景系统:螺旋星系约 8000 粒子(四臂、径向幂律密度 + 自定义
ShaderMaterial)、球壳背景星约 1500 粒、9 个星云 sprite;仅在controls.autoRotate为真时慢速旋转背景层。 - 交互反馈:Focus/Dim——选中节点时非邻居约 25% 不透明度,焦点与邻居放大、抬升与微闪烁;连线用 Line2;3D 标签走 Canvas →
CanvasTexture+ 对象池。 - 性能:
UnrealBloomPass默认关闭(约 3× fragment 成本),无 Bloom 时用材质参数补偿亮度;_needsRender脏标记与 hover 脏检查减少 idle 渲染与 O(n) 遍历;粒子总量控制在约 9500 以内。
适用边界与注意点
- 数据类别到「星型」样式需自行维护
TYPE_STYLE映射;技能讲的是渲染与交互骨架,不是图数据库 schema。 - Bloom + 大量 AdditiveBlending 易爆亮与卡顿,务必保留可切换(如按键 B)。
- 确定性随机用 FNV-1a 对节点字符串哈希,避免每次构建
Math.random()不一致;核心几何应共享SphereGeometry(1, 12, 12)。 OrbitControls阻尼需每帧controls.update(),否则惯性会突然停住。
使用场景
- 产品路演要把实体关系数据做成可旋转、可点选的 3D 星系图谱,需在浏览器内压住粒子数与 Bloom 带来的 GPU 峰值
- 图数据接口已就绪,前端要实现节点四层发光叠绘,并在选中某节点时邻域高亮、其余节点压暗到约 25% 透明度
- 文献或技能引用网络要做沉浸展示,需要螺旋星系背景、球壳星空,且仅在自动旋转开启时慢速转动背景层
- 展会大屏嵌入 WebGL 场景:默认关闭 UnrealBloomPass,用材质参数补偿亮度,并用脏标记在用户停手后减少无效重绘
适合人员
- 负责内网或官网「知识宇宙」Demo 的前端,要把数据分类映射到 TYPE_STYLE,并接上 Line2 连线与 Canvas 标签对象池
- 做过 Three.js 透明叠加的图形向工程师,需要按技能约定处理 depthWrite、AdditiveBlending 与可切换 Bloom
- 维护浏览器端知识图谱产品的开发者,要在约 9500 粒子预算内实现 Focus/Dim、抬升与微闪烁反馈
- 要把二维关系图升级为宇宙主题 3D 展示的数据可视化工程师,关注 idle 检测与 hover 时避免全量节点遍历