一、📌 引言
在使用 3D Gaussian Splatting(3DGS)進行三維重建和可視化的過程,SIBR_gaussianViewer_app 是一款官方推薦的本地可視化工具,允許我們在 GPU 上實時瀏覽重建結果。然而,許多用戶在啟動該工具時,會遇到如下報錯:
而且可視化界面會閃退,該錯誤雖簡單,卻阻礙了整個可視化流程的展開。本文將基于實際案例,詳細解析錯誤成因,并提供一個無需改代碼即可成功運行的實戰級解決方案
二、🧠 報錯溯源分析
運行如下命令:
./SIBR_gaussianViewer_app -m /home/sunshine/Project/darkgs/output/7a0f12c0-7
出現日志信息:
[SIBR] ## ERROR ##: FILE .../Utils.cppLINE 82, FUNC loadFileFile not found: uv_mesh.vert
terminate called after throwing an instance of 'std::runtime_error'
這表明程序在嘗試加載 GLSL 著色器 uv_mesh.vert 文件時失敗,觸發異常崩潰。
在日志中,我們可以看到以下關鍵線索:
正確加載了 COLMAP 的 SfM 數據(例如 points3D.bin);
成功讀取了高斯點(193073 個);
初始化 OpenGL 過程也未報錯;
最后失敗點為:嘗試加載 uv_mesh.vert 著色器失敗,觸發 C++ 層的異常,導致程序崩潰。
這一錯誤本質上是 SIBR 框架依賴某些 GLSL 著色器文件未找到,其核心由如下函數觸發:
std::string loadFile(const std::string &filename) {std::ifstream file(filename);if (!file.is_open())throw std::runtime_error("File not found: " + filename);...
}
三、🎯根本原因分析
SIBR 使用 OpenGL 渲染高斯點云時,需要加載多個著色器文件(例如 .vert, .frag 等),但程序使用的是 相對路徑加載資源文件,默認在可執行文件當前路徑下尋找 shaders/core/uv_mesh.vert。
因此,如果你直接在 install/bin/ 下運行程序,而當前路徑下沒有 shaders/ 文件夾或著色器文件,就會導致加載失敗。
四、?解決方案
SIBR_gaussianViewer_app?在加載 shader 時 直接從“當前工作目錄”拿裸文件名,不會去讀?SIBR_PATH。
所以只要執行時所在的目錄里沒有 uv_mesh.vert 就會崩潰 ——?環境變量已經對,但程序根本沒去用它。
官方 issue #508 給的辦法:
讓 工作目錄 指向 shader 文件夾,或把 shader 扔到可執行旁邊。
# 進入 shader 目錄當工作目錄
cd ~/Project/darkgs/SIBR_viewers/install/shaders/core# 從這里啟動 Viewer(相對路徑回到 bin)
../../../bin/SIBR_gaussianViewer_app \-m /home/sunshine/Project/darkgs/output/RNN-0.1路徑解釋:
../../../ = 從 shaders/core → shaders → install → bin。
執行完畢就可以正常可視化了!
五、? 方案 A:建立軟鏈接其他方案可選(便于后續使用)
方案 A:建立軟鏈接
ln -s ~/Project/darkgs/SIBR_viewers/install/shaders ~/Project/darkgs/SIBR_viewers/install/bin/shaders
cd ~/Project/darkgs/SIBR_viewers/install/bin
./SIBR_gaussianViewer_app -m ...
方案 B:設置環境變量(部分版本支持)
export SIBR_RESOURCE_PATH=~/Project/darkgs/SIBR_viewers/install/shaders
./SIBR_gaussianViewer_app -m ...
SIBR 在某些版本中支持通過該變量設置資源路徑,適用于自動化腳本運行場景。
六、總結與建議
一句話總結: 該報錯并非缺少文件,而是路徑未對齊,調整運行目錄即可解決。
📌 核心結論:
報錯 uv_mesh.vert 缺失源于路徑問題;
推薦在包含 shaders/core/ 的目錄中運行程序;
也可通過軟鏈接或環境變量方式規避路徑問題。
🛠 建議:
可寫入一個運行腳本 run_viewer.sh,自動設置路徑;
若部署跨設備使用,務必將 shaders/ 文件夾隨模型一同打包。