Gaia星表接入Unity 参考项目索引

StarMap✅

简单高效的星图渲染方法,将三维坐标保留方向信息,投影到固定球面上,每颗星用一个带颜色和透明度的小四边形表示;大量四边形被合并成少量 Mesh,再由发光 Shader 渲染成星空。星星方片不是每帧动态朝向摄像机(局限)。

Gaia Sky

根据相机坐标和视角的星表加载方法:

八叉树空间划分、LOD 节点元数据(在数据预处理阶段,整个银河系/宇宙的星表数据会根据三维空间分布,被递归地划分到一个八叉树结构中,按需加载释放机制),视网膜立体角裁剪算法,异步流式加载(当相机移近某区域且通过 θ 判定需要展开时,Gaia Sky 的后台线程会异步地将对应的二进制文件从磁盘加载到 CPU 内存,并立即上传到显存),LRU 内存释放(自动寻找最久没有被相机看到的八叉树节点,释放其对应的 CPU 内存和 GPU 显存结构,防止内存溢出)

相关算法的实现原理有待深入学习,可以应用到导航层的星表数据获取与筛选逻辑上,优化性能表现。

HYG Database✅

一个恒星数据集,其中存在部分版本大量的数据源来自gaia DR3

CosmoScout VR✅

主要分析了其星图渲染模块,与StarMap类似,重点也是远距离星空背景和亮度表现。

星表解析统一化、赤经赤纬转三维 parsec 坐标、B-V 转色温、星等转亮度、按观察者位置实时重算视星等(可参考算法后续引入),最后用 GPU 点/公告板/compute 光栅化渲染为发光星空。

把星点投影到屏幕像素坐标,用双线性权重把亮度分摊到最近 4 个像素,做原子累加,避免多颗星同时写同一像素冲突,中间纹理存的是“平均色温 + 累计亮度”(避免了大量微小点在普通光栅管线中产生不稳定闪烁)

观测者位置为相机位置,恒星位置固定在缩放后的三维空间,保留方向。该项目使用的Tycho2缺失视差(距离信息),因此该部分恒星数据落在天球壳上。有距离信息的恒星将尺度进行了压缩,形成一个以观察者附近为中心的三维恒星点云。

Solar System Scope✅

似乎是商业项目,相关网页代码做了混淆,无开源代码。

ivoyager Planetarium✅

这个项目主要是太阳系的可视化建模渲染。

恒星背景是一张固定在远处惯性天球上的全景贴图,完全不涉及数据集与星表数据。这种星图渲染的方式其实也可以借鉴,简单高效且实际效果非常好,8K/16K贴图中还包含了星云这种信息,非常拟真。

关于可视化渲染与导航的思考:

星图渲染层应该完全独立,不能作为导航层参考的视觉依据。 如果导航层只依赖渲染 Mesh 里的 Unity 坐标,之后做距离计算、搜索、星体查询时会受到缩放精度和渲染优化影响。可视化仿真为了良好的人眼观感,渲染逻辑不适用物理上的亮度衰减模型。导航层相关算法可能需要数据层结合传感器参数做进一步拟合处理(根据导航要求,对导航会遇到的视角内星图做独立符合物理模型的计算和渲染)。

导航层应该实现的功能: 根据仿真观测者的坐标和实际视角,快速根据星表数据集锁定会出现在传感器探测范围的恒星,查数据表获取高精度坐标和星等数据,单独进行数据仿真工作。而在用户界面(软件界面)仅显示渲染层结果,根据导航结果做高亮或定位,不应该负责搜索和计算逻辑,让导航算法隐藏于后台。