为什么需要另一个分子可视化工具
PyMOL是结构生物学领域最广泛使用的分子可视化工具。Warren DeLano在2000年将其开源,给了整整一代结构生物学家一个可以免费使用、修改和学习的工具。但PyMOL的代码库已经积累了25年的历史——C语言核心、OpenGL渲染管线、Python 2时代的脚本接口。安装一个完整的PyMOL需要数百MB的依赖,在浏览器中无法运行,GPU渲染仍依赖legacy OpenGL。
Patinae(原名PyMOL-RS)的回答是:保留你熟悉的命令语言和选择代数,但用Rust从零重写整个引擎。不是包装,不是移植——是一个全新的代码库和渲染栈。
关键数字:~12MB单文件可执行 · 兼容99% PyMOL命令 · WebGPU渲染(非OpenGL) · Rust内存安全 · 跑在桌面/Python/浏览器三端
12MB是什么概念?PyMOL的conda安装包通常在300-500MB以上(包含Python运行时、NumPy、Qt等依赖)。Patinae把渲染器、命令运行时、文件解析器、选择引擎、插件系统全部编译进一个~12MB的原生可执行文件——这得益于Rust的零运行时依赖特性和wgpu的原生编译。你不需要安装Python,不需要装Qt,不需要任何运行时——./patinae protein.pdb就够了。
架构:不是单体,是15个独立crate
Patinae最精妙的设计决策是模块化到crate级别。整个项目不是一个巨型二进制——它是15个独立可用的Rust crate,每个都有明确的职责边界:
| 层级 | Crate | 职责 |
|---|---|---|
| 应用层 | patinae |
原生桌面应用(Slint UI shell) |
patinae-cmd |
命令解析器与执行器 | |
patinae-plugin |
插件SDK | |
patinae-framework |
共享消息与核心组件 | |
| 渲染层 | patinae-render |
WebGPU渲染引擎(wgpu) |
patinae-scene |
视图状态、场景图、相机、输入 | |
| 领域层 | patinae-mol |
核心数据模型:Atom, Bond, Molecule |
patinae-io |
格式解析与写入(PDB/mmCIF/MOL2等) | |
patinae-select |
选择语言解析器与求值器 | |
patinae-session |
会话保存与加载(.prs / .pse导入) | |
patinae-algos |
对齐、对称性、序列分析算法 | |
| 基础层 | patinae-color |
命名颜色、调色板、方案、色带 |
patinae-settings |
配置与设置系统 | |
patinae-plugin-host |
运行时插件宿主 |
这意味着什么?如果你只需要在Rust pipeline里解析PDB文件——use patinae-io就够了。如果你只需要选择代数引擎——use patinae-select。如果你要构建自己的查看器——组合scene、renderer、command runtime和你自己的前端。没有单体依赖,没有"为了用一个函数拉入整个GUI"的问题。
这种crate拆分不是过度工程——它是Patinae能同时跑在桌面、Python和浏览器的基础。三端共享同一套领域层和渲染层crate,只是前端不同:Slint桌面UI、PyO3 Python绑定、WASM浏览器viewer。
WebGPU渲染:GPU impostor与并行 marching cubes
Patinae的渲染器是一个完整的WebGPU实现——不是OpenGL,不是Vulkan抽象层,是wgpu(Rust的WebGPU实现,同时支持原生和WASM编译)。这个选择带来三个关键优势:
1. GPU Impostor着色器
传统的分子可视化用OpenGL绘制球体和圆柱体——要么用大量三角形(慢),要么用点精灵(质量差)。Patinae用GPU ray-sphere impostor技术:每个球体只渲染一个四边形(4个顶点),在fragment shader里做光线-球体求交,计算出正确的深度和法线。这意味着你可以渲染数十万个原子而不掉帧——因为GPU做的不是几何体渲染,而是像素级的光线追踪。
圆柱体(键)同理——GPU ray-cylinder impostor。双键和芳香键也能正确渲染。
2. 并行 Marching Cubes 分子表面
分子表面(SAS/SES/VdW)是结构生物学可视化的核心。传统PyMOL用CPU计算marching cubes,对大蛋白来说很慢。Patinae用GPU compute shader并行化marching cubes——据项目声称比传统方法快1000倍。这不是夸张:GPU的并行度天然适合marching cubes的体素独立计算。
3. 多光源Phong着色 + 阴影
Patinae支持多方向阴影映射(multi-directional shadow mapping)和多光源Phong着色。还有一个独特的"Skripkin模式"——一个受结构生物信息学美学启发的光照预设,多方向柔光照亮二级结构细节。这在传统PyMOL中需要Ray tracing才能实现,Patinae在实时渲染中就做到了。
渲染后处理包括:WBOIT(weighted blended order-independent transparency,顺序无关透明度)、FXAA(快速近似抗锯齿)、SSAO(屏幕空间环境光遮蔽)、轮廓/剪影后处理。这些都是现代游戏引擎级别的技术——Patinae把它们带到了分子可视化里。
渲染内存配置
Patinae在启动时选择渲染内存配置——这是一个启动时决策,不是运行时设置:
这让Patinae能跑在从高端GPU到集成显卡的任何设备上——包括浏览器里的WASM WebGPU。
命令语言:99% PyMOL兼容的肌肉记忆
这是Patinae最实用的设计:如果你会PyMOL,你就会Patinae。同样的命令语法,同样的选择代数,同样的肌肉记忆。Patinae重新实现了这门语言,而不是包装它。
选择代数
完整的选择语言支持:布尔代数(and/or/not)、距离操作符(around/near_to/within)、扩展操作符(byres/bychain/expand)、数值比较、slash-macro语法。全部与PyMOL兼容:
完整命令集
支持的核心命令包括:load, fetch, show, hide, color, select, zoom, center, orient, png, ray, align, cealign, symexp, isomesh, isosurface, isodot——以及脚本执行(.pml文件)和会话文件(.prs原生格式,.pse导入兼容)。
三栖部署:桌面、Python、浏览器
Patinae最独特的特征是同一套Rust crate编译到三个目标,每个都是一等公民:
1. 原生桌面应用
桌面应用基于Slint UI(v0.4.0从egui迁移到Slint),提供命令行、对象面板、序列查看器、插件面板、鼠标拾取、原生文件工作流和GPU视口。macOS、Linux、Windows三平台——cargo build一次搞定。
2. Python / Jupyter
Python包通过PyO3绑定暴露熟悉的cmd.*接口——与PyMOL的Python API一致。还包含一个anywidget Jupyter查看器,可以在notebook中交互式查看分子:
3. 浏览器(WebAssembly + WebGPU)
这是最令人兴奋的部分。Patinae编译成WASM,通过WebGPU在浏览器中运行——不是截图,是真正的交互式3D分子查看器。发布为@patinae/viewer npm包:
还支持自定义元素(custom element)注册——一行HTML标签就能嵌入分子查看器:
这意味着你可以在论文 supplementary page、教学网站、Lab wiki里直接嵌入交互式3D分子查看器——读者不需要安装任何东西,只需要一个支持WebGPU的浏览器。
插件系统:在分子查看器里跑DOOM
Patinae的插件系统不是事后添加的——它是架构的核心部分。插件是编译为动态库(.dylib/.so/.dll)的原生Rust代码,从~/.patinae/plugins/加载。插件可以注册命令、提供UI面板、挂钩命令管道、通过Patinae插件API与查看器交互。
| 插件 | 功能 |
|---|---|
hello |
最小化插件生命周期与命令注册示例 |
raytracer |
GPU光线追踪:BVH加速、阴影、透明度、边缘检测 |
ipc |
进程间通信——外部工具集成(Unix socket控制) |
python |
嵌入式CPython解释器——在桌面应用内跑Python脚本 |
为了展示插件系统的强大程度——他们真的在Patinae里跑了DOOM。作为插件demo。这虽然是个玩笑,但它证明了一个严肃的观点:Patinae的插件API足够通用,可以承载完全无关的渲染逻辑。你可以用它构建自定义分析工具、交互式教学模块、或者任何你能想象的可视化插件。
能力清单:格式、表示、分析
文件格式:PDB, mmCIF, bCIF (BinaryCIF), MOL2, SDF/MOL, XYZ, GRO, CCP4/MRC(电子密度图), XTC/TRR(轨迹), gzip压缩输入
表示类型:球体(spheres)、棒(sticks)、线(lines)、卡通(cartoon)、缎带(ribbon)、表面(surface: SAS/SES/VdW)、网格(mesh)、点(dots)、标签(labels)、等值面(isomesh)、等值面填充(isosurface)、等值点(isodot)
结构分析:
- Kabsch叠合与CE结构对齐
- 距离、角度、二面角测量(带视觉反馈)
- 晶体学对称性扩展(全部230个空间群)
- 从几何自动分配二级结构
- 电子密度图加载与等值线
会话:Patinae原生.prs会话保存/加载,PyMOL .pse会话导入
光线追踪:raytracer插件提供离线GPU光线追踪——BVH加速、阴影、透明度、边缘检测
Patinae vs PyMOL vs 竞品
| 特性 | PyMOL | Patinae | megane | PyChem-Pro |
|---|---|---|---|---|
| 语言 | C / Python | Rust | Rust / Python | 纯Python |
| 渲染 | OpenGL | WebGPU (wgpu) | Three.js / WebGL | QPainter (软件) |
| 二进制大小 | ~300MB+ | ~12MB | npm包 | Python依赖 |
| 浏览器运行 | ❌ | ✅ WASM+WebGPU | ✅ WebGL | ❌ |
| PyMOL命令兼容 | 原生 | 99% | ❌ 自有API | 部分类似 |
| 内存安全 | C核心有风险 | Rust保证 | Rust保证 | Python保证 |
| 大规模原子 | 慢 | GPU impostor | 1M+ @ 60fps | 小分子为主 |
| 插件系统 | Python | Rust dylib + Python | ❌ | Python |
| 模块化crate | ❌ 单体 | ✅ 15个独立crate | 部分 | ❌ |
| 光线追踪 | 内置CPU | GPU插件 | ❌ | 软件离线 |
Patinae的独特定位是:唯一一个同时具备PyMOL命令兼容性、WebGPU渲染、浏览器运行能力和12MB单文件大小的工具。megane在浏览器和大规模原子方面更强(1M+ atoms @ 60fps),但不兼容PyMOL命令。PyChem-Pro是纯Python教学工具,不适合高性能场景。
对结构生物学工作流的启示
1. 浏览器原生分子可视化不再是妥协
过去在浏览器里看分子意味着要么用静态图片,要么用基于WebGL的简化查看器(如3Dmol.js/NGL)。Patinae的WASM+WebGPU方案意味着你可以获得接近原生的渲染质量——GPU impostor着色器、多光源Phong、SSAO——全部在浏览器里。这对论文supplementary、教学平台、协作工具的意义是巨大的。
2. Rust crate模型改变了分子软件的复用方式
传统上,分子可视化工具是单体应用——你要么用整个PyMOL,要么不用。Patinae的crate模型意味着你可以只拿走你需要的部分:在Rust pipeline里用patinae-io解析mmCIF,用patinae-select做原子选择,用patinae-algos做Kabsch对齐——不需要GUI,不需要渲染器。这和Python生态中RDKit的"库优先"哲学一致,但带到了Rust和GPU渲染的世界。
3. 12MB意味着可嵌入
12MB的单文件大小意味着Patinae可以嵌入到任何地方——Docker镜像、CI pipeline、教学容器、甚至其他应用的内置查看器。不需要安装Python运行时,不需要conda环境,不需要apt-get install。这对HPC环境(通常没有root权限)和教学环境(学生不需要配置环境)特别有价值。
4. 命令兼容性是迁移的关键
Patinae最聪明的决策是保持99%的PyMOL命令兼容。结构生物学领域有数十年积累的.pml脚本和PyMOL工作流。如果要求用户学习全新的命令语言,迁移成本会阻止采用。Patinae让你带着现有的脚本和肌肉记忆迁移——这是一个降低门槛的工程决策,不是技术妥协。
项目信息
仓库:github.com/zmactep/pymol-rs
许可证:BSD 3-Clause
语言:Rust (核心), Python (绑定), TypeScript (web viewer)
版本:v0.4.3
二进制大小:~12MB(单文件可执行)
快速开始:
一句话总结:Patinae不是"用Rust重写的PyMOL"——它是一个现代分子可视化平台:12MB单文件、WebGPU渲染、三栖部署(桌面/Python/浏览器)、15个独立crate、99% PyMOL命令兼容。它证明了25年后,Warren DeLano的开源精神可以在Rust和WebGPU的时代继续传承。