一、前言
近几年,三维重建和实时渲染领域出现了一个非常热门的方向:3D Gaussian Splatting,简称 3DGS。
传统三维渲染通常依赖三角网格,也就是:
顶点 Vertex
索引 Index
三角形 Triangle
材质 Material
纹理 Texture
而 3D Gaussian Splatting 的思路不太一样。它不是用大量三角形去描述一个场景,而是使用大量带有位置、方向、尺度、颜色、透明度等属性的 三维高斯体 来表示场景。论文《3D Gaussian Splatting for Real-Time Radiance Field Rendering》提出这种表示方式后,能够在保持较高视觉质量的同时实现实时新视角渲染。论文摘要中也明确提到,该方法面向实时显示,在 1080p 分辨率下达到实时渲染目标。(arXiv)

本文要复现的项目是 NVIDIA 开源的:
nvpro-samples / vk_gaussian_splatting
这是一个基于 Vulkan API 的 3D Gaussian Splatting Viewer。注意,它不是训练工具,不负责从图片生成 3DGS 模型,而是负责把已有的 .ply 或 .spz 高斯模型实时渲染出来。官方 README 明确说明该项目是一个 viewer,不生成或训练模型,而是尽可能高速地可视化已有模型。(GitHub)
项目本身支持多种渲染管线,包括:
Rasterization 光栅化渲染
Ray Tracing 光线追踪渲染
Hybrid Rendering 混合渲染
Unscented Transform
Stochastic Transparency
Lighting and Shadows
官方文档也将这些内容作为 Deep Dives 技术章节单独展开,说明这个项目不仅适合看效果,也很适合研究 Vulkan 渲染管线和实时渲染优化。(GitHub)
二、为什么选择 vk_gaussian_splatting?
我选择这个项目主要有几个原因。
第一,它足够新。项目在 2025 年之后持续更新,README 中的更新记录显示,2026 年 4 月发布的 2026.1.7 版本加入了预编译二进制包、新文档站点、渲染管线选择器、导航工具栏、排序缓冲区修复等内容。(GitHub)
第二,它不是一个简单 demo,而是一个实验平台。NVIDIA 官方技术博客介绍该项目时提到,vk_gaussian_splatting 是 NVIDIA DesignWorks Samples 中的 Vulkan 示例,用于展示实时 Gaussian Splatting,并帮助开发者比较不同渲染方式、性能、质量和实现权衡。(NVIDIA Developer)
第三,它的 Vulkan 技术点比较集中。普通 Vulkan 入门项目可能只讲三角形、纹理、PBR,但这个项目会涉及:
Vulkan Pipeline
Mesh Shader
Compute Shader
GPU Sorting
Radix Sort
Ray Tracing Pipeline
Acceleration Structure
Shader Binding
透明度混合
大规模粒子渲染
显存管理
对于想研究现代图形学渲染的人来说,这个项目的价值比普通模型查看器更高。
三、本文目标
本文主要完成以下内容:
1. 安装 Vulkan 运行环境
2. 下载并运行官方预编译版本
3. 下载 3DGS 测试模型
4. 从源码编译 vk_gaussian_splatting
5. 使用 PLY 模型进行实时渲染
6. 分析项目目录结构
7. 总结常见报错和解决方法
8. 给出后续源码研究方向
本文使用 Windows 作为主要操作环境,Linux 用户也可以参考官方文档中的依赖说明。
四、项目运行要求
官方文档给出的运行环境要求如下:
NVIDIA GPU
64-bit Windows 或 Linux
Vulkan 1.4 SDK
官方 Getting Started 页面明确列出了这些 Runtime Requirements。(NVPro Samples)
如果只是运行预编译版,主要需要:
NVIDIA 显卡驱动
Vulkan SDK
一个支持 Vulkan 的 NVIDIA GPU
如果要从源码编译,还需要:
Git
CMake 3.22 或更高版本
Visual Studio 2019 / Visual Studio 2022
支持 C++20 基础特性的编译器
官方源码编译要求中写到:需要 CMake 3.22 或更高版本、支持基础 C++20 特性的编译器、Windows 下使用 MSVC 2019,Linux 下使用 GCC 10.5 或 Clang;CUDA 12.6 是可选项,主要用于启用 NVML GPU 监控。(NVPro Samples)
五、环境准备
1. 安装 NVIDIA 显卡驱动
首先确保电脑使用的是 NVIDIA 显卡。推荐 RTX 系列显卡,例如:
RTX 2060
RTX 3060
RTX 3070
RTX 4060
RTX 4070
RTX 4080
RTX 4090
安装驱动后,在命令行中输入:
nvidia-smi
如果能看到类似下面的信息,说明显卡驱动正常:
NVIDIA-SMI 版本信息
GPU Name
Driver Version
CUDA Version
显存占用情况
例如:
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.xx Driver Version: 560.xx CUDA Version: 12.x |
| GPU Name Memory-Usage |
| 0 NVIDIA GeForce RTX 3060 1024MiB / 12288MiB |
+-----------------------------------------------------------------------------------------+
这里不要求一定安装 CUDA。CUDA 对这个项目不是强制要求,官方文档也说明 CUDA 12.6 是可选项,主要用于 NVML GPU 监控。(NVPro Samples)
2. 安装 Vulkan SDK
进入 LunarG Vulkan SDK 官网,下载 Windows 版本 Vulkan SDK。
安装完成后,在命令行中输入:
vulkaninfo --summary
如果环境正常,会输出当前 Vulkan 实例、物理设备、驱动、扩展等信息。
你应该重点查看:
GPU 是否被识别
Vulkan API Version 是否正常
显卡驱动是否支持 Vulkan
如果系统提示:
'vulkaninfo' 不是内部或外部命令
说明 Vulkan SDK 没有安装成功,或者环境变量没有生效。可以重启电脑,或者检查 Vulkan SDK 的 Bin 路径是否加入了系统环境变量。
3. 安装 Visual Studio
如果只运行预编译版本,可以不装 Visual Studio。
如果要源码编译,建议安装:
Visual Studio 2022
安装时勾选:
使用 C++ 的桌面开发
Windows 10 / Windows 11 SDK
MSVC 编译工具
CMake 工具
安装完成后,可以打开:
x64 Native Tools Command Prompt for VS 2022
然后输入:
cl
如果出现 Microsoft C/C++ 编译器版本信息,说明 MSVC 环境正常。
4. 安装 Git 和 CMake
检查 Git:
git --version
检查 CMake:
cmake --version
建议 CMake 版本不低于:
3.22
因为官方源码编译要求就是 CMake 3.22 或更高版本。(NVPro Samples)
六、方式一:使用官方预编译版本运行
如果你的目标是先看效果,建议先用预编译版。这样可以快速确认显卡、Vulkan 环境、模型数据是否正常。
官方文档说明,Windows 64-bit 和 Linux 64-bit 的预编译包可以从 GitHub Releases 页面下载。(NVPro Samples)
下载后解压,例如解压到:
D:\vk_gaussian_splatting
目录中一般会看到:
vk_gaussian_splatting.exe
双击运行即可。

也可以使用命令行运行:
cd /d D:\vk_gaussian_splatting
vk_gaussian_splatting.exe
如果要启动时直接加载模型,可以这样:
vk_gaussian_splatting.exe D:\3dgs_models\flowers_1.ply

官方运行格式也是:
./vk_gaussian_splatting.exe [path_to_ply]
其中 [path_to_ply] 是可选参数。(NVPro Samples)
七、下载测试模型
3DGS 模型一般使用 .ply 格式保存。
这里要注意:普通点云 .ply 和 3DGS .ply 不是一回事。
普通点云 .ply 可能只包含:
x
y
z
r
g
b
而 3DGS 的 .ply 通常还包含:
position
scale
rotation
opacity
spherical harmonics
covariance-related data
因此,不是所有 .ply 文件都能被 3DGS Viewer 正确加载。
官方 README 推荐先下载一个轻量级的 flowers 模型,并把 flowers_1.ply 拖入窗口中。(GitHub)
官方 Getting Started 页面也说明,应用支持:
INRIA 3DGS 格式的 PLY 文件
Niantic SPZ 格式的 SPZ 文件
并且可以通过命令行、File > Open、拖拽到窗口三种方式打开模型。(NVPro Samples)
推荐第一次测试使用:
Bouquet of Flowers
这是 NVIDIA 提供的小型测试模型。官方数据集页面也说明,该模型会在 CMake 默认构建时自动下载,也可以手动下载。(NVPro Samples)
八、加载 PLY 模型
启动程序后,有三种加载方式。
方式 1:拖拽加载
直接把:
flowers_1.ply
拖入程序窗口。
这是最简单的方式。
方式 2:菜单加载
在软件中选择:
File > Open
然后选择你的 .ply 文件。
方式 3:命令行加载
例如模型路径是:
D:\3dgs_models\flowers\flowers_1.ply
可以执行:
cd /d D:\vk_gaussian_splatting
vk_gaussian_splatting.exe D:\3dgs_models\flowers\flowers_1.ply
如果加载成功,窗口中应该能看到花束的 3DGS 渲染结果。
九、方式二:从源码编译
预编译版适合快速体验,但如果要研究渲染引擎,最终一定要源码编译。
源码编译的价值在于:
可以调试 C++ 代码
可以修改 shader
可以研究不同渲染管线
可以分析 GPU buffer 数据结构
可以修改排序算法
可以加入自己的模型加载逻辑
可以写实验报告或博客
1. 克隆项目
建议新建一个源码目录:
D:
mkdir D:\Code
cd /d D:\Code
然后克隆项目:
git clone --recurse-submodules https://github.com/nvpro-samples/vk_gaussian_splatting
cd vk_gaussian_splatting
这里必须带上:
--recurse-submodules
因为项目依赖子模块。如果忘记带这个参数,后面可能会出现第三方库缺失、CMake 找不到文件等问题。
官方源码构建文档给出的命令也是:
git clone --recurse-submodules https://github.com/nvpro-samples/vk_gaussian_splatting
cd vk_gaussian_splatting
如果已经克隆过项目,但没有拉取子模块,可以补执行:
git submodule update --init --recursive
2. 配置 CMake
在项目根目录执行:
cmake -S . -B build
这个命令的含义是:
-S . 表示源码目录是当前目录
-B build 表示构建目录是 build
如果你不想让 CMake 自动下载默认 flowers 场景,可以使用:
cmake -S . -B build -DDISABLE_DEFAULT_SCENE=ON
官方文档也给出了这个参数,用于禁用默认 bouquet of flowers 场景的下载和自动加载。(NVPro Samples)
3. 编译 Release 版本
执行:
cmake --build build --config Release
第一次编译时间可能会比较长,因为项目会处理依赖、编译 C++ 代码、处理 shader 和相关资源。
编译完成后,官方给出的运行路径是:
./_bin/Release/vk_gaussian_splatting.exe [path_to_ply]
Windows 下可以执行:
_bin\Release\vk_gaussian_splatting.exe
或者直接加载模型:
_bin\Release\vk_gaussian_splatting.exe D:\3dgs_models\flowers\flowers_1.ply
十、完整 Windows 编译命令汇总
下面是完整流程,可以直接复制执行:
D:
mkdir D:\Code
cd /d D:\Code
git clone --recurse-submodules https://github.com/nvpro-samples/vk_gaussian_splatting
cd vk_gaussian_splatting
cmake -S . -B build
cmake --build build --config Release
_bin\Release\vk_gaussian_splatting.exe
如果要禁用默认模型下载:
D:
mkdir D:\Code
cd /d D:\Code
git clone --recurse-submodules https://github.com/nvpro-samples/vk_gaussian_splatting
cd vk_gaussian_splatting
cmake -S . -B build -DDISABLE_DEFAULT_SCENE=ON
cmake --build build --config Release
_bin\Release\vk_gaussian_splatting.exe D:\3dgs_models\flowers\flowers_1.ply
十一、Linux 编译补充
Linux 下除了 CMake、Git、编译器、Vulkan SDK 外,还需要安装额外依赖。官方文档给出的 Ubuntu 依赖如下:(NVPro Samples)
sudo apt install libx11-dev libxcb1-dev libxcb-keysyms1-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libtbb-dev
然后执行:
git clone --recurse-submodules https://github.com/nvpro-samples/vk_gaussian_splatting
cd vk_gaussian_splatting
cmake -S . -B build
cmake --build build --config Release
./_bin/Release/vk_gaussian_splatting [path_to_ply]
十二、程序运行效果观察
模型加载成功后,可以重点观察几个方面。
1. 渲染帧率
3DGS 模型的性能和高斯数量关系很大。
小模型可能非常流畅,大模型则会明显吃显存和算力。
官方数据集页面中提到,106M Particles City 这个模型在 rasterization 下大约需要 10GB 显存,而 ray tracing / hybrid 模式下大约需要 42GB 显存;15.3M Green House 在 ray tracing / hybrid 下大约需要 8GB 显存。(NVPro Samples)
所以如果你的显卡是 RTX 3060 12GB,建议先测试:
flowers
fountain
green house
不要一开始就直接加载 106M 粒子的城市模型。
2. 渲染管线切换
可以在程序菜单中切换不同 renderer pipeline,重点对比:
Mesh Shader 3DGS
Vertex Shader 3DGS
Ray Tracing 3DGRT
Unscented Transform 3DGUT
Hybrid Rendering
Stochastic Transparency
不同管线的目标不同:
光栅化管线:速度快,适合实时预览
光追管线:更适合研究粒子求交和高级光照
混合管线:在质量和性能之间折中
随机透明度:用于改善排序和透明混合相关问题
3. 透明度和排序
3D Gaussian Splatting 的一个核心问题是透明度混合。
普通三角网格渲染中,如果物体不透明,可以使用深度测试解决遮挡关系。但 3DGS 中每个高斯 splat 通常具有透明度,需要进行 alpha compositing。
NVIDIA 技术博客中提到,由于 Gaussian splats 需要从后到前排序以进行正确的 alpha 混合,因此项目提供了 GPU Radix Sort 和 CPU 异步排序两种方案。(NVIDIA Developer)
这也是这个项目非常值得研究的地方。
十三、项目目录结构分析
克隆项目后,可以重点看下面这些目录和文件:
vk_gaussian_splatting
├── 3rdparty
├── cmake
├── docs
├── nvpro_core2
├── shaders
├── src
├── benchmark.py
├── benchmark_3dgrt.cfg
├── benchmark_3dgs.cfg
├── benchmark_3dgut.cfg
├── CMakeLists.txt
├── README.md
└── VERSION
GitHub 仓库页面也能看到项目包含 3rdparty、cmake、docs、nvpro_core2、shaders、benchmark.py、多个 benchmark 配置文件等内容。(GitHub)
下面简单说明几个重点。
1. src 目录
src 是 C++ 源码核心目录。
你后续研究时应该重点关注:
应用初始化
Vulkan 设备创建
资源加载
PLY / SPZ 数据解析
Gaussian 数据组织
GPU Buffer 上传
Renderer Pipeline 创建
UI 交互
相机控制
场景管理
如果你想真正理解它的运行流程,建议从程序入口开始看,然后沿着模型加载流程一路追踪到渲染管线创建。
2. shaders 目录
shaders 是最重要的目录之一。
3DGS 的很多核心逻辑都在 shader 里完成,例如:
高斯投影
屏幕空间 splat 计算
颜色计算
透明度混合
排序索引使用
ray tracing 求交
hybrid rendering 相关逻辑
README 更新记录中也提到,项目在 2025 年 10 月从 GLSL 迁移到了 SLANG。(GitHub)
因此你研究源码时,不要只看 C++,还要重点看 shader。
3. benchmark.py
这个文件用于性能测试。
NVIDIA 技术博客介绍项目时提到,该 sample 提供了 benchmarking system、profiling feedback、GPU timings 等能力,用于帮助开发者理解性能、质量和实现权衡。(NVIDIA Developer)
如果你想写更深入的博客,可以用 benchmark 对比:
不同模型
不同渲染管线
不同排序方式
不同显卡
不同分辨率
不同抗锯齿设置
4. docs 目录
如果网络打不开在线文档,可以直接看本地 docs 目录。
README 中也说明,离线情况下可以浏览仓库中的 docs markdown 页面。(GitHub)
这个目录适合用来理解:
Rasterization
Ray Tracing
Unscented Transform
Hybrid Rendering
Stochastic Transparency
Lighting and Shadows
十四、常见问题与解决方法
1. 运行时报 Vulkan 错误
先检查:
vulkaninfo --summary
如果命令不存在,说明 Vulkan SDK 没有安装好。
如果命令存在但识别不到显卡,优先更新 NVIDIA 驱动。
2. 找不到 vk_gaussian_splatting.exe
如果你是源码编译,注意它不一定在 build 目录里,而是在:
_bin\Release\vk_gaussian_splatting.exe
官方文档给出的运行路径也是:
./_bin/Release/vk_gaussian_splatting.exe [path_to_ply]
3. CMake 报子模块缺失
如果出现第三方库缺失,执行:
git submodule update --init --recursive
然后重新配置:
rmdir /s /q build
cmake -S . -B build
4. CMake 下载默认模型很慢
可以禁用默认 flowers 场景下载:
cmake -S . -B build -DDISABLE_DEFAULT_SCENE=ON
官方文档中也提供了这个选项。(NVPro Samples)
5. 模型打开后效果不对
这可能不是程序错误,而是模型格式或渲染参数不匹配。
官方文档提醒:3D Gaussian 模型最好使用与重建时一致的渲染算法和设置;由于目前没有包含完整元数据的通用格式,用户往往需要手动调整渲染参数。(NVPro Samples)
例如:
Postshot 生成的模型
INRIA 原始 3DGS 模型
3DGRT 模型
3DGUT 模型
SPZ 模型
它们适合的渲染管线可能不同。
6. input.ply 打不开
如果你下载的是 INRIA 原始数据集,要注意不要打开 input.ply。
官方数据集页面说明,应该打开 point_cloud 子目录中的 PLY 文件,例如 7000 或 30000 iterations 对应的结果;input.ply 是 SfM 生成的原始点云,不是 3DGS 模型,不能作为 3DGS 文件加载。(NVPro Samples)
十五、源码研究路线
部署成功后,不建议马上乱改代码。可以按下面顺序研究。
第一阶段:理解 3DGS 数据结构
重点看:
PLY 文件如何读取
每个 Gaussian 包含哪些属性
属性如何上传到 GPU Buffer
数据是否压缩
颜色和 spherical harmonics 如何存储
可以重点关注:
position
scale
rotation
opacity
features_dc
features_rest
这些字段决定了高斯的位置、形状、透明度和视角相关颜色。
第二阶段:理解 Rasterization 管线
光栅化管线是最适合入门的部分。
可以重点研究:
每个 Gaussian 如何投影到屏幕
如何计算屏幕空间椭圆
如何进行 tile culling
如何排序
如何 alpha blending
Mesh Shader 和 Vertex Shader 的区别
NVIDIA 技术博客提到,该项目的初始实现基于 rasterization,并展示了两种 splat 渲染方式:一种使用 mesh shader,另一种使用 vertex shader。(NVIDIA Developer)
第三阶段:研究排序算法
3DGS 中排序非常关键。
可以重点研究:
GPU Radix Sort
CPU Async Sort
Back-to-front Sorting
Frustum Culling
Screen Size Culling
排序开销和渲染开销的关系
在透明渲染中,如果排序不准确,可能出现:
闪烁
半透明层次错误
局部混合异常
视角切换时画面跳动
NVIDIA 技术博客也明确说明,该项目提供 GPU Radix Sort 和 CPU 异步排序两种方案,用于处理 Gaussian splats 的后向前排序问题。(NVIDIA Developer)
第四阶段:研究 Ray Tracing / Hybrid 管线
当你理解光栅化管线后,可以继续研究:
3DGRT
3DGUT
Hybrid Rendering
Acceleration Structure
TLAS / BLAS
Ray Generation Shader
Closest Hit Shader
Miss Shader
项目 README 的 Deep Dives 中包含:
VK3DGRT --- Ray Tracing
VK3DGUT --- Unscented Transform
VK3DGHR --- Hybrid Rendering
这些章节正是后续深入研究的重点。(GitHub)
十六、实验建议
部署完成后,可以设计几个实验。
实验 1:不同模型渲染性能对比
记录:
模型名称
Gaussian 数量
显存占用
平均 FPS
GPU frame time
渲染管线
分辨率
可以做成表格:
| 模型 | 管线 | 显存占用 | FPS | 备注 |
|---|---|---|---|---|
| Flowers | Rasterization | 较低 | 高 | 入门测试 |
| Fountain | Rasterization | 中等 | 高 | 场景更复杂 |
| Green House | Rasterization | 较高 | 中高 | 适合 RTX 3060 以上 |
| City 106M | Rasterization | 很高 | 视显卡而定 | 官方建议约 10GB 显存 |
| City 106M | Ray Tracing / Hybrid | 极高 | 不建议普通显卡 | 官方说明约 42GB 显存 |
其中 City 和 Green House 的显存需求可以参考官方数据集说明。(NVPro Samples)
实验 2:不同渲染管线画质对比
可以截图比较:
Rasterization
Ray Tracing
Hybrid Rendering
Stochastic Transparency
观察:
边缘质量
透明度层次
闪烁情况
阴影效果
细节保留
运动时稳定性
实验 3:排序方式性能对比
对比:
GPU Radix Sort
CPU Async Sort
记录:
排序耗时
总帧耗时
FPS
显存占用
画面正确性
这个实验很适合写成深入博客,因为排序是 3DGS 实时渲染中的核心问题。
十七、适合插入的博客图片
图片 1:3DGS 与传统三角网格渲染对比图
建议放在"前言"后面。
图片内容:
左侧:传统三角网格模型,由大量三角形组成
右侧:3D Gaussian Splatting,由大量半透明椭球/高斯点组成
中间用箭头标注:Mesh Rendering vs Gaussian Splatting
图片 2:本地部署流程图
建议放在"环境准备"部分。
图片内容:
安装 NVIDIA 驱动
↓
安装 Vulkan SDK
↓
下载预编译包 / 克隆源码
↓
下载 PLY 模型
↓
运行 vk_gaussian_splatting
↓
加载 flowers_1.ply
↓
实时渲染
图片 3:程序成功运行截图
建议放在"加载 PLY 模型"之后。
图片内容:
软件窗口中显示 flowers_1.ply 渲染结果
右侧或上方显示渲染参数面板
底部显示 FPS / GPU timing / profiler
图片 4:源码编译命令截图
建议放在"从源码编译"部分。
图片内容:
命令行显示:
cmake -S . -B build
cmake --build build --config Release
编译成功后出现 vk_gaussian_splatting.exe
图片 5:不同渲染管线对比图
建议放在"实验建议"部分。
图片内容:
同一个 3DGS 模型
分别使用 Rasterization / Ray Tracing / Hybrid Rendering 渲染
每张图下面标注 FPS 和显存占用
十八、总结
本文完成了 NVIDIA vk_gaussian_splatting 项目的本地部署、模型加载和源码编译。
整个流程可以总结为:
安装 NVIDIA 驱动
安装 Vulkan SDK
下载预编译版本快速测试
下载 flowers_1.ply 模型
运行 vk_gaussian_splatting
从源码 clone 项目
使用 CMake 配置和编译
运行 _bin\Release\vk_gaussian_splatting.exe
加载 PLY 模型进行实时渲染
这个项目的价值不只是"能打开一个 3DGS 模型",更重要的是它提供了一个现代 Vulkan 渲染实验平台。它把 3D Gaussian Splatting、Mesh Shader、GPU Sorting、Ray Tracing、Hybrid Rendering、透明度混合、benchmark 和 profiling 结合在了一起。
如果只是看效果,下载预编译版本就够了。
如果想真正研究图形学渲染,就应该从源码入手,重点分析:
PLY / SPZ 模型加载
Gaussian 数据结构
GPU Buffer 上传
光栅化渲染管线
GPU Radix Sort
透明度混合
Mesh Shader
Ray Tracing Pipeline
Hybrid Rendering
Benchmark 系统
后续可以继续深入写几篇文章:
《Vulkan 3D Gaussian Splatting 源码分析:PLY 模型如何变成 GPU Buffer》
《3DGS 实时渲染中的透明度排序:GPU Radix Sort 与 CPU Async Sort 对比》
《从 Rasterization 到 Ray Tracing:vk_gaussian_splatting 渲染管线分析》
《Mesh Shader 在 3D Gaussian Splatting 中的应用》
《基于 Vulkan 的 3DGS 大模型渲染性能测试》
对于想研究现代图形学渲染的人来说,vk_gaussian_splatting 是一个非常值得复现和深入阅读的项目。