1.高斯函數
想象你往平靜的湖水里扔一塊石頭,水波會以石頭落點為中心向外擴散,形成一個逐漸衰減的圓形波紋。高斯函數的形狀就和這個波紋類似:
- 中心最高(石頭落點,波峰最強)。
- 越往外,高度(強度)越低(波紋逐漸減弱)。
- 對稱且平滑(圓形波紋,沒有突兀的棱角)。
高斯函數就是一個對稱的、平滑的“波包”,用來描述自然界的許多現象。它的核心特點是:
- 中心最強,越遠越弱。
- 用標準差(c)控制“胖瘦”。
- 多維時能處理圖片、3D數據等。
一維高斯函數:
其中,a、b、c為實數常數,且a>0。b控制峰值位置,c(標準差)控制曲線寬度,形狀呈對稱的鐘形。
二維高斯函數(像一座圓頂山):
用于圖像處理和概率模型。在圖片處理方面,比如“模糊濾鏡”就是用一個微型高斯函數對每個像素點做平滑處理,讓圖片看起來更柔和。
三維高斯函數(像一團云霧):其中σ為標準差,控制函數的寬度。
三維高斯函數是二維高斯函數在三維空間中的自然擴展,廣泛應用于圖像處理、計算機圖形學、物理模擬等領域。在3D建模中,可以用多個“云霧團”(高斯函數)組合起來表示物體(比如火焰、煙霧),渲染效率很高。
2.球諧函數
球諧函數(Spherical Harmonics,SH)是一組定義在球面上的正交函數,廣泛應用于物理學、計算機圖形學、量子力學等領域。球諧函數是拉普拉斯方程在球坐標系下的角度部分解,形式為:
- 參數:l(度數,非負整數)控制函數的復雜度,m(階數,?l≤m≤l)決定方位角周期性。θ 是極角(從 0 到 π),? 是方位角(從 0 到 2π)。
:連帶勒讓德多項式;
:歸一化因子。
- 正交性:不同 (l,m) 的球諧函數在球面上積分乘積為零,構成完備基。
(1)通俗解釋
核心比喻:球面上的“樂高積木”
想象你要用積木拼出一個球形燈籠,但積木的形狀不是方塊,而是不同圖案的曲面片(比如純色片、波浪片、花瓣片等)。
- 每種基礎曲面片就是一個球諧基函數。
- 你通過調整每種曲面片的數量(權重),就能組合出復雜的燈籠圖案。
- 球諧函數就是這些“基礎曲面片”的數學定義。
每個球諧函數都可以看作是一個“基礎曲面片”。這些曲面片在球面上有不同的形狀和分布。通過調整每個球諧函數的權重(即系數),可以將這些基礎曲面片組合起來,形成復雜的球面圖案。這類似于用不同形狀的積木拼出復雜的結構。
- 例如,當 l=0 時,球諧函數是一個常數函數,表示一個均勻的球面。
- 當 l=1 時,球諧函數可以表示球面上的簡單方向性變化,比如一個“極帽”(在北極或南極有突出的部分)。
- 當 l 增大時,球諧函數可以表示更復雜的形狀,比如多個“花瓣”或“波浪”形狀。
? ? ? ?每個球諧函數 是定義在球面上的一種特定的模式或分布,而不是一個完整的球體。通過調整不同球諧函數的權重,可以組合出復雜的球面上的分布。這種組合在許多科學和工程領域中都有廣泛的應用。
球諧函數可視化代碼:
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import sph_harm
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import Normalize
from matplotlib.cm import ScalarMappabledef plot_spherical_harmonics(l_max=3, resolution=100):"""繪制美觀的球諧函數可視化圖參數:l_max: 最大階數(非負整數)resolution: 網格分辨率"""# 創建球面網格theta = np.linspace(0, np.pi, resolution) # 極角phi = np.linspace(0, 2 * np.pi, resolution) # 方位角theta, phi = np.meshgrid(theta, phi)# 將球坐標轉換為笛卡爾坐標x = np.sin(theta) * np.cos(phi)y = np.sin(theta) * np.sin(phi)z = np.cos(theta)# 創建圖形fig = plt.figure(figsize=(18, 12), facecolor='black')fig.suptitle('Spherical Harmonics Visualization',fontsize=20, color='white', y=1.02)# 創建顏色映射cmap = plt.cm.coolwarm # 使用冷暖色區分正負值# 計算所有球諧函數的值,確定統一的范圍all_values = []for l in range(l_max + 1):for m in range(-l, l + 1):Y_lm = sph_harm(m, l, phi, theta).realall_values.append(Y_lm)vmin, vmax = np.min(all_values), np.max(all_values)norm = Normalize(vmin=vmin, vmax=vmax)# 計算需要的行數和列數rows = l_max + 1cols = 2 * l_max + 1# 創建網格布局grid = plt.GridSpec(rows, cols + 1, figure=fig,width_ratios=[1] * cols + [0.1], # 為顏色條留出空間hspace=0.3, wspace=0.1)for l in range(l_max + 1):for m in range(-l, l + 1):# 計算球諧函數的值Y_lm = sph_harm(m, l, phi, theta).real# 計算子圖位置ax_pos = (l * cols) + (m + l_max) + 1ax = fig.add_subplot(grid[l, m + l_max],projection='3d', facecolor='black')# 繪制球面surf = ax.plot_surface(x, y, z,facecolors=cmap(norm(Y_lm)),rstride=2, cstride=2,alpha=1.0,linewidth=0.1,edgecolor='k',antialiased=True,shade=True)# 設置視角和光照ax.view_init(elev=25, azim=45)ax.set_box_aspect([1, 1, 1])# 美化設置ax.set_facecolor('black')ax.grid(False)ax.xaxis.pane.fill = Falseax.yaxis.pane.fill = Falseax.zaxis.pane.fill = False# 設置標題ax.set_title(f"Y$_{{{l}}}^{{{m}}}$",fontsize=14, color='white', pad=0)# 隱藏坐標軸ax.set_xticks([])ax.set_yticks([])ax.set_zticks([])# 添加顏色條cax = fig.add_subplot(grid[:, -1])sm = ScalarMappable(cmap=cmap, norm=norm)sm.set_array([])cbar = fig.colorbar(sm, cax=cax, orientation='vertical')cbar.set_label('Function Value', color='white', fontsize=12)cbar.ax.yaxis.set_tick_params(color='white')plt.setp(cbar.ax.get_yticklabels(), color='white')cax.set_facecolor('black')# 調整整體布局plt.subplots_adjust(left=0.05, right=0.9, top=0.95, bottom=0.05)# 調用函數繪制球諧函數
plot_spherical_harmonics(l_max=3, resolution=200)
plt.show()
(2)在光照渲染中的應用
核心作用:用少量系數高效存儲和計算復雜光照。傳統方法(如環境光貼圖)需要逐像素存儲光照數據,而SH將光照壓縮成系數,實時渲染時快速還原。
1)SH的本質:數學壓縮工具
① 核心思想
SH是一組定義在球面上的正交基函數(類似傅里葉變換的基),可將任意球面函數(如光照分布)分解為不同頻率的加權組合。
- 低頻基函數:描述大范圍平滑變化(如天空漸變)
- 高頻基函數:描述銳利細節(如太陽光斑)
②階數與精度
三階SH(9個系數)可表達90%的漫反射光照
五階SH(25個系數)可捕捉更復雜光照,但存儲和計算成本翻倍
數學表達:
光照函數,𝑐𝑙𝑚是SH系數,𝑌𝑙𝑚是基函數。
2)SH→RGB轉換的四個關鍵步驟
以三階SH(每通道9個系數)為例:
①方向輸入
給定表面法線方向?𝑛=(𝑥,𝑦,𝑧),歸一化為單位向量。
②基函數計算
預計算該方向對應的SH基函數值(共9個):
# 三階SH基函數示例(方向n的取值)
Y00 = 0.282095 # 零階(直流分量)
Y1[-1] = 0.488603 * n.y # 一階
Y1[0] = 0.488603 * n.z
Y1[1] = 0.488603 * n.x
... # 更高階類似
③加權求和
將SH系數與基函數逐項相乘并累加:
R = Σ (SH_coeff_red[i] * Y[i])
G = Σ (SH_coeff_green[i] * Y[i])
B = Σ (SH_coeff_blue[i] * Y[i])
④范圍修正
結果可能超出[0,1],需通過Sigmoid等函數約束到合理范圍。
3)應用
①環境光模擬
問題:真實環境光來自各個方向,逐方向采樣計算量大。
SH方案:
- 原理:將環境光投影到球諧函數基函數上,存儲為系數。球諧函數是一種正交函數基,能夠有效地將復雜的光照分布分解為一組系數。
- 優勢:渲染時通過系數加權求和,可以快速得到任意方向的光照強度,大大減少了計算量。
- 示例:天空盒的光照可以壓縮為9個系數(三階SH)。在實時渲染時,無需讀取整張貼圖,從而提高渲染效率。
- 補充:球諧函數的階數越高,能夠表示的光照細節就越豐富,但計算和存儲成本也會相應增加。三階SH(9個系數)是一個常用的平衡點,能夠較好地平衡計算效率和光照效果。
②動態物體光照問題
問題:移動的物體需要實時更新光照信息。
SH方案:
- 原理:在場景中預埋“光探頭”(Light Probe),每個探頭存儲周圍環境的球諧系數。物體移動時,只需讀取最近探頭的系數,快速計算當前光照。
- 優勢:這種方法可以有效減少動態物體的光照計算量,提高渲染效率,同時保證光照效果的連貫性。
- 補充:光探頭的數量和分布會影響光照的精度。如果光探頭分布稀疏,可能會導致光照過渡不夠平滑。在實際應用中,需要根據場景的復雜度和性能要求合理安排光探頭的位置和數量。
③顏色與視角依賴效果顏色壓縮
- 原理:RGB顏色通過球諧系數轉換(如RGB = SH系數 × C0 + 0.5),將顏色分布與方向關聯,支持視角相關的漸變效果。
- 優勢:優化存儲。一個RGB顏色原本需要3個通道的貼圖,用球諧系數可以壓縮到12~27個浮點數(三階SH)。這大大減少了存儲空間,同時能夠實現視角相關的漸變效果,使物體在不同視角下呈現更真實的光照效果。
- 補充:這種顏色壓縮方法適用于對顏色精度要求不是極高的場景。在一些高精度的渲染任務中,可能需要采用更復雜的顏色表示方法來保證顏色的準確性。
④物理意義與限制
- 低頻優勢:球諧函數擅長表達低頻光照(如柔和的漫反射),能夠很好地模擬環境光的柔和效果。
- 高頻限制:球諧函數無法精確還原高頻細節(如銳利陰影)。這是因為球諧函數是一種低頻函數,對于高頻的光照變化(如銳利的陰影邊緣)表示能力有限。
- 計算效率:三階SH(9個系數)是一個常用的平衡點。高階系數雖然能夠提升精度,但存儲和計算成本會劇增。在實際應用中,需要根據場景的需求和性能限制選擇合適的階數。
總結
球諧函數在計算機圖形學中是一種非常有效的光照表示方法,特別適用于環境光的模擬和動態物體的光照更新。它通過將復雜的光照分布分解為一組系數,大大減少了計算量和存儲空間。然而,球諧函數也有其局限性,主要體現在對高頻細節的表示能力不足。在實際應用中,需要根據具體需求和性能限制合理選擇球諧函數的階數和應用場景。
3.高斯潑濺點
1)定義
高斯潑濺點是 3D Gaussian Splatting 場景建模的基本單元,它就像“一個有形狀和顏色的點”,但比傳統點云更智能:
它不是普通的點,而是:
“一個具有體積、方向、不透明度、顏色和形變信息的三維橢球體,通過高斯函數來建模。”
你可以理解為在空間中放置了許多微小“彩色霧團”,它們像墨水滴一樣一起混合,最終形成逼真的3D圖像。
2)核心參數組成
參數名稱 | 含義 |
---|---|
位置 μ | 橢球體的中心點坐標,即它在 3D 空間中的位置 (x,y,z)(x, y, z) |
協方差 Σ | 控制橢球的形狀、大小、方向——即“它拉長還是扁平、朝哪個方向” |
顏色 c | 點的顏色,可以是 RGB,也可以是球諧系數(SH),用于表達視角相關的顏色變化 |
不透明度 α | 控制該點的透明程度,決定它在混合渲染中的視覺權重 |
3)數學本質:三維高斯分布
高斯潑濺點是一個三維的各向異性高斯分布(Anisotropic 3D Gaussian),公式如下:
-
μ:中心位置(空間中點的坐標)
-
Σ:協方差矩陣,決定形狀和方向
-
α:整體強度/透明度
-
x:空間中的任意采樣點
直觀含義:越接近中心點,值越高;離得遠就快速衰減,形成“霧狀”的視覺效果。
4)協方差矩陣 Σ 的含義與分解
協方差矩陣 Σ 是控制“橢球形狀”的核心:
-
如果它是單位矩陣 ? 就是一個球體;
-
如果它的三個主軸不同 ? 就是橢球;
-
它可以分解為:
其中:
-
R:旋轉矩陣 ? 控制橢球的朝向;
-
S:縮放矩陣 ? 控制每個方向上的大小。
5)顏色表示:RGB vs 球諧系數 SH
-
如果使用 RGB:表示一個固定顏色;
-
如果使用 SH 系數(Spherical Harmonics):
-
可以表示顏色隨著視角改變而變化,比如金屬反光、塑料表面;
-
更真實、更先進,但也更復雜;
-
渲染時根據視角方向計算 SH 展開,得到最終顏色。
-
6)高斯潑濺點在渲染中怎么用?
-
所有高斯點分布在空間中,形成稠密的“體積點云”;
-
在渲染時:
-
每個點根據它的 α、顏色、位置、形狀被投影到圖像上;
-
多個點在圖像上重疊融合,形成高質量畫面;
-
類似“體積渲染”或“透明油墨混合”;
-
-
使用 逐像素 rasterization + alpha blending 技術實現高效可微渲染。
通俗易懂的理解:
目標是:把這些高斯點“畫”成一張真實的圖像,
你可以想象:
-
你手上有一堆彩色小水滴(這些就是高斯點);
-
你拿著攝像機對著這些水滴拍照;
-
鏡頭中,水滴重疊、融合、透明混合,最終形成了一個栩栩如生的畫面。
①相機投影(投影到屏幕)
每個高斯潑濺點都有一個位置(μ)——它在 3D 空間中。當我們用一個虛擬相機(Camera)去“看”這些點時,我們會把每個點投影到攝像機的圖像平面上(也就是屏幕上的像素)。這就像把每個小水滴的“投影”打到畫布上。
②在屏幕上生成“高斯模糊小斑點”
-
每個點本質上是一個三維高斯分布(模糊的彩色橢球體),
-
投影到屏幕后,它就變成一個模糊的彩色斑點;
-
越靠近斑點中心,像素值越強(越亮);越遠,越淡;
-
不同的點,形狀大小不同,顏色也可能不同;
-
所以屏幕上的每個像素,會受到多個高斯點的影響。
💡 類比:就像很多顏料點落在紙上,每個都有一定大小和透明度,它們在紙上融合,顏色疊加,最后形成畫面。
③alpha blending(透明度疊加)
這個過程關鍵在于“不透明度 α”:
-
如果某個點很透明(α小),它的影響就輕;
-
如果它很不透明(α大),它對圖像的貢獻就強;
-
通過將所有點的投影結果按照透明度進行加權融合(混合),最終合成一張圖像。
這種混合方式叫:
-
Gi(x):第 i 個高斯點在該像素位置的值(根據距離中心點的遠近);
-
αi:透明度;
-
colori:顏色,甚至可以是視角相關的 SH 展開結果。
④一次渲染就是所有高斯點 → 所有像素的疊加
這個過程是:
-
遍歷所有高斯點;
-
把它們投影到攝像機坐標下;
-
對于每一個像素,計算它被哪些高斯點影響;
-
所有影響加起來,得到像素的最終顏色。
用專業術語說就是:
-
基于高斯分布的 rasterization(柵格化)
-
alpha compositing(透明合成)
? 它是一個顯式渲染過程,不像 NeRF 那樣“射光線采樣”,效率更高。
整幅圖是如何“繪制”出來的:有幾萬個微小的橢球彩色霧團,在虛擬空間中漂浮;?一臺虛擬攝像機將它們投影到二維屏幕上;?每個點變成一個模糊的斑點,顏色和透明度疊加在圖像中;所有點疊加之后,呈現出一個清晰、真實、有體積感的3D場景!
7)3DGS中高斯點的完整應用流程
總覽
階段名稱 | 主要目的 | 核心操作 |
---|---|---|
1?? 初始化 | 建立初始場景表示 | 從 SfM 點云生成高斯點,初始化其參數 |
2?? 優化 | 提升渲染真實感 | 可微渲染 + 反向傳播 + 梯度下降,擬合真實圖像 |
3?? 自適應密度控制 | 控制點的數量和分布 | 分裂細節區域點,合并/刪除平坦區域點 |
4?? 渲染 | 生成可視圖像 | 將3D高斯點按深度投影、混合顏色和透明度,輸出最終圖像 |
詳細分步驟講解
①初始化(Initialisation)
📥 把真實照片 → 轉化為可優化的高斯點場景表示。
-
使用 SfM(Structure-from-Motion) 從多張照片中恢復相機位姿和稀疏點云。
-
每個 SfM 點變成一個 高斯潑濺點,初始化參數如下:
-
位置 μ:來自 SfM 點云;
-
協方差 Σ:設為單位矩陣(球形);
-
顏色:用多圖平均;
-
不透明度 α:初始化為中等值;
-
球諧系數 SH(可選):初始化為常數。
-
📌 目的:搭建一個粗略但可優化的場景框架。
②優化(Optimization)
🔧 訓練這個“場景”,讓它畫出來的圖像盡可能接近真實圖像。
原理:使用 可微分光柵化(Differentiable Rasterization) 使渲染過程可導 → 通過梯度下降優化每個高斯點的參數。
過程:
-
采樣訓練圖像;
-
對每張圖,用當前高斯集合進行渲染;
-
計算渲染圖像和真實圖像之間的差異(比如 L2 loss);
-
使用反向傳播,更新:
-
每個點的位置(μ)
-
大小/方向(協方差 Σ)
-
顏色或 SH 系數
-
不透明度 α
-
📌 目標函數通常是重建損失(重建越像真實圖越好)
📌 可加正則化項,比如懲罰無效點、鼓勵分布稠密等
③自適應密度控制(Adaptive Density)
🔄 讓點云結構更“聰明”:哪里需要點多就多,不需要就少。
核心思想:
場景中并非所有區域都需要同樣多的點。例如:
-
細節區域(比如樹葉、邊緣)→ 需要更多點 ? 拆分/復制點;
-
平坦區域(比如天空、墻面)→ 不需要那么多 ? 刪除點。
操作方式:
-
每隔若干迭代:
-
計算每個點的梯度大小 / 貢獻度;
-
貢獻高的點 ? 分裂為多個子點;
-
貢獻低的點 ? 刪除;
-
-
分裂時新點的參數基于父點微調。
📌 目的:提高效率,減少冗余,同時提升視覺質量。
④渲染(Rendering)
🖼? 最終將優化好的高斯點生成真實圖像。
步驟如下:
-
把所有 3D 高斯點投影到相機視角下的 2D 圖像平面;
-
為每個點在屏幕上生成模糊“斑點”(高斯核);
-
將所有斑點按 深度順序排序;
-
使用 alpha blending(透明度疊加)合成最終像素值;
-
輸出最終渲染圖像。
📌 與 NeRF 不同:它不走射線積分,而是 逐像素 rasterization,效率更高,可用于實時應用。
可視化類比
類比過程 | 實際操作 |
---|---|
SfM搭建骨架 | 類似打草稿,先勾勒出大概場景 |
點的優化調整 | 類似“涂改修正”,讓圖像逐漸精細 |
自動加點刪點 | 類似畫畫中“多畫細節”和“刪掉多余線條” |
渲染出圖 | 最后上色、混色,讓整幅畫看起來真實自然 |
8)總結與類比
特性 | 含義 |
---|---|
類比傳統點 | 高斯點是“可擴張 + 可旋轉 + 有顏色 + 不透明度 + 方向感”的“智能點” |
類比體素/網格 | 高斯點是連續分布的,不需要規則網格,更靈活、更稀疏 |
類比 NeRF 點樣本 | 但高斯點是顯式幾何 + 顯式顏色 + 透明疊加,比 NeRF 更快更真實 |
渲染方式 | 利用 rasterizer(柵格化器)和 GPU 并行處理,實現實時可微渲染 |
4.高斯橢球體
1)高斯橢球體是什么?
高斯橢球體其實就是我們在 3DGS 中使用的 三維高斯分布 的幾何形態。
它不是普通的“球”或“橢球殼”,而是一個模糊的概率霧團,用來表示某個位置的“顏色影響范圍”。
📌 數學表達
三維高斯分布函數如下:
含義解釋:
-
x:任意一個空間位置(你眼前的一個點)
-
μ:高斯的中心位置(霧團的中心)
-
Σ:協方差矩陣,控制它在三維空間中“朝哪個方向胖”,“多胖”
-
G(x):表示在 x 位置上的概率密度值(數值越高,說明越靠近中心)
當 G(x)?取一個常數(比如 0.5)時,它就形成了一個等密度面 —— 這就是一個橢球形狀的等值面。
2)為什么它是“橢球體”?
因為協方差矩陣 Σ 會控制:
-
高斯霧團在不同方向上延伸的距離(特征值);
-
霧團的方向朝哪(特征向量);
我們可以把 Σ進行分解:
-
R:旋轉矩陣(決定朝哪轉);
-
S:縮放矩陣(對角矩陣,控制三個主軸上的尺度);
所以這個高斯在空間中就像一個可以隨意旋轉、拉伸、扭曲的橢球體。
? 這個“橢球霧團”就叫高斯橢球體,它是我們高斯潑濺點的空間形狀模型。
3)高斯橢球體 vs 高斯潑濺點:誰是誰的“外殼”?
對象 | 含義 |
---|---|
高斯橢球體 | 用來描述潑濺點“長什么樣”,是其幾何外形(數學) |
高斯潑濺點 | 包含位置、形狀(橢球)、顏色、透明度的完整渲染單元 |
二者關系 | 橢球體是潑濺點的“空間外殼”;潑濺點是“有生命的像素” |
🔁 橢球體只是形狀,潑濺點才是“帶顏色、能發光、會變化”的實體。
4)高斯潑濺點的完整屬性
每一個潑濺點,不僅有個“霧團的形狀”,還有:
屬性 | 解釋 |
---|---|
位置 μ | 潑濺點中心位置,在3D空間中的坐標 |
形狀 Σ(=RS2R?) | 協方差矩陣,定義橢球大小和方向(即幾何外殼) |
不透明度 α | 控制它渲染時有多透明,用于多點融合時的深度混合 |
顏色/球諧系數 SH | 支持視角相關顏色變化,不僅僅是RGB,而是更“智能”的方向敏感顏色編碼 |
5)類比總結
類比 | 含義 |
---|---|
橢球體 | 就像一個模糊的燈罩,定義光/顏色的范圍 |
潑濺點 | 就像一個燈泡,能發光,顏色會變,影響周圍 |
渲染 | 攝像機對著這些“燈泡”拍一張圖,通過疊加 |
總結一句話
高斯橢球體是高斯潑濺點的數學形狀,而高斯潑濺點是一個功能完整的渲染粒子單元,包括了位置、形狀、顏色、不透明度等,它們共同構成了 3DGS 的基礎。
5.高斯濺射技術的原理
1)什么是“高斯濺射”?
高斯濺射(Gaussian Splatting)最初是一種體繪制技術(volume rendering),核心思想是:
用一堆“模糊的小霧點”來還原一個真實世界的三維場景。
這些“霧點”在 3D 空間中不是一顆顆實心的點,而是像帶顏色和厚度的半透明泡泡 —— 它們的數學基礎是三維高斯函數。
2)什么是 3D 高斯濺射技術?
3DGS 是把上面這種“霧點”思想,和 真實圖像訓練、光照建模、GPU渲染優化結合起來的一種新一代實時渲染技術。它的應用目標是:
-
給我幾張不同角度的照片;
-
我就能還原出場景的真實 3D 結構;
-
而且可以從任意新角度生成真實的圖像(→ 新視圖合成)。
3)3DGS 的五大核心流程
1?? 輸入數據:圖像 + 相機位姿 + 稀疏點云
-
拍攝一堆照片,知道每張照片的相機角度(→ SfM計算相機矩陣);
-
從中估計出稀疏點云(場景中的稀疏幾何);
這一步是“把多張2D照片變成初步的3D點”。
2?? 用 3D 高斯函數表示場景(用模糊小泡泡建場景)
-
每個點用一個高斯函數表示,變成一個“模糊的半透明橢球體”;
-
每個高斯攜帶:
-
位置 μ:泡泡中心;
-
形狀 Σ:泡泡的大小方向;
-
顏色信息:不是固定顏色,而是視角相關顏色(球諧函數SH編碼);
-
透明度 α:可調節的霧度;
-
? 場景最終就被建成了一堆這種“能變色的霧泡泡”的組合。
3?? 使用優化算法來訓練這些泡泡的參數(擬合真實圖像)
-
讓這些泡泡渲染出來的圖像與真實照片進行比對;
-
用**反向傳播 + 隨機梯度下降(SGD)**優化泡泡的參數(位置、顏色、方向...);
-
目標是:泡泡組合出的渲染圖像盡量貼近真實拍攝的圖像。
? 這是類似“神經網絡訓練”的過程,但優化的不是網絡參數,而是每個高斯泡泡的屬性。
4?? 自適應密度控制(控制泡泡多少、合并或分裂)
-
在細節多的區域:增加泡泡數量(更精細);
-
在平滑區域:合并泡泡(減少資源);
這種方法可以在保證質量的同時節省大量渲染成本。
5?? 實時渲染:光柵化器+混合
-
把所有 3D 泡泡投影到攝像機圖像平面,變成模糊的橢圓;
-
使用**圖塊級并行渲染(tile-based rasterization)**對它們排序、混合;
-
通過累加顏色與不透明度,形成真實圖像(視角一致)。
? 所有計算都可以在 GPU 上高效并行處理,實現了“實時新視圖生成”。
4)核心亮點歸納
技術點 | 解釋 |
---|---|
顯式表示 | 每個泡泡是清晰定義的幾何和顏色單元,不像NeRF那樣黑盒 |
支持視角變化 | 顏色編碼為球諧系數(SH),能擬合不同角度看到的顏色 |
可微渲染 | 使用可微光柵化器,可以做梯度優化 |
渲染超快 | 不需要光線追蹤,只需 GPU 混合泡泡投影圖就行 |
可擴展 | 可以用于視頻、動態場景、多相機輸入等 |
6.高斯濺射技術的應用
1)3D重建(3D Reconstruction)
💡 定義:
從多張不同角度的圖像中,還原出一個真實的、立體的三維場景(包括幾何 + 外觀)。
? 高斯濺射怎么做?
-
每張圖片給出了不同角度的信息;
-
3DGS會根據這些圖像,生成一堆“高斯泡泡”來填滿三維空間;
-
每個泡泡的位置和顏色都經過訓練優化,最終構成一個真實場景的三維表示。
🔍 為什么比傳統方法強?
-
傳統方法如 NeRF 渲染慢、不透明,難以修改;
-
高斯濺射是顯式表示,支持直接編輯、移動;
-
重建速度快,渲染快,可直接用于可視化與后續應用。
? 應用場景:
-
VR/AR 內容生成(建一個虛擬展館)
-
無人機測繪、數字孿生城市
-
游戲中的場景掃描和復刻
2)新視角合成(Novel View Synthesis)
💡 定義:
給你一些已有角度的照片,合成出“從沒拍過的角度”看到的圖像。
? 高斯濺射怎么做?
-
每個泡泡都攜帶“視角相關的顏色模型”(通常是球諧函數SH);
-
渲染時根據你站的角度,計算出每個泡泡的顏色和形狀;
-
最終合成出一個新視角下的圖像,真實感強,過渡平滑。
🔍 優勢在哪?
-
不用訓練神經網絡(不像 NeRF);
-
不需要花很多時間推理;
-
渲染實時,甚至可以“視頻級”速度運行!
? 應用場景:
-
視頻會議(多人攝像頭生成自由視角)
-
虛擬導覽(如博物館漫游)
-
影視制作(從單鏡位合成多鏡位素材)
3)實時渲染(Real-Time Rendering)
💡 定義:
在用戶操作時(如轉動視角、縮放),系統能實時輸出圖像畫面,保持流暢互動體驗。
? 高斯濺射怎么實現?
-
所有泡泡都已經優化好,儲存在顯存中;
-
視角一變,只需要快速“投影這些泡泡”并混合顏色;
-
完全基于 GPU 并行渲染,效率極高。
🔍 相比其他方法:
方法 | 實時性 | 成像質量 | 訓練復雜度 |
---|---|---|---|
NeRF | ? 慢 | ? 高 | ? 復雜 |
Mesh | ? 快 | ? 較差 | ? 簡單 |
3DGS | ? 極快 | ? 高 | ? 簡潔 |
? 應用場景:
-
游戲實時渲染(尤其是動態景深、特效)
-
VR/AR頭顯內容(低延遲要求)
-
智能汽車或機器人視覺系統(需要實時反饋)
? 總結記憶口訣:
重建準(準確還原),合成快(多視角),渲染爽(實時畫)!
7.什么是3DGS(3D高斯潑濺)?
3DGS是一種全新的3D場景表示方式,不再使用傳統的網格模型(Mesh),也不像NeRF那樣用隱式神經網絡來表示場景,而是用數以萬計的高斯函數(像點云一樣)顯式建模場景的幾何和外觀。
-
每個高斯就像是一個小的“發光粒子”,有自己的:
-
位置(空間坐標)
-
方向和大小(形狀和姿態由協方差矩陣控制)
-
顏色(RGB或球諧函數建模視角相關的顏色變化)
-
透明度(決定它的視覺權重)
-
這些“高斯粒子”像噴濺墨水一樣,覆蓋在3D空間中,通過疊加和融合,生成平滑真實的圖像。
核心技術流程
-
輸入數據:
-
多張從不同角度拍攝的圖像
-
相機的位姿信息(通過SfM估計)
-
-
點云生成:
-
使用Structure-from-Motion(SfM)技術獲取稀疏點云。
-
-
高斯點構建:
-
將每個點轉換為一個3D高斯(帶有空間和外觀參數)。
-
-
可微渲染優化:
-
使用可微高斯光柵器,把高斯點“投影”為圖像。
-
使用真實圖像做監督,通過梯度下降不斷優化高斯參數(位置、大小、顏色等)。
-
-
渲染輸出:
-
實現實時、高質量的新視角圖像合成(不同于NeRF的慢速采樣渲染)。
-
與NeRF的對比
對比項 | NeRF | 3DGS |
---|---|---|
表示方式 | 隱式函數(MLP) | 顯式點云(高斯) |
訓練時間 | 慢(數小時) | 快(幾十分鐘) |
渲染速度 | 慢(fps < 1) | 快(實時級) |
可編輯性 | 難編輯 | 易編輯(顯式結構) |
應用局限 | 實時任務困難 | 更適合SLAM、AR等實時應用 |
總結一句話:3DGS不是NeRF的升級,而是換了一個“思維模型”來建模和渲染場景。
技術突破:Niantic SPZ 格式
Niantic推出的 .SPZ
文件格式是對3DGS的進一步優化:
-
壓縮率高:把原本幾百MB的PLY文件壓縮為十分之一大小;
-
幾乎無質量損失:可視效果和原始3DGS一致;
-
適合移動設備傳輸:更快加載、更適合AR應用;
-
支持創作平臺:可以導入Niantic Studio做3D創作或AR展示。
技術細節如:
-
每個高斯點從 236 字節壓縮到 64 字節;
-
使用固定點量化、對數編碼等方式優化。
總結(通俗理解)
-
把一個真實世界的場景“潑灑”為一堆高斯光點;
-
每個光點都有位置、顏色、大小,組合起來形成完整圖像;
-
不再訓練龐大的神經網絡,而是優化這堆“光點”的參數;
-
渲染時像噴墨打印機一樣快速而高效;
-
可直接用于 VR、AR、SLAM、影視等各種領域。
8.3DGS拍攝指南
3D Gaussian Splatting(3DGS)雖然不依賴神經網絡學習場景隱式表示,但它對 輸入圖像的質量、數量和拍攝策略要求較高。以下將從拍攝準備、拍攝角度、相機參數設置等幾個方面逐一說明。
① 拍攝設備建議
-
推薦使用:
-
手機(iPhone、Pixel、三星等帶有良好圖像質量的手機)
-
消費級相機或微單相機(如 Sony α 系列)
-
-
要求:
-
相機穩定、不會自動模糊;
-
盡量關閉圖像后處理(如 HDR、濾鏡);
-
支持 EXIF 中記錄相機內參(有助于SfM恢復)。
-
② 拍攝場景要求
-
建議選擇靜態場景(避免動態物體如人、車、動物進入);
-
光照均勻:避免強烈光斑、高反差區域(影響SfM);
-
避免反光/透明物體:如玻璃、鏡子、水面不適合用3DGS建模。
③ 拍攝角度與軌跡建議(非常關鍵?)
這是影響重建效果的重中之重:
拍攝方式 | 說明 | 建議 |
---|---|---|
環繞拍攝(Orbit) | 繞物體水平拍攝 | 保持視角重疊率大于70%,繞一圈至少拍20~50張 |
高低角度切換 | 分別從低角度和高角度再繞拍 | 避免模型頂部或底部模糊,最好換兩個仰視和俯視角度分別拍攝 |
避免純平面運動 | 不能只從一個平面拍攝(如單一高度繞圈) | 需要多角度+高低視角交錯,SfM才能恢復完整深度關系 |
圖像間隔 | 連續拍攝,圖像間重疊區域 > 60% | 圖像數量越多,點云越密集,模型越精細 |
④ 拍攝數量建議
場景大小 | 推薦圖片數量 | 舉例 |
---|---|---|
小型物體(如雕像) | 30~100 張 | 桌面尺寸或小型展品 |
房間級場景 | 100~300 張 | 一個廚房/客廳 |
建筑外觀或街景 | 300~1000 張+ | 整棟建筑或街道環境 |
?? 越復雜的場景、遮擋越多的角落,越需要多角度和更多張數。
⑤ 相機設置建議(如使用手動相機)
-
分辨率:保持高清(如 1920×1080 以上,越高越好);
-
曝光一致:不要拍一會兒亮一會兒暗;
-
焦距固定:盡量使用固定焦距,不要拍攝過程中變焦;
-
自動對焦可以開,但要保證每張圖都清晰;
-
關閉 HDR 和濾鏡:防止圖像風格不一致。
⑥ 注意事項匯總
正確做法 ? | 錯誤示范 ? |
---|---|
多視角、高重疊、環繞拍攝 | 單視角、幾張圖就想建模 |
靜態場景,光照均勻 | 場景有移動的人、動物 |
有上下視角的拍攝 | 只拍水平一圈 |
圖像清晰無模糊 | 圖像抖動或對焦失敗 |
盡量避免反光/玻璃 | 鏡面、水面、透明物體太多 |
⑦ 拍攝后處理建議
-
可使用 COLMAP 或 instant-ngp 自帶的 SfM 工具做初步圖像去重;
-
保留圖像數量 ≈ 提高稠密度 ≈ 更高建模精度;
-
如果最終建模效果不理想,優先回到拍攝階段復查是否角度或數量不足。
📌 舉例說明:
假設你要重建一個花園雕像:
-
站在雕像周圍每隔 15° 拍一張(共 24 張一圈);
-
上下視角各一圈,再補 48 張;
-
繞近一圈+遠一圈(保證細節和整體);
-
總計約 100~150 張圖片,基本可以支持高質量 3DGS 重建。
9.點云生成
點云生成一般通過以下步驟進行。首先對拍攝數據進行預處理,通過圖片質量檢測,移除模糊圖片。之后,通過對應點檢索進行相機校準和照片對齊,完成相機位姿計算并獲得初始點云。隨后進行增量式重建,增量式重建主要利用SfM(Structure From Motion,從運動中恢復結構),SfM是一種從一組不同視角下拍攝的無序或有序影像中,同時恢復場景三維結構和相機姿態的技術。增量式SfM會選擇無序影像進行特征匹配,并進行幾何糾正、三角測量恢復稀疏點云結構,通過已有點云重新估計相對姿態,再進行局部和全局的BA優化,最后輸出全部的相機參數和稀疏三維點云。
一般在采集照片充足,質量高的情況下,獲取的相機位姿和實際采集位置相似,且初始點云形狀可明顯看出和采集場景一致。
光場重建
3DGS三維場景重建的大致流程如圖所示,包括:
-
輸入:輸入是一組靜態場景的圖像,以及通過SfM算法得到的SfM點,以及所有圖像對應的相機位姿。
-
初始化:對獲取的每個稀疏點云創建初始化3D高斯橢球,其由位置(平均值)、協方差矩陣(XYZ軸縮放因子、旋轉因子等)、不透明度和球諧函數系數(后文簡稱SH系數)所定義。該定義允許3D場景合理緊湊的表示,并通過調節參數緊湊化表示精細化場景結構。其中使用球諧函數來映射整個輻射場的方向性外觀分量(RGB顏色)。
-
構建梯度流迭代優化:3D高斯橢球在對應的相機位姿下進行投影,獲取光柵化之后的圖像,與真實輸入圖像(真值圖像)進行比對優化,對初始化后的參數(位置、協方差矩陣、SH系數、高斯球密度的自適應控制)進行優化,同時通過自適應密度控制策略對高斯球進行拆分融合操作。
10.4D高斯
4D高斯 是在 3D高斯濺射(3D Gaussian Splatting) 的基礎上,引入時間維度(Temporal) 的一種新型表示方法。它不僅表示空間中的幾何和顏色信息,還能建模 場景隨時間變化的動態信息,實現對動態場景的連續建模與渲染。
維度 | 含義 |
---|---|
X, Y, Z | 表示物體在三維空間中的位置 |
T(時間) | 表示高斯基元在時間上的演變(如物體移動、變形) |
因此,4D高斯可以被理解為:
“隨時間變化的3D點云 + 高斯參數”,用于建模和渲染動態場景。