← 返回 PaperDaily 视觉与图像

SC26最新!3DGS压缩粒子数据:65倍压缩PSNR超30dB,渲染快2300倍

3D高斯泼溅这个计算机图形学的网红,被Temple大学和阿贡国家实验室的团队跨界用到科学数据压缩上,结果直接碾压传统有损压缩器SZ3好几个身位。不仅压缩比高,还能实时交互渲染,宇宙学家们可以欢呼了。看完直呼:还能这么玩?

原论文信息如下:
论文标题:
3D Gaussian Splatting for Scientific Particle Data Compression and Rendering
发表日期:
2026年7月(arXiv)
发表单位:
Temple University, Argonne National Laboratory
(会议:SC26)
原文链接:
https://arxiv.org/pdf/2607.22956v1.pdf
开源代码链接:
https://github.com/BoJiang03/ParticleGS

引言

宇宙学模拟动辄跟踪数千亿个粒子,一个快照就能塞满几百TB的硬盘。存储难、传输慢、交互渲染更是奢望——用ParaView渲染281M粒子的一帧,需要3.6秒,调整一下粒子半径又要重新跑3.6秒。传统有损压缩器如SZ3虽然能把数据体积压下来,但它们在数据空间里做误差控制,对渲染出来的图像质量几乎不管。结果呢?压缩完再渲染,画面上出现一条条坐标轴对齐的条纹伪影(图1),宇宙大尺度结构的纤维状网络全被破坏了。
Temple大学和阿贡国家实验室的团队换了个思路:既然最终要看的是渲染图,为什么不直接优化渲染图的质量呢?于是他们把3D高斯泼溅(3D Gaussian Splatting)这个在NeRF时代火遍计算机图形学的技术,搬到了科学粒子数据压缩里,搞出了ParticleGS。

问题背景:粒子数据压缩的痛点

先说说现有的路子为什么行不通。
传统有损压缩器的窘境。SZ3、ZFP这类通用科学数据压缩器,设计初衷是针对网格结构数据的,它们把每个粒子坐标的x、y、z当成三个独立的一维数组各自压缩。这样一来,坐标轴之间的量化误差完全不相关,渲染出来就出现图1里那种沿着坐标轴的条纹伪影。而且,数据空间的误差指标完全不能反映渲染质量——SZ3报告自己的点误差很小,但渲染出来的PSNR只有24.7 dB(65倍压缩),而人眼一看就知道坏了。
粒子专用压缩器的短板。LCP这种为粒子数据定制的压缩器,通过重排粒子顺序来利用空间局部性,压缩比可以比SZ3高不少,但它的量化误差是空间相关的,在65倍压缩下PSNR只有20.3 dB,比SZ3还差。所以这条路也走不通。
神经隐式表示的局限。NeurComp、CoordNet这类方法只适用于网格结构数据,处理不了非结构化的粒子云,更不支持在推理时调整可视化参数(半径、透明度)。
一句话总结:传统方法要么压缩后渲染质量差,要么不支持交互式参数调整,要么只能处理网格数据。ParticleGS直接跳过数据重建,用3DGS学一个紧凑的场景表示,端到端优化渲染图像的质量。
图1:281M HACC粒子的近景渲染对比。SZ3在63倍压缩下引入坐标轴对齐的条纹伪影,破坏了原始数据中的纤维状结构。
图1:281M HACC粒子的近景渲染对比。SZ3在63倍压缩下引入坐标轴对齐的条纹伪影,破坏了原始数据中的纤维状结构。

方法概述

ParticleGS的整体流程与传统压缩-解压-渲染路线形成鲜明对比(图2)。传统方式需要先有损压缩,再完整解压,然后用ParaView逐帧渲染,每个参数变化都得重新执行整个管线,一帧3.6秒。ParticleGS则是一次性训练一个紧凑的3DGS模型(含VizMapper),之后就可以实时交互渲染,帧率高达662 FPS,同时支持动态调整可视化参数。
图2:传统压缩-解压-渲染管线(上方)与ParticleGS管线(下方)对比。ParticleGS一次训练(67分钟),之后即可实时渲染(662 FPS),支持参数动态调整。
粒子数据压缩的痛点:传统方法为何失效?
宇宙学模拟产生的粒子数据有多恐怖?HACC(硬件加速宇宙学代码)的单个快照就能达到数百TB,而像FIRE-2这样的星系形成项目,一个暗物质盒子就有2.68亿个粒子,存储和传输是天文数字。但最头疼的是交互式可视化——科学家需要调节粒子半径和透明度来揭示不同尺度的结构(比如宇宙大尺度纤维状网络),每调节一次参数,ParaView就得从原始数据重新渲染一帧。对于2.81亿粒子的HACC数据集,ParaView一帧要3.6秒,这哪里是交互?简直是幻灯片。
所以大家想到用有损压缩来减小数据体积。主流的科学数据压缩器,比如SZ3和ZFP,它们的工作原理是对数据点(这里是粒子坐标)进行预测、量化,保证每个点的重建误差不超过用户指定的阈值。听起来很美好,对吧?但问题来了:这些压缩器是在数据空间(浮点数坐标)里做误差控制,而科学家最终要看的是渲染图像。数据空间误差小,不代表渲染图像质量好。
更糟糕的是,SZ3这类压缩器把x、y、z三个坐标当成独立的一维数组分别压缩,量化误差之间完全不相关。渲染时这些微小误差累积,就产生了图1里那种沿着坐标轴方向、密密麻麻的条纹伪影。原本美丽的宇宙大尺度纤维状结构,瞬间变成了“条纹毛衣”。
那有没有专门为粒子数据设计的压缩器?有,LCP(Locality-preserving Compression of Particles)就是其中一个。它通过重排粒子顺序来利用空间局部性,压缩比确实比SZ3高不少。但它的量化误差是沿着空间填充曲线(space-filling curve)分布的,在65倍压缩比下,LCP渲染的PSNR只有20.3 dB,比SZ3的24.7 dB还差。为什么?因为空间相关的误差会形成结构性的伪影,比随机噪声更刺眼。
还有一个方案是用神经隐式表示(Neural Implicit Representations),比如NeurComp。但这些方法是为规则网格数据设计的,处理不了非结构化的粒子云,更别提用户要动态调节渲染参数了。
所以,传统方法的症结在于:它们优化的是数据重建误差,而不是最终渲染图像的质量。而科学家只关心渲染图好不好看、结构清不清晰。
图1:281M HACC粒子的近景渲染对比。SZ3在63倍压缩下引入坐标轴对齐的条纹伪影(左下),破坏了原始数据(左上)中的纤维状结构。ParticleGS的渲染结果(右上)几乎与原始数据无差别。
图1:281M HACC粒子的近景渲染对比。SZ3在63倍压缩下引入坐标轴对齐的条纹伪影(左下),破坏了原始数据(左上)中的纤维状结构。ParticleGS的渲染结果(右上)几乎与原始数据无差别。

ParticleGS:用3D高斯泼溅实现可视化感知压缩

既然最终评判标准是渲染图像,那为什么不直接优化渲染图像的质量呢?Temple大学和阿贡国家实验室的团队从这个思路出发,引入了计算机图形学界的网红——3D高斯泼溅(3D Gaussian Splatting,简称3DGS)。
3DGS是Kerbl等人于2023年提出的场景表示方法,它用一堆各向异性的3D高斯函数(每个高斯有位置、协方差、不透明度、颜色等参数)来建模场景,并通过可微分光栅化(Differentiable Rasterization)端到端优化这些高斯参数,使得渲染出的图像和真实照片尽可能接近。相比于NeRF,3DGS渲染速度快了100-300倍,训练只需几分钟,而且模型非常紧凑——几万个高斯就能编码上亿粒子的视觉外观。
ParticleGS的整体流程如图2所示。传统管线(上方)需要:原始数据→有损压缩→完整解压→ParaView逐帧渲染。而ParticleGS(下方)的流程是:原始数据→训练一个紧凑的3DGS模型(含VizMapper,一次离线训练约67分钟)→之后就可以实时交互渲染,帧率高达662 FPS,还支持动态调整可视化参数(半径、透明度)。作为副产品,还可以从训练好的3DGS模型采样恢复粒子位置,用于后续分析。
图2:传统压缩-解压-渲染管线(上方)与ParticleGS管线(下方)对比。ParticleGS一次性训练(67分钟),之后即可实时渲染(662 FPS),支持参数动态调整。
图2:传统压缩-解压-渲染管线(上方)与ParticleGS管线(下方)对比。ParticleGS一次性训练(67分钟),之后即可实时渲染(662 FPS),支持参数动态调整。
具体来说,ParticleGS的训练过程分为三步:

第一步从原始粒子云中均匀采样约20万个粒子作为初始化点云,用于3DGS的种子高斯。注意,整个训练用的真实图像(Ground Truth)是基于全部2.81亿粒子用ParaView渲染的,而不是只基于这20万粒子。

第二步使用多阶段、多分辨率、多轨道(Multi-orbit)的训练策略。训练时相机沿着三条不同距离的轨道(远、中、近)围绕粒子体积旋转,并且逐步提高渲染分辨率:第一阶段在1920×1080下训练1.2万迭代,第二阶段在5760×3240下训练2.7万迭代。这样模型既学到全局结构,又学到局部细节。

第三步训练时,粒子半径和透明度不是固定的,而是通过Beta分布随机采样,让模型学会适应不同的可视化参数。VizMapper模块(后面细讲)接收这些参数并调整高斯的不透明度和尺度。

图4:多距离相机轨道。三条轨道(远1.0×、中0.7×、近0.5×基线半径)包围归一化的粒子体积,提供远距离概览和近距离内部视图。
图4:多距离相机轨道。三条轨道(远1.0×、中0.7×、近0.5×基线半径)包围归一化的粒子体积,提供远距离概览和近距离内部视图。
值得注意的细节:ParticleGS使用的损失函数是纯L1损失(加内容掩码Content Mask),没有用标准3DGS中的DSSIM项。为什么?因为科学渲染图像大部分区域是黑色背景,DSSIM信号被背景主导,加上它会使模型大小增加68%而掩码PSNR没有提升。另外,球谐函数(Spherical Harmonics, SH)只用了0阶(即纯色),因为粒子渲染没有视角相关的颜色变化,这样又省了59%的模型大小。

VizMapper:轻量网络让一个模型适配所有可视化参数

这是ParticleGS最具工程巧思的贡献。科学可视化中,用户经常需要调节两个关键参数:粒子半径r和透明度α。不同参数揭示不同的结构——大半径、低透明度展示大尺度纤维网络;小半径、高透明度展示单个密度的细节。标准3DGS训练时只能固定一组渲染参数,一旦用户想换参数,要么重新训练(几乎不可能),要么训练时混合所有参数让模型去“平均”,结果就是模糊一片。
VizMapper(Visualization Parameter Mapper)是一个仅含4,610个参数的3层MLP,输入4个值:全局参数变化(相对默认值的比值减1)、两个归一化的高斯属性(平均log尺度、不透明度logit),输出两个tanh约束的残差修正(δs和δo)。
具体来说,令默认半径为r0、透明度为α0,当前参数为r和α,则输入的全局变化为f_r = r/r0、f_α = α/α0,输入向量为(f_r-1, f_α-1, 归一化的log尺度, 归一化的logit不透明度)。MLP输出δs和δo后,修正后的尺度s' = s × f_r × (1+δs),修正后的不透明度logit o'_logit = logit(o) + log(max(f_α(1+δo), ε)),其中ε是防止不透明度变零的下界。
这个小小的网络可以跟3DGS的整个优化过程一起端到端训练。训练时,每个批次随机采样半径r和α(来自围绕默认值的Beta分布),VizMapper学习如何根据全局参数调整每个高斯个体的空间范围和不透明度。关键是输出层的tanh给出了残差边界(δs∈[-0.1,0.1], δo∈[-0.3,0.3]),并且初始化时所有参数为0,这样网络一开始相当于恒等映射(不修改任何高斯),不会干扰早期的几何优化。
图3:VizMapper架构。一个轻量MLP将每高斯属性和全局可视化参数映射到尺度和不透明度修正。
图3:VizMapper架构。一个轻量MLP将每高斯属性和全局可视化参数映射到尺度和不透明度修正。
消融实验显示,去掉VizMapper(改用固定的平均参数),掩码PSNR从31.75 dB暴跌到26.24 dB——下降了5.51 dB。这说明VizMapper的修正效果非常显著。

分块训练+全局微调:突破单模型容量瓶颈

当粒子数据体积巨大(比如2.81亿粒子),单个3DGS模型很难同时捕捉所有空间尺度上的精细结构。ParticleGS引入了基于KD-tree的空间分块训练策略。
具体做法是:用KD-tree将原始粒子体积递归地沿着最长轴二分,直到每个块包含大致等量的粒子数。每个块独立地在自己的局部坐标系中训练一个3DGS模型(包含自己的VizMapper),各个块可以在多GPU上并行训练。训练完成后,把每个块的3DGS高斯从局部坐标映射回全局坐标系,合并成一个统一的模型。
合并后的模型难免在块边界处产生接缝(seams),所以需要全局微调(Global Fine-tuning)来修复这些接缝,并重新校准VizMapper以适应合并后的高斯分布。微调在较低分辨率(1920×1080)上进行6万迭代,前3万迭代开启密度调整(Densification),允许模型在接缝处新增高斯来修补。微调时也放宽了VizMapper的修正范围(δo max从0.3提高到0.8,δs max从0.1提高到0.3),给网络更大的适应空间。
图5:空间分块训练管线。KD-tree将粒子体积划分为K个块,每个块独立并行训练,合并后全局微调修复接缝。
图5:空间分块训练管线。KD-tree将粒子体积划分为K个块,每个块独立并行训练,合并后全局微调修复接缝。
实验表明,单块模型(171k高斯)在290倍压缩下达到28.80 dB PSNR;4块模型(378k高斯)在85倍压缩下达到29.22 dB;8块模型(769k高斯)在65倍压缩下达到30.03 dB。分块确实带来了实打实的质量提升,而且8块模型可以并行训练,总训练时间只比单块模型多不到两倍。

性能炸裂:65倍压缩下PSNR超30dB,渲染速度提升2300倍

论文在多个数据集上进行了全面的定量和定性评估,结果相当硬核。
首先看主数据集(HACC 2.81亿粒子)上的率失真性能。下表对比了ParticleGS不同配置(单块、4块、8块)与SZ3、LCP在不同压缩比下的PSNR。注意这里报告的是全帧PSNR(包括黑色背景)。
表VI:不同压缩方法在HACC 281M粒子数据集上的率失真比较。
表VI:不同压缩方法在HACC 281M粒子数据集上的率失真比较。ParticleGS在相同压缩比下PSNR显著领先SZ3和LCP。
从表中可以看到:SZB在65倍压缩下仅24.7 dB PSNR,而ParticleGS单块模型在290倍压缩下就达到28.80 dB;8块模型在65倍压缩下高达30.03 dB。领先优势非常明显:比SZ3好5-8 dB,比LCP好10-17 dB
再说渲染速度。在单块模型(171k高斯)上,ParticleGS使用VizMapper的动态参数适配,渲染一帧平均只需1.51毫秒,即每秒662帧(FPS)。而ParaView完全渲染一帧需要3.6秒(0.28 FPS)。ParticleGS比ParaView快了超过2,300倍,而且模型体积只有50 MB(65倍压缩),内存占用也小得多。
一个很酷的副产品是,训练好的高斯可以重新解释为高斯混合模型(Gaussian Mixture Model, GMM),通过对每个高斯按其不透明度赋予权重,然后采样,可以恢复出统计上接近原始粒子分布的新粒子集。实验表明,恢复的28.1亿粒子与原始粒子的功率谱(Power Spectrum)相关系数超过0.92,密度分布也高度一致。这为后续的科学分析(如两点相关函数)提供了有用的替代品。
论文还测试了跨数据集泛化能力:将HACC上训练的模型直接用到另一个HACC快照和FIRE-2暗物质模拟上,没有调整任何超参数,PSNR分别达到27.8 dB和27.2 dB。这说明ParticleGS学到的表示具有一定通用性。
表III:ParticleGS在HACC和FIRE-2数据集上的泛化测试。不调整超参数即可达到27-29 dB PSNR。
表III:ParticleGS在HACC和FIRE-2数据集上的泛化测试。不调整超参数即可达到27-29 dB PSNR。
当然,ParticleGS并非万能。它的定位是——可视化感知的压缩表示,而不是通用数据压缩。它优化的是渲染图像质量,而不是单个粒子坐标的重建精度。如果需要精确恢复每个粒子的位置或ID,那ParticleGS不适用。另外,目前的方法只支持调整半径和透明度这两个可视化参数,其他参数(如颜色映射、传输函数)还没有支持。
表VII:渲染性能对比。ParticleGS(含VizMapper)达到662 FPS,比ParaView的0.28 FPS快2365倍。
表VII:渲染性能对比。ParticleGS(含VizMapper)达到662 FPS,比ParaView的0.28 FPS快2365倍。
最后看一下消融实验的细节(表I),它验证了每个组件的贡献:
表I:消融研究。VizMapper贡献最大(−5.51 dB),多分辨率训练和轨道相机也显著影响质量。
表I:消融研究。VizMapper贡献最大(−5.51 dB),多分辨率训练和轨道相机也显著影响质量。

龙迷三问

下面是龙哥对于大家可能的一些问题的解答:

Q1:为什么不用NeRF来做这事?NeRF不是也能做视图合成吗?A1:好问题。NeRF确实能做场景表示,但它有三大硬伤不适合粒子数据。第一,NeRF的训练和渲染都很慢(每帧需要大量采样点),对2.81亿粒子训练NeRF可能要好几天,渲染一帧也要几秒,达不到实时交互。第二,NeRF隐式表示不方便调整可视化参数——要改变粒子半径,你得重新训练。第三,NeRF不直接支持从模型采样恢复粒子坐标(密度场采样效率低)。3DGS的显式高斯表示可以天然地作为概率密度模型,采样恢复粒子位置非常自然。

Q2:VizMapper只在训练时见过Beta分布内的参数,遇到超出范围的参数会怎样?A2:论文在实验中确实测试了极端参数(如r=0.0025或0.0175),这些都在训练分布(r∈[0.0025, 0.0175])的边界上。如果用户提供的参数完全超出训练范围(比如r=0.1),模型的响应可能会不稳定,因为VizMapper的tanh输出被限制在[-0.1,0.3]内。但实际科学可视化中,用户很少会用到极端值,通常就在默认值附近探索。论文也建议,如果应用确实需要更宽的范围,可以重新训练VizMapper或增大δmax。

Q3:分块训练时,KD-tree的分块数K怎么确定?是不是越多越好?A3:论文中选了1、4、8三种配置。理论上更多块可以更好地局部建模,但有两个代价:一是块数增多会引入更多边界接缝,全局微调难度增加;二是合并后的模型高斯总数线性增长,存储和渲染开销也变大。实验表明4块到8块的提升已经不大(PSNR提升不到0.8 dB),而高斯数翻倍。实际使用中建议根据GPU内存和期望的压缩比来平衡。论文还提到,KD-tree分块是自动的,用户只需指定目标块数或每块粒子数。

如果你还有哪些想要了解的,欢迎在评论区留言或者讨论~

龙哥点评

论文创新性分数:★★★★☆

将3DGS从计算机图形学跨界应用到科学可视化压缩领域,并创造性提出VizMapper实现参数适配。虽然不是完全新理论,但场景转换和工程创新非常亮眼。

实验合理度:★★★★★

对比了SZ3和LCP两个主流基准,做了详尽的消融(每个组件分别验证),率失真曲线完整,泛化测试也覆盖了不同数据集和不同分辨率。实验设计严谨,结果可靠。

学术研究价值:★★★★☆

为科学可视化领域提供了一种全新范式——可视化感知压缩。这个思路可能会启发更多将渲染质量作为优化目标的工作,而非仅仅关注数据重建误差。

稳定性:★★★☆☆

在多个数据集上表现稳定,但验证仅限于宇宙学模拟(HACC和FIRE-2),尚未测试分子动力学等其他粒子类型。可能存在过拟合风险,需要更多场景验证。

适应性以及泛化能力:★★★★☆

不调超参数直接迁移到其他数据集效果良好,但都是同类型(暗物质粒子)数据。对于密度分布差异很大的数据集(比如分子动力学),可能还需要重新训练VizMapper。

硬件需求及成本:★★★☆☆

训练需要2块RTX PRO 6000 GPU,耗时67分钟(单块)到约2小时(8块)。推理时单GPU即可,渲染速度非常快。对于大多数研究机构来说硬件门槛中等,尚可接受。

复现难度:★★★★★

代码已在GitHub开源(https://github.com/BoJiang03/ParticleGS),提供了自动化复现脚本(`reproduce_ae.sh`),支持Chameleon云平台一键验证。代码质量高,依赖清晰,数据集可公开获取。复现难度很低。

产品化成熟度:★★★☆☆

可以作为ParaView的插件或独立可视化工具快速集成,但目前只支持半径和透明度两个参数调节。要支持更复杂的传输函数、多通道可视化还需要进一步开发。此外,模型只能用于可视化,不能用于需要精确粒子信息的分析任务。

可能的问题:

训练时需要大量真实渲染图作为监督,而这需要先渲染所有训练视图,可能成为瓶颈。另外,模型无法恢复单个粒子的精确位置,对于需要粒子ID追踪的某些科学分析完全不适用。最后,VizMapper的修正范围有限,无法处理超出训练分布太远的参数。

主要参考文献

[1] 3D Gaussian Splatting for Real-Time Radiance Field Rendering. Kerbl et al., ACM TOG 2023.
[2] SZ3: A Modular Framework for Composing Prediction-Based Error-Bounded Lossy Compressors. Liang et al., IEEE TPDS 2022.
[3] LCP: A Particle-Specific Lossy Compressor with Locality Preservation. Liu et al., IEEE VAST 2023.
[4] ParaView: An End-User Tool for Large-Data Visualization. Ahrens et al., Visualization Handbook 2005.
[5] HACC: Simulating Sky Surveys on Supercomputers. Habib et al., International Journal of High Performance Computing Applications 2019.

*本文仅代表个人理解及观点,不构成任何论文审核或者项目落地推荐意见,具体以相关组织评审结果为准。欢迎就论文内容交流探讨,理性发言哦~ 想了解更多原文细节的小伙伴,可以点击"阅读原文",查看更多原论文细节哦!       

end
3DGS压粒子,百万变千兆,实时交互不卡顿!
想跟龙哥一起探索更多AI黑科技?
加入龙哥读论文粉丝群,扫描下方二维码或者添加龙哥助手微信号加群:kangjinlonghelper。一定要备注:研究方向+地点+学校/公司+昵称(如 科学计算+北京+清华+龙哥),根据格式备注,可更快被通过且邀请进群。

『龙哥读论文』微信群目前包含:图像处理、大模型及智能体、自动驾驶及机器人、AI医疗及AI金融5个群
wechat_helper dianzan
转发文章 微博 X LinkedIn Facebook
龙哥读论文 · PaperDaily

本文基于龙哥读论文 PaperDaily 数据库整理,结合论文原文与工程视角进行解读。