[English](README.md) | **简体中文** | [日本語](README.ja.md) | [한국어](README.ko.md)
# Galaxy Explorer 🌌
演示页面
https://zjoooooo.github.io/galaxy-explorer/
一个交互式、由代码程序化生成的**银河系**——包含完整的 3D **太阳系**、漫游的
**彗星**,以及真实的**射电星系喷流**——完全在浏览器中用 WebGL(three.js)运行。
没有后端、无需构建、无需安装依赖、不需要 API 密钥——打开页面即可探索。
星系本身在加载时由代码生成:**没有任何图片素材**——旋臂、星云气体、星团、
远处的星系和超新星,全都是数学运算的结果。太阳系则在此之上为行星、卫星和
太阳叠加了基于真实 NASA 数据的表面纹理。
**可自由用于学习、教学与研究**——个人项目、课堂、高校与博物馆——遵循
[PolyForm 非商业许可证 1.0.0](LICENSE)。商业用途需另行获得授权,请[提交 issue](https://github.com/zjoooooo/galaxy-explorer/issues)洽谈。
## ✨ 特性
- **旋涡星盘** — 约 85,000 个尘埃点分布在四条密度波旋臂上,暖色内核过渡到冷蓝色
旋臂,还有明亮的恒星团块、HII 电离氢区和蓝色星团。
- **体积感星云** — 一个连续的 fBm + Worley 噪声着色器场(域扭曲旋涡、尘埃带、
发光核心),用气体包裹旋臂。
- **星系核球** — 平滑的多尺度发光核心,缓慢地“呼吸”。
- **深空背景** — 闪烁的星场,加上约 170 个遥远的小星系(椭圆星系、旋涡星系、
侧向盘状星系、不规则星系)、一个致密星系团,以及一个类似仙女座的大邻居星系
——全部仅用两次绘制调用完成。
- **基于物理的环境事件** — 偶尔出现的流星、流星雨,以及遵循真实光变曲线
(t².³ 上升 → 圆润峰值 → 双斜率衰减)的超新星,并带有四芒衍射星芒闪光。
- **可交互信标** — 约 30 个可点击标记(太阳系、人马座 A*、著名星云、星团、
恒星与黑洞),点击弹出详细的五语言信息卡,选中天体带发光 3D 光环。飞近某个
系外星系,它自己的**星系内天体**便会出现——恒星形成区、球状星团、超新星遗迹
和射电喷流,各有专属卡片。
- **射电星系喷流** — **半人马座 A** 喷射出两道针尖般纤细的等离子束(北蓝、南紫),
它们像活的水流一样流动、泛起涟漪、涌动,各自终结于一团巨大翻腾的**射电瓣**
——这正是射电望远镜所看到的结构。**M87** 则保留了它著名的*单侧*喷流,因为
它的反向喷流被多普勒减暗到不可见。
- **太阳系指南** — 跟随**太阳系**信标,乘上六秒的**虫洞**进入完整的 3D **太阳系**:
太阳、八大行星、月球、谷神星、冥王星,以及另外七颗著名卫星,覆盖着基于真实
NASA 数据的图像(主要星球为 4K),并由太阳处唯一的日光光源照亮。点击任意星球
查看其带插图的五语言卡片,再点击**飞跃到此星球**,即可掠过并**伴随**公转中的
行星一同飞行,同时它的卫星逐一显现。一颗**活的太阳**展现漂移的**米粒组织**、
迁移的**黑子**,以及喷涌而出又逐渐消散的**日珥**;真实跨度的**小行星带**
(带**柯克伍德缝**)、**柯伊伯带**、巨行星上的暗淡光环,以及半透明的
**大气临边辉光**共同构成整个场景。两颗**彗星**在偏心轨道上漫游,在近日处展开
经典的双尾——笔直的蓝色**离子尾**和弯曲的白色**尘埃尾**;点击其中一颗即可
了解它们的原理,或**追上**它。为便于观察,公转和自转已特意放慢;显示比例和
初始位置以易读为目的,并非严格比例模型或实时星历。
- **星座天球视图** — 从地球的卡片出发,穿过一道大气般纯白的闪光,进入以地球
为中心、可旋转的星空穹顶,其中有 **25 个星座**(12 个黄道星座加 13 个其他
著名星座),由真实的 J2000 恒星坐标连成,还有 **7 个系外星系**坐落在它们
真正的宿主星座之中——各有专属的五语言图片卡片。
- **五种语言** — 标签、卡片与导航可在英文、简体中文、繁体中文、日文和韩文之间
切换(右上角选择器,选择会被记住)。
- **电影级观感** — 选择性泛光(bloom)+ ACES 色调映射。
- **性能自适应** — FPS 监视器会在性能较弱的 GPU 上自动降低尘埃密度,让它在
笔记本、电视和一体机上都能流畅运行。
## 🎯 适用场景
- **学习与教学** — 一个紧凑、易读的单文件示例,涵盖 WebGL、three.js、GLSL
着色器、程序化生成、粒子系统和噪声(fBm/Worley)。非常适合天文、计算机图形学
和创意编程课程。每个子系统都自成一体并有注释。
- **背景与屏保** — 用作落地页主视觉、桌面/副屏背景,或待机画面的氛围星系。
- **数字标牌与装置** — 大堂屏幕、博物馆/天文馆展示、活动背景板。可全屏运行
(按 `F` 进入影院模式)。
- **一个起点** — fork 它,构建你自己的太空可视化、以星系为画布的数据可视化、
游戏背景或艺术项目。
## 🚀 安装与运行
**无需安装。** 只要拿到文件,并通过 HTTP 提供服务即可(浏览器会在 `file://`
协议下屏蔽音频、纹理等部分功能)。
```sh
# 1. 获取代码
git clone https://github.com/zjoooooo/galaxy-explorer.git
cd galaxy-explorer
# 2. 用任意静态服务器托管,例如:
python -m http.server 8000
# 或: npx serve .
# 或: php -S localhost:8000
# 3. 打开 http://localhost:8000/
```
**部署到任意静态托管:** GitHub Pages、Netlify、Vercel、Cloudflare Pages、S3、
nginx 或任何 Web 主机。上传文件夹即可——没有任何需要构建的东西。
## 🎮 操作
| 操作 | 效果 |
|---|---|
| **拖拽** | 环绕相机(orbit) |
| **滚轮 / 双指缩放** | 放大 / 缩小 |
| **点击信标、天体或彗星** | 打开其信息卡;选择天体不会改变相机或运动 |
| **飞跃到此星球 / 追上这颗彗星** | (在卡片上)掠过并伴随移动的天体一同飞行 |
| **返回** | 逐级返回:星空 → 地球 → 太阳系总览 → 银河系 |
| **`Esc`** | 分阶段返回:先关闭卡片,再离开当前太阳系层级,最后离开太阳系 |
| **`F`** | 影院模式——隐藏所有 UI |
| **`M`** | 背景音乐 开 / 静音(可选,见下文) |
**URL 参数**
- `?fx=1` — 演示模式:每 4 秒强制触发一次流星 / 流星雨 / 超新星,让你立刻看到
环境特效。
- `?tune=1` — 星云辉光着色器的实时滑块;实时调整观感,满意后把数值复制进
tunables。
## 🎛️ 自定义
打开 `index.html`,编辑 `