# A 3D fruit fly on macOS desktop powered by the real FlyWire connectome

> 来源：[HackerNews](https://github.com/DenisSergeevitch/desktop-fly)

## 背景与概述

当我们在谈论“数字孪生”时，通常想到的是工业设备、城市管网或人体器官的虚拟映射。但很少有人会想到，一只果蝇——准确地说，是它的整个大脑——也能成为桌面上的3D交互模型。最近，GitHub上出现了一个名为 `desktop-fly` 的开源项目，它把一只由真实FlyWire连接组数据驱动的3D果蝇，直接放到了macOS桌面上。

FlyWire是近年来神经科学领域最引人注目的项目之一。它通过高分辨率电子显微镜扫描果蝇大脑，并借助AI与人工校对，绘制出了包含约13万神经元和数千万突触连接的完整连接组（connectome）。这个数据集的规模之大，以至于过去只能在高性能计算集群上以切片或静态图的形式查看。而 `desktop-fly` 的巧妙之处在于，它把这些庞大数据压缩成了一个可实时渲染、可旋转、可缩放、甚至能“飞”起来的桌面小部件。

这个项目之所以值得关注，不仅因为它酷炫的视觉效果，更因为它代表了一种趋势：将前沿科研数据转化为普通开发者也能接触的交互式体验。它模糊了“数据可视化”与“数字艺术”的边界，也为神经科学知识的科普传播提供了全新的载体。

## 核心内容

### 1. 从连接组到3D模型：数据的艺术化重构

`desktop-fly` 的核心并非简单地将果蝇的3D扫描模型贴到桌面上，而是将FlyWire连接组中的**神经元空间坐标**作为顶点，将**突触连接**作为边，构建出一个真正的“神经拓扑结构”3D图。这意味着，你看到的每一根“线条”都对应着果蝇大脑中真实的神经纤维，每一个“节点”都是一个真实的神经元胞体。

### 2. 实时渲染与交互设计

项目基于macOS的原生技术栈（Swift + Metal）开发，实现了60帧/秒的流畅渲染。你可以用鼠标拖拽旋转视角，用触控板捏合缩放，甚至通过键盘快捷键让果蝇的“神经云”在桌面上缓慢旋转，就像一只悬浮在空中的半透明水母。这种交互设计让科研数据变得“可触摸”，而非冷冰冰的静态图片。

### 3. 轻量化与性能优化

考虑到FlyWire原始数据高达TB级别，`desktop-fly` 采用了**数据降采样**与**LOD（Level of Detail）** 策略。在远景时只渲染主要神经束，拉近后才显示细节突触。同时，它使用Metal的GPU实例化（Instanced Rendering）技术，一次性绘制数十万个点与线段，而不会让Mac风扇狂转。

### 4. 开源与可扩展性

项目在GitHub上以MIT协议开源，代码结构清晰，分为数���解析、渲染引擎和UI交互三层。开发者可以轻松替换数据源——理论上，只要提供符合特定格式的神经元坐标与连接列表，就能渲染任何生物的神经结构，甚至人造神经网络。

## 技术分析

从技术架构上看，`desktop-fly` 可以拆解为三个关键模块：

- **数据管道**：从FlyWire公开的 `neuPrint` 接口或预处理的JSON/二进制文件读取数据。项目内置了一个Python脚本，将原始CSV转换为高效的二进制格式（`.fly` 文件），该格式按空间索引分块，便于GPU流式加载。
- **渲染引擎**：基于Metal的 `MTKView` 自定义渲染管线。顶点着色器处理点的大小（随距离衰减），片元着色器根据连接密度着色（从蓝色到橙色的渐变）。线段使用 `MTLPrimitiveTypeLine` 绘制，并通过 `MTLBuffer` 的动态更新实现平滑动画。
- **交互层**：使用 `NSClickGestureRecognizer` 与 `NSScrollView` 的缩放事件，结合四元数旋转矩阵，实现无死角的观察。此外，项目还支持“自动巡航”模式，相机沿预设路径环绕果蝇大脑，适合录屏展示。

一个值得借鉴的实���细节是**空间哈希网格**。由于神经元分布不均匀（中心密集、边缘稀疏），项目将3D空间划分为不均匀的八叉树网格，渲染时只遍历视锥体内的节点，极大减少了CPU与GPU的负载。

## 实践建议

对于想上手体验或二次开发的开发者，这里有几点建议：

1. **环境要求**：需要macOS 12.0+，Xcode 14+。项目使用Swift Package Manager管理依赖，克隆后直接 `open Package.swift` 即可运行。
2. **数据获取**：首次运行会从FlyWire下载约200MB的降采样数据。如果网络受限，可以手动下载项目 `data/` 目录下的预生成 `.fly` 文件，并修改 `Config.swift` 中的路径。
3. **自定义数据**：如果你想渲染自己的数据，需要遵循以下格式（JSON示例）：

```json
{
  "neurons": [
    {"id": 0, "x": 12.3, "y": 45.6, "z": 78.9, "type": "cholinergic"}
  ],
  "synapses": [
    {"pre": 0, "post": 1, "weight": 0.8}
  ]
}
```

然后运行 `python3 convert.py input.json output.fly` 生成二进制文件。注意，坐标单位是纳米，需要归一化到0-1范围。

4. **性能调优**：在 `Renderer.swift` 中调整 `maxPointsPerFrame` 和 `lineWidthScale` 参数，可以平衡画质与帧率。对于M1/M2芯片，建议开启 `MTLDevice` 的 `lowPower` 模式以节省电量。

## 总结

`desktop-fly` 的价值远超“一个漂亮的���保”。它证明了最复杂的生物数据集，经过合理的工程化抽象，可以变成任何人都能探索的交互式体验。对于开发者而言，它是一份高质量的Metal渲染与大规模图数据可视化的参考实现；对于科研工作者，它提供了一种直观理解连接组结构的全新方式；而对于普通用户，它则是一扇窥见神经科学前沿的趣味窗口。当一只果蝇的“思想”在你桌面上缓缓旋转时，你或许会重新思考——什么是意识？什么是连接？而这一切，都始于一行行优雅的Swift代码。