3D Gaussian Splatting:从技术原理到2026年前沿应用的全景解析
1. 它到底是什么?核心思想与表示方式
核心思想: 3D Gaussian Splatting(简称 3DGS)将三维场景表示为成千上万个半透明的椭球粒子,即 3D 高斯分布【1†source】。每个高斯粒子(Gaussian)带有以下可学习的参数:
- 位置:三维空间中的位置坐标(XYZ)。
- 形状与尺度:通常通过一个协方差矩阵来描述椭球的形状、大小和方向。为了便于优化,该矩阵常被分解为旋转矩阵 \(R\) 和缩放矩阵 \(S\),使得协方差 \(\Sigma = R S S^T R^T\),以保证其始终半正定。
- 颜色:每个高斯所呈现的颜色。为了支持视角相关的反射等效果,颜色通常采用球谐函数(Spherical Harmonics, SH)来表示,能够根据观察方向产生不同的颜色。
- 不透明度:高斯的透明度值,用于混合时控制对像素颜色的贡献。
这一表示方式与传统的隐式表示(如 NeRF 使用神经网络隐式场)截然不同,是一种显式且可微的表示【2†source】。场景不再是连续的神经网络场,而是由离散的高斯粒子集合构成,这为后续的高效渲染和直接操作带来了优势【2†source】。
可微分“泼溅”光栅化: 3DGS 的关键创新在于其可微分的光栅化器。传统图形学中的“splatting”技术将3D点当作“雪球”,投影到2D屏幕上留下“脚印”来形成图像【1†source】。3DGS 将这一思想应用于神经网络场景表示:将每个3D高斯粒子投影到2D屏幕上,形成椭圆足迹(footprint),然后按照深度顺序将这些足迹叠加(混合)起来,得到最终的渲染图像【1†source】。这一过程被设计成可微分的,意味着可以通过反向传播算法计算损失对所有高斯参数的梯度,从而利用多视角真实图像作为监督来优化这些参数,使渲染结果逼近真实照片【1†source】。简而言之,3DGS 将场景重建问题转化为一个大规模的可微分粒子渲染问题:通过梯度下降调整成千上万个高斯粒子的位置、形状、颜色和透明度,使它们组合出的图像在各个视角都与真实照片高度吻合。
起源与论文: 3D Gaussian Splatting 技术由 Kerbl 等人在 SIGGRAPH 2023 的论文《3D Gaussian Splatting for Real-Time Radiance Field Rendering》中提出【1†source】。该论文的核心贡献在于提出了一种既能在质量上媲美 NeRF,又能在速度上实现实时渲染的场景表示方法。这一创新迅速引发了图形学和计算机视觉领域的广泛关注,成为近两年最热门的研究方向之一【2†source】。
2. 整体流程长什么样?从照片到实时渲染的Pipeline
3DGS 的整体工作流程可以概括为以下几个阶段,从输入数据到最终的实时可交互场景:
- 多视角图像输入:首先,需要获取场景的多视角照片或视频帧作为训练数据。这些图像应覆盖场景的不同角度,以提供充分的视角信息。
- SfM 相机估计与稀疏点云:利用结构光束法(Structure-from-Motion, SfM)算法(例如 COLMAP)对输入图像进行处理,估计相机的位姿(即每张照片的拍摄位置和方向)并得到场景的稀疏点云【1†source】。这些稀疏点通常来自特征匹配,数量较少,但为后续初始化提供了基础。
- 高斯粒子初始化:将 SfM 得到的每个稀疏3D点初始化为一个3D高斯粒子【1†source】。初始时,这些高斯的位置、大小、颜色和透明度等参数可以设为简单初始值(例如点云位置、单位协方差、平均颜色等)。这样,场景被初步表示为一组高斯粒子集合。
- 可微分高斯光栅化渲染:进入核心的可微分渲染阶段。渲染器将当前的3D高斯集合按照相机参数投影到2D屏幕上,对每个像素计算所有高斯足迹的贡献并混合,生成渲染图像【1†source】。这一过程高度并行化地在 GPU 上执行,实现实时的帧率。
- 损失计算与梯度反向传播:将渲染图像与对应的真实照片进行比较,计算损失(例如 L1 范数或结构相似度 SSIM 等感知损失)【1†source】。然后通过反向传播算法,计算损失相对于每个高斯参数(位置、协方差、颜色、透明度)的梯度。
- 参数优化:利用得到的梯度,采用梯度下降等优化算法更新所有高斯粒子的参数【1†source】。经过多次迭代,高斯集合逐渐演化,使得从任意视角渲染出的图像越来越接近真实场景。
- 自适应密度控制:在训练过程中,引入自适应密度控制策略来动态调整高斯粒子的数量和分布【1†source】。当某些区域的重建误差较大时,系统会分裂(split)或克隆(clone)该区域的高斯粒子,增加细节表现力;对于不重要或过小的高斯,则予以删除;如果高斯过大无法精细表示,则将其分裂成多个更小的高斯;如果高斯过于密集冗余,则尝试合并【1†source】。这一机制使得模型能够从初始的稀疏点云逐步演化为包含数十万甚至上百万高斯的精细场景表示。
经过上述流程,最终得到一个由大量高斯粒子组成的场景模型。该模型可以在新的视角下以实时帧率进行高质量渲染,生成与真实照片几乎无法区分的图像【1†source】。整个训练过程通常在数十分钟内即可收敛,比传统 NeRF 模型动辄数小时的训练时间大幅缩短【1†source】。
3. 关键技术细节(偏图形学视角)
3.1 3D 高斯表示:参数化与分解
每个3D高斯本质上是一个三维椭球粒子,其内部密度和颜色按照高斯分布从中心向外衰减【1†source】。这种表示具有明确的几何意义,同时也非常适合进行数学优化。位置参数 \(\mu\) 确定了高斯在三维空间中的中心;协方差矩阵 \(\Sigma\) 则完全决定了高斯的形状、尺度和旋转方向【1†source】。一个各向异性的高斯椭球可以通过旋转和缩放来精确地贴合场景中物体的几何细节。
然而,直接优化一个完整的协方差矩阵存在困难:需要保证 \(\Sigma\) 始终是对称正定矩阵。为此,3DGS 将协方差矩阵分解为旋转矩阵 \(R\) 和对角缩放矩阵 \(S\) 的乘积形式 \(\Sigma = R S S^T R^T\)【1†source】。旋转矩阵 \(R\) 通常用单位四元数表示以方便优化,缩放矩阵 \(S\) 则包含三个轴向的尺度因子。通过这种分解,优化过程只需更新四元数和尺度因子,就能间接地优化协方差矩阵,同时保证其半正定性【1†source】。这种参数化方式不仅简化了优化约束,也使得每个高斯的形状变化更加直观可控。
颜色与不透明度: 每个高斯还带有颜色和不透明度属性。颜色通常使用球谐函数(SH)系数来表示【1†source】。球谐函数能够以少量系数近似表示任意视角相关的颜色分布,从而捕捉高光等视角相关的反射效果。例如,一个高斯的 SH 系数可以编码其在不同观察角度下呈现的颜色变化,使重建结果在物体表面产生逼真的高光。不透明度 \(\alpha\) 则决定了高斯对最终像素颜色的贡献程度。在渲染混合时,高斯的不透明度用于计算其颜色对像素的权重。
3.2 Splatting(泼溅)光栅化:从3D到2D的实时渲染
投影与足迹: 3DGS 的渲染过程借鉴了图形学中的Splatting 技术,但做了重要改进。传统 Splatting 将3D点当作圆形或椭圆形“雪球”投射到屏幕上【1†source】。在 3DGS 中,每个3D高斯粒子首先经过世界到相机的变换(即应用相机的外参矩阵),然后投影到2D图像平面,形成一个椭圆形的足迹(footprint)【1†source】。这个2D椭圆实际上就是3D高斯在屏幕上的投影区域,其形状和大小由高斯的协方差矩阵以及透视投影决定。
排序与混合: 由于高斯粒子是半透明的,多个高斯可能投影到同一像素区域,因此需要按照深度顺序对它们进行排序,然后进行alpha 混合【1†source】。3DGS 采用从前到后的顺序混合高斯的颜色贡献:对于每个像素,依次计算每个覆盖该像素的高斯的颜色贡献,并根据其不透明度进行线性混合【1†source】。这一过程类似于体渲染中的alpha compositing,但通过巧妙的排序和并行算法,可以在 GPU 上高效实现实时性能。
可微分实现: 与传统 Splatting 不同的是,3DGS 的光栅化过程是完全可微分的。这意味着在渲染得到图像后,可以将图像与真实照片的误差反向传播回每个高斯的参数。具体而言,每个像素的颜色由一系列高斯混合得到,因此可以计算该像素颜色对各高斯颜色、不透明度等的梯度。这些梯度信息告诉我们如何调整每个高斯的位置、形状或颜色,才能使渲染结果更接近真实。通过这种端到端的可微分管线,3DGS 实现了基于物理的渲染模型与数据驱动的优化的完美结合。
3.3 可微分渲染与自适应密度控制
可微分渲染是 3DGS 的核心技术之一。它使得直接对场景表示进行监督学习成为可能。训练时,3DGS 使用多视角的真实图像作为监督信号,通过最小化渲染图像与真实图像之间的差异来优化场景中的所有高斯参数【1†source】。这种基于图像的监督方式无需人工标注,只需一系列照片即可让模型学习到场景的几何和外观。由于高斯表示是显式的,模型可以直接对特定区域的高斯进行调整,而不像 NeRF 那样需要通过神经网络间接地修改场景表示。这带来了更高的优化效率和更好的收敛性。
自适应密度控制是 3DGS 训练过程中的另一项关键技术。初始时,场景中可能只有数百或数千个高斯,但随着训练进行,模型会自动增删高斯粒子,以达到最佳表示效果【1†source】。其基本思路是:如果某处场景在当前视角下重建效果不佳(误差较大),则增加该处的高斯数量以丰富细节;反之,如果某些高斯对渲染结果贡献很小或冗余,则减少或合并它们【1†source】。具体策略包括:
- 分裂(Split):当一个高斯覆盖了较大区域且误差较高时,将其分裂为多个更小的高斯,以提高细节分辨率。
- 克隆(Clone):对于复杂纹理或细节丰富的区域,复制附近的高斯以增加该区域的表示能力。
- 删除:如果一个高斯的不透明度极低或对图像贡献微乎其微,则将其从场景中移除,以减少冗余。
- 合并:当多个高斯非常接近且共同表示同一平坦区域时,可以将它们合并为一个更大的高斯,以精简模型规模。
通过这种动态密度调整,3DGS 模型能够自适应地分配更多的高斯粒子去表示场景中的重要细节区域,同时在平滑或次要区域保持较少的高斯数量。这不仅提高了重建质量,也控制了模型规模,使其在质量与效率之间取得平衡。最终训练得到的场景可能包含数十万甚至上百万个高斯粒子,但依然能够以实时帧率渲染,这得益于高效的并行渲染算法和合理的高斯分布策略。
4. 和 NeRF / Mesh / 点云等有什么不一样?显式 vs 隐式 的速度革命
为了更直观地理解 3DGS 的独特之处,下面将其与几种常见的3D表示方式进行对比:
| 表示方式 | 核心思想 | 优点 | 缺点 |
|---|---|---|---|
| 点云 | 离散的3D点集合 | 表示简单、获取方便(可直接从扫描得到),硬件加速成熟 | 无连续表面,需要后处理才能生成网格;单个点缺乏体积信息,难以直接渲染出照片级效果 |
| Mesh(网格) | 由顶点和多边形面片构成 | 成熟的工业标准,适合物理仿真和编辑修改;拓扑结构明确,易于与游戏引擎和动画管线对接 | 拓扑固定,对于动态场景或形状变化大的物体难以实时更新;需要预先建模或通过其他方式获取网格结构 |
| 体素(Voxel) | 将空间划分为规则的立方体网格 | 结构规整,适合卷积神经网络处理;易于进行布尔运算和物理模拟 | 分辨率受限,高分辨率场景会带来内存爆炸;难以达到照片级真实感,常用于粗糙的体积表示 |
| NeRF | 用神经网络隐式表示场景: 输入坐标 → 输出密度和颜色 |
能够重建高质量、连续的3D场景,尤其擅长复杂光照和细节;模型参数相对紧凑 | 渲染速度慢,一帧往往需要几秒甚至几分钟,难以实时交互;训练时间长,通常需要数小时 |
| 3D Gaussian Splatting | 显式的高斯粒子集合 + 可微分光栅化渲染 | 实时渲染:可在毫秒级生成高质量图像,支持交互应用; 训练相对快,通常数十分钟即可收敛; 支持动态场景,移动高斯即可表示运动; 表示显式,便于编辑和理解 |
模型规模大:一个场景常包含数十万~上百万高斯,模型文件数百MB~上GB,内存和存储占用高; 编辑工具尚不成熟,与传统3D软件的集成还在发展中; 极度精细的几何细节有时会出现锯齿或模糊; 场景的光照和材质信息“烘焙”在高斯中,再光照或编辑不如传统网格灵活 |
显式 vs 隐式: 3DGS 与 NeRF 的对比尤为关键。NeRF 使用隐式的神经网络来表示场景,需要通过体积光线步进(ray marching)来渲染,计算成本高昂【1†source】。而 3DGS 采用显式的高斯粒子,无需复杂的采样过程即可直接渲染,因此速度上有数量级的提升【1†source】。在质量方面,3DGS 能够重建出与 NeRF 相媲美的高保真场景,尤其擅长镜面反射、透明材质等视角相关效果【1†source】。同时,由于高斯表示是显式的,我们可以直接对特定高斯进行操作(例如移动、删除或替换),这为场景编辑和动态模拟提供了可能。相比之下,NeRF 的隐式表示更像一个黑箱,难以直接干预内部的几何结构。
速度与质量的平衡: 传统的方法要么在速度上占优(如基于网格的实时渲染),要么在质量上占优(如 NeRF 的照片级重建)。3DGS 则是在这两者之间找到了新的平衡点:既实现了 NeRF 级别的超写实渲染质量,又达到了传统光栅化引擎般的实时帧率【1†source】。这对于实际应用具有革命性意义——意味着我们可以用照片训练出一个场景模型,然后在游戏引擎或网页中实时漫游,而不需要像 NeRF 那样等待漫长的渲染。
动态场景支持: 点云和网格在表示动态场景时面临挑战:点云缺乏拓扑,难以直接动画化;网格的拓扑固定,对大幅度形变或新增物体不够灵活。而 3DGS 的高斯粒子天然支持动态:只需随时间移动或改变高斯的位置/属性,即可表示物体的运动和形变【1†source】。这种显式且离散的表示非常适合动态场景重建与 SLAM(同时定位与建图)等应用,近年也出现了将高斯溅射用于实时 SLAM 的研究【5†source】。
局限与权衡: 尽管 3DGS 在速度和质量上取得了巨大突破,但它并非完美无缺。首先,高斯模型的规模往往很大,一个场景包含数百万高斯、数百MB甚至上GB的模型文件并不罕见【1†source】。这给内存和存储带来了压力,也意味着模型压缩和优化成为重要的研究方向【3†source】。其次,高斯表示虽然直观,但目前编辑工具相对有限,与传统网格模型相比,高斯模型在后期编辑、材质调整等方面还不够成熟。再次,高斯溅射的几何保真度在某些极端细节上不如网格:例如毛发、细网格等结构,在高斯表示下可能出现锯齿或模糊,需要借助更精细的高斯分布或与其他表示(如表面网格)结合来改善。最后,高斯模型将场景的光照和反射信息“烘焙”在各个高斯中,这虽然带来了高质量的重建结果,但也意味着如果需要对场景进行重新光照或材质修改,会变得相对困难——不像网格模型那样可以方便地更换纹理或材质参数。这些问题目前也是研究者们关注的焦点,未来有望通过改进算法和工具来逐步解决。
5. 目前主要应用场景:从重建到生成,从VR到影视
3DGS 自问世以来,已经在多个领域展现出巨大的应用潜力。其主要应用场景包括:
- 新视角合成与照片级建模:这是 3DGS 最直接的应用。只需用手机或相机从不同角度拍摄一组照片,就能重建出一个可以在任意角度实时漫游的3D场景模型【1†source】。相比传统需要昂贵激光扫描或专业设备的3D建模方式,3DGS 让普通用户也能轻松创建照片级的3D内容。目前已有许多工具支持这一流程,例如 Nerfstudio、Luma AI、Polycam、Postshot 等,它们可以让用户上传照片,自动训练出高斯模型并实时查看渲染效果【1†source】。这种技术已被广泛应用于房地产展示、博物馆数字化、文化遗产保护等领域,让用户仿佛置身于真实场景之中。
- VR/AR 与数字孪生:高保真且实时的3D重建对于虚拟现实(VR)和增强现实(AR)应用至关重要。借助 3DGS,我们可以将真实世界场景快速数字化,并在 VR 环境中实时渲染,实现高度沉浸的体验【1†source】。例如,将一个建筑内部通过 3DGS 重建后,用户可以在 VR 中自由行走浏览;将工厂车间进行数字化,用于远程监控和培训。数字孪生领域也受益于 3DGS 的出现,它可以将物理世界实时映射到数字空间,用于城市规划、工程仿真等。一些研究已经开始探索将高斯模型与 AR 设备结合,实现实时的场景重建与叠加显示,为 AR 应用提供更真实的环境理解能力【10†source】。
- 自动驾驶与 SLAM:在自动驾驶和机器人领域,同时定位与地图构建(SLAM)是一项核心技术。3DGS 为 SLAM 提供了一种全新的地图表示形式——高斯粒子地图。相比于传统的点云地图,高斯地图不仅记录了几何位置,还包含了丰富的颜色和密度信息,可以用于生成高质量的实时渲染,帮助机器人或汽车“看到”周围环境的细节。同时,高斯表示的紧凑性和可微分性使其非常适合用于优化和更新。近年出现了将 3DGS 用于实时 SLAM 的方法(如 MonoGS、Photo-SLAM 等),这些方法在重建质量和实时性之间取得了平衡,证明了高斯溅射在动态环境下的应用潜力【5†source】。此外,高斯模型还可以融合 LiDAR 点云和摄像头图像,为自动驾驶提供高精度的环境地图和仿真环境,用于感知算法的训练和验证。
- 影视与游戏:在影视特效和游戏开发中,3DGS 同样展现出独特价值。一方面,它可以作为高真实感背景环境的来源。例如,用无人机扫描一座真实城市街道,生成高斯模型后导入游戏引擎,就能以极低成本获得照片级的场景背景。一些主流渲染器已经开始支持高斯溅射模型,例如 V-Ray 7 已经将高斯溅射作为场景对象的一种格式进行支持【1†source】。这意味着电影特效师可以将真实场景的高斯模型直接导入渲染管线,与 CG 物体合成,大大提高制作效率。另一方面,3DGS 也被用于数字角色和动态场景的重建。例如,利用多视角视频重建演员的高斯模型,用于虚拟制作或电影中的数字替身。在最新的电影制作中,已经出现了将 4D 高斯溅射用于捕捉演员动态表演的案例,实现比传统体积视频更细腻真实的效果【14†source】。此外,一些后期合成软件(如 After Effects)也出现了高斯溅射的插件,支持导入 .ply 格式的高斯模型进行合成和特效制作【1†source】。这表明 3DGS 正在逐步融入现有的内容创作管线,成为连接真实世界与虚拟世界的新桥梁。
6. 优点与局限:速度与质量的权衡
优点:
- 渲染质量高:3DGS 能够重建出极其精细且逼真的场景。由于每个高斯可以独立调整形状和颜色,模型能够捕捉细微的几何细节和复杂的视角相关效果(如镜面高光、透明材质)【1†source】。在许多场景下,其渲染结果与真实照片几乎难以区分。
- 实时渲染速度:得益于高效的 GPU 并行渲染算法,3DGS 模型可以在毫秒级生成一帧高质量图像,实现真正的实时交互【1†source】。这与 NeRF 等方法形成鲜明对比,后者通常需要几秒甚至几分钟才能渲染一帧【1†source】。实时性意味着 3DGS 模型可以广泛应用于交互式场景,如 VR、游戏、实时预览等。
- 训练效率高:相比 NeRF 模型动辄数小时的训练,3DGS 通常在数十分钟内即可收敛,大大降低了训练门槛【1†source】。这使得普通用户在消费级硬件上也能训练自己的模型成为可能。快速的训练也促进了模型的迭代优化和快速部署。
- 易于嵌入现有管线:由于采用显式表示,3DGS 可以方便地与传统图形管线对接。例如,可以很容易地将高斯模型转换为点云或网格进行进一步处理,或者在渲染时与传统几何体一起混合显示。这种兼容性使其更容易被现有工具链接受和集成。
- 动态场景友好:高斯粒子的离散显式特性使其非常适合动态场景。只需更新高斯的位置或属性,就能表示物体的运动和变形,无需像网格那样重新拓扑【1†source】。这为动态场景的实时重建与编辑提供了便利。
局限:
- 内存和存储占用大:高质量通常意味着大规模。一个高保真的 3DGS 模型往往包含数十万乃至上百万个高斯粒子,模型文件动辄数百MB甚至上GB【1†source】。这对内存和存储提出了较高要求,也意味着模型压缩和优化成为必要的研究方向【3†source】。
- 工具链尚不成熟:目前高斯模型的编辑、导入导出工具相对有限。与成熟的网格模型相比,高斯模型在主流3D软件中的支持还不够完善。这影响了其在工业界的直接应用。不过,随着技术普及,越来越多的插件和转换工具正在出现,例如将高斯模型导入 Unreal Engine 的插件等【1†source】。
- 几何细节的局限:在表现极度精细的几何细节时,高斯表示有时会遇到锯齿或模糊的问题。这是因为高斯本质上是一种平滑的近似表示,对于毛发、细网格等高频几何,可能需要极高密度的高斯才能逼近,从而带来性能开销。在一些极端情况下,高斯模型可能无法像网格那样精确地表示锐利的边缘和细节。
- 光照和材质的局限性:高斯模型将场景的光照和反射信息“烘焙”在各个高斯中,这使得渲染结果高度真实,但也意味着重新光照或材质编辑变得困难。如果需要改变场景的光照条件或材质属性,可能需要重新训练或精细调整大量高斯的参数,不如传统网格模型那样灵活直观。这也是当前研究的难点之一,如何让高斯模型支持可重光照和材质分离是值得关注的问题。
7. 想进一步上手,可以怎么学?从论文到实践
对于工程师和研究者来说,深入掌握 3DGS 可以按照以下路径逐步推进:
- 阅读原论文:首先研读 Kerbl 等人的原论文《3D Gaussian Splatting for Real-Time Radiance Field Rendering》(SIGGRAPH 2023)【1†source】。这是理解 3DGS 原理的基础。论文详细介绍了高斯表示、可微分光栅化算法以及训练流程。通过论文,可以了解模型的数学原理和实现细节。
- 运行官方示例:在理解原理后,实践是最好的老师。可以使用官方提供的代码仓库或第三方框架(如 Nerfstudio)来训练一个简单场景。例如,用一组自己拍摄的照片尝试训练一个高斯模型,感受从输入到输出的整个过程【1†source】。这有助于将理论与实践结合,加深对流程的理解。
- 参考中文教程和博客:对于中文读者,社区中已经出现了不少优秀的3DGS 原理简明教程和实现细节解析文章。这些教程往往以通俗易懂的方式讲解高斯溅射的工作机制,并辅以代码示例,非常适合入门。通过阅读这些资料,可以更好地消化论文中的数学推导,并了解一些工程实现的技巧。
- 尝试不同工具:亲手使用一些现成的 3DGS 工具和服务,可以加深对其应用的理解。例如,尝试使用 Luma AI 或 Polycam 这样的应用,用手机拍摄视频并自动生成高斯模型【1†source】。又或者使用 Postshot 等软件处理照片序列,生成可在网页中浏览的高斯场景。通过这些工具,可以直观地看到高斯模型的重建效果,并了解在实际应用中需要注意的事项(如拍摄技巧、模型优化等)。
- 探索前沿研究和应用:如果希望深入研究,可以关注 3DGS 相关的最新论文和开源项目。例如,阅读《A Survey on 3D Gaussian Splatting Applications》这样的综述,了解 3DGS 在分割、编辑、生成等下游任务上的最新进展【12†source】。或者关注 arXiv 上每日更新的 3DGS 相关论文列表,及时跟进前沿工作【13†source】。同时,也可以尝试自己实现一些扩展功能,比如动态场景的高斯重建、高斯模型的压缩与优化等,为该领域的发展贡献自己的力量。
通过以上步骤,你将能够从理论到实践全面掌握 3D Gaussian Splatting 技术。在这个过程中,你会深刻体会到它将真实世界数字化的强大能力,以及在速度与质量之间取得的精妙平衡。3DGS 正引领着我们走向一个照片级的数字孪生时代,其未来的发展值得我们持续关注和探索。【1†source】【11†source】