DAZAI CHEN
2026 EN

SplatRenderer:Unreal Engine 3D/4D Gaussian Splatting plugin

開源 UE5 plugin,使用自建 compute shader pipeline 即時渲染 3D 與 4D Gaussian Splats。2M+ Gaussians 達 100+ FPS。

[職稱] 開發者

概述

SplatRenderer 是一個免費開源的 Unreal Engine plugin,支援靜態 3DGS(.ply)與動態 4DGS 序列(.gsd)的即時渲染。整條渲染管線從零開始使用 UE5 的 RenderGraph API 與自訂 compute shader 打造。

Demo 在 RTX 4080 上跑 2M+ Gaussians 達 100+ FPS

GitHub: SplatRenderer Plugin|GitHub: 4DGS Converter|YouTube: Demo Reel|YouTube: Sequencer Demo

Demo Reel

影片中所有 4DGS 場景都是從單一影片拍攝生成。多個 splat 場景可以在同一個 UE 關卡中裁切、複製、排列。

SplatRenderer demo reel:3DGS + 4DGS 場景在 Unreal Engine 5 中運行  |  在 YouTube 觀看

v1.1 Demo Reel

SplatRenderer v1.1:Level Sequencer 整合  |  在 YouTube 觀看


從影片到 4DGS

Demo 中每個 4DGS 場景都是用 iPhone 拍攝的單一影片生成。一段錄影就能成為在 Unreal Engine 中播放的 Gaussian Splat 動畫序列。

原始影片
成果:UE5 中的 4DGS
原始影片
成果:4DGS 搭配 UE mannequin

流程:拍攝影片,用 Apple SHARP 訓練,透過 4DGS Converter 轉換成 .gsd,拖進 Unreal Engine。


功能

拖放式 Blueprint

BP_3DGSBP_4DGS 拖入關卡,設定檔案路徑、調整 Details panel 中的參數,完成。

Content Browser 中的 SplatRenderer blueprints
從 Content Browser 拖入 BP_3DGS 或 BP_4DGS
BP_3DGS details panel
BP_3DGS:檔案路徑、亮度、splat 大小、裁切體積
BP_4DGS details panel
BP_4DGS:序列播放、幀範圍、速度、音訊同步

裁切體積

使用 3D 裁切框搭配可拖曳的編輯器 widget,可即時裁切感興趣的區域。3DGS 與 4DGS 皆適用。

4DGS 場景搭配即時裁切體積

Level Sequencer 整合

v1.1 新增完整 Level Sequencer 支援。可在 UE Sequencer 時間軸上直接 keyframe Brightness、SplatScale、ScrubFrame、PlaybackSpeed、AudioVolume 與 Crop 參數。將 Playing 關閉後,即可透過 Scrub Frame keyframe 精準控制播放,打造電影級運鏡。

在 YouTube 觀看 Sequencer demo

多場景組合

在同一個關卡中裁切、複製、排列多個 splat 場景。每個實例獨立運作,擁有各自的播放控制。

單一 4DGS 場景
同一場景複製排列

場景展示

沙漠場景
城市場景

技術細節

渲染管線

Plugin 使用 UE5 的 RenderGraph API 與自訂 HLSL compute shader 建構了完整的 GPU 渲染管線。整條管線在 GPU 上運行,無 CPU readback,確保 render thread 不被阻塞。

每一幀依序經過:frustum culling、covariance projection、depth sorting,以及最終的 Gaussian alpha blending draw pass。管線設計能處理數百萬個 splat 並維持即時幀率。

渲染管線視覺化:從原始 splat 到最終成像

架構

Plugin 遵循 UE5 的 Scene Proxy 模式,將 game thread 邏輯(actor 設定、檔案載入、參數控制)與 render thread 執行(GPU dispatch、排序、繪製)清楚分離,確保 thread safety 並自然整合進 UE5 的渲染架構。

4DGS 的部分,自訂的 sequence player 在背景執行緒上預載幀數據,搭配 double-buffered textures,讓 GPU 永遠不會等待資料。

3DGS vs. 4DGS

Plugin 支援兩條渲染路徑:

  • 3DGS.ply):Gaussian 資料載入一次後存為 GPU textures,covariance 在載入時預計算,每幀成本極低。
  • 4DGS.gsd):每幀的 Gaussian 資料從自訂壓縮格式串流讀取,GPU 即時重建每幀的 covariance,實現動畫序列播放。

.gsd 格式(開源)

我設計了 .gsd(Gaussian Sequence Data)作為 4DGS 序列的壓縮容器。相較於可能高達數百 GB 的原始 PLY 序列,.gsd 將每幀的 Gaussian 資料壓縮成單一可串流檔案。

480 幀的 PLY 序列大約 30 GB,同樣的序列用 .gsd 壓縮到 ~13 GB(generic LZ4),針對 SHARP 的 PLY 格式優化後可達 ~5 GB

格式支援:

  • LZ4 壓縮: 選擇 LZ4 是因為解壓速度優先於壓縮率。4DGS 播放時需要即時解碼每一幀,快速解壓至關重要。
  • VQ(Vector Quantization)碼簿: rotation、scale 與 SH 資料在每幀量化為 256 筆碼簿,降低 entropy 後再交給 LZ4 壓縮。這將壓縮率從 ~3-5x(純 LZ4)提升至 ~5-8x。
  • 精度控制: 每個分量(position、rotation、scale、SH 係數)可選 FP32 或 FP16
  • 幀級隨機存取: 可跳轉至任意幀而無需解碼整個檔案

Converter 與格式規格完全開源:

GitHub: 4DGS Converter

效能

讓 2M+ Gaussians 達到 100+ FPS 的關鍵設計:

  • 純 GPU 管線: 渲染路徑中無 CPU-GPU 同步點
  • 積極剔除: 在 view frustum 或 crop volume 外的 splat 在排序前就被丟棄
  • 智慧快取: 攝影機未移動時跳過 GPU sort
  • 非同步串流: 4DGS 幀在背景執行緒上提前解壓

粒子特效

可選的 compute shader 系統可對個別 Gaussian 施加力場(噪波、風、重力、渦流),在捕捉的場景上即時產生程序式特效。


未來計畫

  • Relighting: Gaussian Splat 場景的動態光影互動
  • FX 系統: 擴展粒子特效與材質層級控制
  • 時間軸優化: 更智慧的幀插值與預測式串流

社群迴響

Plugin 在發布第一週即被 Radiance Fields 報導,與 NVIDIA 等業界工具並列。

SplatRenderer 在 Radiance Fields 首頁與 NVIDIA 並列
SplatRenderer 在 Radiance Fields 首頁的報導

連結

相關文章


聯絡

有問題或想合作?歡迎聯繫!

dazai.studio

Dazai Chen

dazai.studio@gmail.com

Unreal Engine 5.5+ C++ HLSL RenderGraph API Compute Shaders LZ4 Next.js