3DGS——基礎知識學習筆記

1.什么是3D高斯潑濺(3D Gaussian Splatting)?

目標:從一組稀疏的3D點(比如通過相機或激光雷達采集的點云)重建出高質量的3D場景,并支持實時渲染。

核心思想:用許多“3D高斯分布”(類似橢球形的光滑斑點)來表示場景中的物體表面。這些“斑點”可以靈活變形、旋轉或縮放,從而更精準地擬合復雜形狀。

類比理解:
想象用一堆“棉花糖”拼成一個3D模型:每個棉花糖可以壓扁、拉長或旋轉(各向異性),最后所有棉花糖組合起來就能逼真地還原一個物體(比如一只貓或一棟建筑)。

2. 貢獻點逐條解析

貢獻1:各向異性(anisotropic)的3D高斯分布

  • 各向異性:指高斯分布的形狀在不同方向上可以不同(比如橢球可以是扁的或長的,而不僅是圓形)。為什么重要? 真實世界的物體表面有各種復雜朝向(比如地面是平的,樹干是豎的),各向異性讓高斯分布能更貼合這些形狀。
  • 非結構化輻射場:傳統方法(如NeRF)需要規則網格或隱式函數,而高斯潑濺直接用離散的高斯斑點自由表達,更靈活高效。

貢獻2:GPU快速可微渲染

  • 可微渲染:渲染過程支持自動求導(即可以通過損失函數反向傳播優化高斯參數)。

  • 拋雪球(Splatting):將3D高斯投影到2D屏幕上時,像“潑雪球”一樣模糊化處理,避免鋸齒或空洞。
  • GPU加速:利用并行計算實時渲染大量高斯斑點。

“拋雪球”(Splatting) 是計算機圖形學中一種 將3D數據投影到2D屏幕 的渲染技術,常用于點云或體素(體積像素)的實時可視化。它的核心思想是:把每個3D點看作一個“柔軟的雪球”,投影到2D屏幕上時會像雪球砸到地面一樣“攤開”成一個模糊的圓形或橢圓形斑點,從而避免直接渲染離散點導致的空洞或鋸齒問題。

貢獻3:優化與自適應密度控制

  • 優化方法:訓練過程中動態調整高斯斑點的位置、形狀、透明度等參數,使重建更精準。
  • 自適應密度:根據場景復雜度增減高斯斑點(比如細節多的區域自動增加斑點,平坦區域減少)。

3.預備知識

1.一維高斯分布(1D Gaussian Distribution)

概念:一維高斯分布描述的是?單個隨機變量?的概率分布,其圖像是經典的“鐘形曲線”。例如:人的身高、測量誤差等通常服從高斯分布。

一維高斯分布的概率密度函數
  • 𝜇:均值(Mean),決定分布的中心位置。
  • 𝜎:標準差(Standard Deviation),控制分布的“寬窄”(𝜎?越大,曲線越扁平)。
  • 𝜎2:方差(Variance)
        ^|      ......|    .        .|   .          .
f(x)    |  .            .| .              .|.                .+-----------------------> xμ-σ   μ   μ+σ

曲線在?𝑥=𝜇處取得最大值。約 68% 的數據落在?(𝜇?𝜎,𝜇+𝜎)?區間內,95% 落在?(𝜇?2𝜎,𝜇+2𝜎)?內。

2.三維高斯分布(3D Gaussian Distribution)

概念:三維高斯分布描述的是?三個變量(如空間中的x, y, z坐標)?的聯合分布。在3D高斯潑濺中,每個“高斯斑點”就是一個三維高斯分布,可以旋轉、拉伸(各向異性),用來擬合3D物體表面。

  • 𝑥=[𝑥,𝑦,𝑧]𝑇:三維空間中的一個點。
  • 𝜇=[𝜇𝑥,𝜇𝑦,𝜇𝑧]𝑇:均值向量,決定分布的中心位置。
  • 𝛴:3×3協方差矩陣,控制分布的形狀(大小、旋轉、拉伸)。

協方差矩陣?𝛴?的作用

協方差矩陣決定了高斯分布的 形狀和方向:

  • 對角元素(\sigma _{xx},\sigma _{yy},\sigma _{zz}):控制沿x、y、z軸的縮放(方差)。
  • 非對角元素(\sigma {_{xy}}):控制不同維度之間的相關性(即旋轉或傾斜)。

例子:

  • 如果?𝛴?是對角矩陣(非對角元素為0),則高斯分布是軸對齊的橢球。
Σ = [σ_x2  0    00    σ_y2  00    0    σ_z2]
  • 如果非對角元素非零,則高斯分布是旋轉的橢球(各向異性)。

3.可視化學習

(1)一維高斯分布可視化→ 理解均值和標準差

import numpy as np
import matplotlib.pyplot as plt# 定義高斯函數
def gaussian_1d(x, mu=0, sigma=1):return (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma)**2)# 生成數據
x = np.linspace(-5, 5, 500)  # x范圍
mu = 0    # 均值
sigma = 1 # 標準差# 計算概率密度
pdf = gaussian_1d(x, mu, sigma)# 繪圖
plt.figure(figsize=(8, 4))
plt.plot(x, pdf, 'b-', linewidth=2, label=f'μ={mu}, σ={sigma}')
plt.title('1D Gaussian Distribution')
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.legend()
plt.grid(True)
plt.show()

  • 改變 𝜇 會平移曲線,改變 𝜎會調整曲線的“胖瘦”。

(2)二維高斯分布可視化→ 理解協方差矩陣控制形狀

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 定義二維高斯函數
def gaussian_2d(x, y, mu_x=0, mu_y=0, sigma_x=1, sigma_y=1, rho=0):"""rho: 相關系數(控制旋轉)"""z = (1 / (2 * np.pi * sigma_x * sigma_y * np.sqrt(1 - rho**2))) * np.exp(-0.5 / (1 - rho**2) * (((x - mu_x) / sigma_x)**2 +((y - mu_y) / sigma_y)**2 -2 * rho * (x - mu_x) * (y - mu_y) / (sigma_x * sigma_y)))return z# 生成網格
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)# 案例1:各向同性(圓形)
Z_iso = gaussian_2d(X, Y, sigma_x=1, sigma_y=1, rho=0)# 案例2:各向異性(橢圓,旋轉45度)
Z_aniso = gaussian_2d(X, Y, sigma_x=2, sigma_y=0.5, rho=0.5)# 繪制3D圖
fig = plt.figure(figsize=(12, 6))ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(X, Y, Z_iso, cmap='viridis')
ax1.set_title('Isotropic Gaussian (σ_x=σ_y)')ax2 = fig.add_subplot(122, projection='3d')
ax2.plot_surface(X, Y, Z_aniso, cmap='plasma')
ax2.set_title('Anisotropic Gaussian (σ_x≠σ_y, ρ≠0)')plt.tight_layout()
plt.show()

  • 各向同性:等高線是圓形(sigma_x = sigma_y)。
  • 各向異性:等高線是橢圓(通過 sigma_x、sigma_y 和 rho 控制拉伸和旋轉)。

(3)三維高斯分布可視化→ 掌握各向異性橢球的生成

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dimport pyvista as pvdef generate_3d_gaussian(mu=[0, 0, 0], cov=[[1, 0, 0], [0, 1, 0], [0, 0, 1]], n_points=1000):"""生成3D高斯分布點云"""points = np.random.multivariate_normal(mu, cov, size=n_points)return points# 案例1:各向同性(球體)
points_iso = generate_3d_gaussian(cov=np.eye(3))# 案例2:各向異性(橢球,拉伸和旋轉)
cov_aniso = [[2, 1, 0], [1, 1, 0], [0, 0, 0.5]]  # 協方差矩陣
points_aniso = generate_3d_gaussian(cov=cov_aniso)# 可視化
plotter = pv.Plotter(shape=(1, 2))plotter.subplot(0, 0)
plotter.add_points(points_iso, color='blue', point_size=5)
plotter.add_title('Isotropic 3D Gaussian')plotter.subplot(0, 1)
plotter.add_points(points_aniso, color='red', point_size=5)
plotter.add_title('Anisotropic 3D Gaussian')plotter.show()

(4)3D潑濺?→ 理解投影和渲染邏輯。

4.3D 幾何與坐標變換

在 3D Gaussian Splatting 中,我們需要將一個在三維空間中表示的高斯分布(點)投影到圖像平面上。這一過程涉及多個坐標系之間的轉換:世界坐標系、相機坐標系、圖像坐標系。為了理解這個過程,首先要掌握基本的三維幾何與坐標變換知識。

三維坐標系的種類

坐標系名稱說明
世界坐標系(World Coordinate System)場景中所有物體的統一參考坐標系。
相機坐標系(Camera Coordinate System)以相機為原點的坐標系,Z軸朝向視線方向。
圖像坐標系(Image Coordinate System)圖像上的像素位置(通常是 2D 坐標)。

高斯點最初位于世界坐標系,但為了在屏幕上正確繪制它,我們必須將其轉換到圖像坐標系

坐標變換流程

世界坐標 P_world 
→ 相機坐標 P_camera = [R | t] * P_world(外參矩陣) 
→ NDC(標準設備坐標) → 圖像坐標(像素位置)

解釋:

  • R 是旋轉矩陣(3×3)

  • t 是平移向量(3×1)

  • [R | t] 組成了 外參矩陣,將世界坐標變換到相機坐標

  • 然后乘上 投影矩陣(內參),將相機坐標轉換到圖像平面

齊次坐標與變換矩陣

為統一表達旋轉、平移等操作,我們使用齊次坐標(Homogeneous Coordinates)

  • 一個三維點 P = [x, y, z] → 齊次形式為 [x, y, z, 1]^T

坐標變換統一用 4×4 矩陣表示:

P_camera = T_view * P_world
T_view = | R  t || 0  1 |

繼續投影到圖像空間:

P_image = K * T_view * P_world

其中:

  • K 是相機內參矩陣,包含焦距、主點等;

  • P_image 是圖像平面上的點。

應用于 Gaussian Splatting 的場景

在 Gaussian Splatting 中,每個三維高斯分布點都有其位置(中心點)、方向(協方差矩陣)等參數。這些點需要經過上述變換,從世界空間轉換到相機空間,并最終以一種“模糊點”(splat)的方式渲染到圖像上。因此,理解坐標變換過程是后續理解高斯渲染公式、遮擋處理、深度排序等機制的基礎。

5.相機模型與投影過程

在 Gaussian Splatting 中,我們需要將三維空間中的高斯點“投影”到二維圖像平面上,就像真實相機將三維世界成像到一張照片上一樣。這個過程依賴于相機模型,它描述了從 3D 點到 2D 像素的轉換方式。

什么是相機模型?

相機模型是一種數學模型,模擬真實相機是如何拍攝一張照片的。它包括兩個主要部分:

類型描述關鍵內容
外參(Extrinsic Parameters)描述相機在世界中的位置和朝向用旋轉矩陣 R 和位移向量 t 表示
內參(Intrinsic Parameters)描述相機的內部結構與成像方式焦距、主點、圖像尺寸、像素間距等

相機投影原理

我們可以類比真實世界:
📸 相機就像一個小孔,把三維空間的光線投射到一個二維圖像平面上。

數學表達為:

P_image = K × [R | t] × P_world

其中:

  • P_world 是世界坐標中的 3D 點

  • [R | t] 是外參矩陣,將世界坐標轉換為相機坐標

  • K 是內參矩陣,將相機坐標轉換為圖像平面坐標(像素)

相機坐標 → 圖像坐標的步驟

第一步:世界坐標 → 相機坐標

這個變換告訴我們:相機看到的點在它本地坐標系中長什么樣。

第二步:相機坐標 → 歸一化圖像坐標(投影)

這是“透視投影”的核心思想 —— 離相機越遠的點,看起來越小。

第三步:歸一化 → 像素坐標(通過內參矩陣)

  • (u, v) 是圖像上的像素位置;

  • fx, fy 是像素方向上的焦距(單位:像素);

  • (cx, cy) 是圖像中心點(principal point)。

實際意義:從 3D 到 2D 的投影

整個流程可以形象理解為:

真實世界中的3D點(例如樹的一片葉子)  
→ 相機觀察它的視角(R, t)  
→ 計算它落在圖像哪個像素位置(通過K)

6.體積渲染與透明度混合

在 Gaussian Splatting 和 NeRF 等技術中,傳統的“繪制網格三角形”的方式被替代為“模擬光穿過一個透明體積的過程”,這就是體積渲染。它的目標是:從一個視角出發,計算每條光線穿過空間時,最終在圖像像素上看到的顏色。

什么是體積渲染?

體積渲染是通過對光線在三維空間中的“穿行過程”建模,計算出最終像素顏色的技術。

我們可以想象,視線(光線)從相機發出,穿過一段“有顏色和透明度”的霧狀體積,最終到達我們的眼睛。在這段路徑上,顏色不斷“疊加”,這就是體積渲染的基本思想。

核心思想:光線積分

體積渲染的本質是:在一條光線上積分所有位置的顏色和不透明度,決定最終的像素顏色。???????

設想我們沿光線采樣許多點,每個點有:

  • 顏色值 c_i(RGB)

  • 密度值 σ_i(表示該點“多不透明”)

每個點的**不透明度(透明度補數)**記作:

其中 δ_i 是采樣點之間的距離。

透明度混合(Alpha Blending)

每個點對最終像素顏色的貢獻由其前面的透明度控制。這個過程叫做 前向透明度混合(front-to-back alpha compositing)

假設有 N 個采樣點,每個點顏色為 c_i,不透明度為 α_i,權重(可視度)為 T_i,則最終像素顏色為:

其中:

意思是:前面所有點“透明”才能看到當前第 i 個點的顏色。

示例類比:多層玻璃窗

我們看向遠方,面前有好幾塊半透明玻璃,每塊玻璃都上了一點顏色

  • 第一塊玻璃影響最多;

  • 第二塊玻璃的顏色只有在第一塊足夠透明時才能顯現;

  • 第三塊玻璃受到前兩塊的遮擋;

  • 最終我們看到的顏色,是所有玻璃“混合”的結果。

在 Gaussian Splatting 中的作用

在 Gaussian Splatting 中:

  • 每個高斯就像一個有顏色和透明度的模糊斑點

  • 從一個視角出發,對所有高斯進行深度排序

  • 按順序進行透明度混合,疊加顏色;

  • 得到最終像素顏色,就像體積渲染中的“光線積分”。

但與 NeRF 不同,Gaussian Splatting 是一種點級別的近似快速渲染,不是連續空間積分,而是基于稀疏高斯點進行快速 alpha 混合。

7.NeRF 原理簡介:神經體積渲染的基準模型(可與 Gaussian Splatting 對比)

什么是 NeRF?

NeRF(Neural Radiance Fields) 是 2020 年由 Google 提出的新型 3D 表示方法,它使用一個神經網絡來擬合一個場景的體積顏色與密度函數,然后利用體積渲染技術合成新視角圖像。

NeRF 是 Gaussian Splatting 出現之前最廣泛使用的三維重建方案之一。

NeRF 的核心思想

NeRF 的核心是一個函數:

  • 𝑥 ∈ ?3:表示空間中的一個 3D 點

  • 𝑑 ∈ ?3:表示相機視角方向(單位向量)

  • 輸出 c ∈ ?3:該點在該方向下的 RGB 顏色

  • 輸出 σ ∈ ??:體積密度(用來計算透明度)

也就是說,NeRF 使用一個 MLP 神經網絡來表示場景的顏色和體積結構

渲染方式:體積渲染積分(Volume Rendering)

NeRF 沿著每個像素的視線進行采樣,使用神經網絡預測每個采樣點的顏色和密度,然后通過**體積渲染(參考上一節)**混合得到最終顏色。

NeRF 每條光線都要采樣幾十到上百個點,并且每個點都要前向一次神經網絡 → 渲染非常慢(分鐘級)

優點與缺點

優點缺點
表示能力強:細節豐富、精度高訓練和渲染都非常慢
能表示連續空間(非點云)不可實時互動
適合離線精渲染任務不適合實時應用、游戲等

Gaussian Splatting 與 NeRF 的對比

項目NeRFGaussian Splatting
表示形式MLP(神經網絡)高斯點分布
渲染方式連續采樣 + 體積渲染離散高斯疊加
渲染速度慢(需推理 MLP)快(GPU 可并行)
實時性不支持支持實時渲染
內存占用相對較小高斯點云較大
場景表達能力精度高,細節豐富精度略低,但效率高

NeRF 與 Gaussian 的演進路徑

NeRF 系列發展出了很多變種(FastNeRF、InstantNGP、MipNeRF、Zip-NeRF),目的都是為了加速渲染、減少訓練時間。而 Gaussian Splatting 是直接跳出神經網絡,將渲染過程“顯式化”為可快速繪制的高斯點云,成為一種新范式。

NeRF 是“隱式渲染”(用網絡預測顏色+密度),而 Gaussian Splatting 是“顯式渲染”(直接用可見的高斯點+數學公式渲染),這就是“渲染過程顯式化”的意思。

Gaussian Splatting 的“顯式渲染”機制:

Gaussian Splatting 不再使用黑盒函數表示場景,而是直接生成一堆可見的、有意義的點:

每個點(3D Gaussian)具有:

  • 位置(在世界坐標中)

  • 顏色(RGB)

  • 透明度(α)

  • 空間尺度(決定模糊大小)

  • 方向(協方差矩陣)

  • 屏幕上的外形(經過投影變換)

渲染時:

? 不再用神經網絡!直接把這些高斯點投影到屏幕 → 進行 α 混合 → 生成圖像。

這一過程完全顯式、可計算、可并行、可加速,非常適合 GPU 實時處理。

總結

特性NeRF(隱式)Gaussian Splatting(顯式)
表達方式神經網絡 MLP(函數)高斯點(真實幾何+屬性)
渲染方式推理+體積渲染投影+α混合
每次渲染都需要?網絡推理幾十次點→像素變換+混合即可
渲染速度慢(秒級)快(實時)
可視化不可直接看場景結構點云可視化直接看到場景形狀

8.Gaussian Splatting 的核心思想

核心一句話:

Gaussian Splatting 是一種用“3D 高斯點云”來實時渲染場景的技術,核心思想是:把一個 3D 世界顯式表示成許多透明的、有顏色的模糊斑點,然后投影到屏幕上進行混合,生成最終圖像。

1?? 從點云到高斯

我們知道,傳統的三維重建(如激光掃描)會得到“點云”,每個點有位置和顏色。但這些點是“離散的”,看起來會有鋸齒、空洞。

于是,Gaussian Splatting 提出:

🔵 把每個點變成一個 3D 高斯分布,也就是一個模糊的、橢球形的斑點。它有:

  • 位置(在哪兒)

  • 形狀(橢球大小方向)

  • 顏色(RGB)

  • 不透明度(α)

這讓原本“零散的點”變成了“柔和的、連續的體積”,更像真實世界。

2?? 把高斯“潑”到屏幕上

“Splatting” 是圖形學里的術語,意思是“把點在屏幕上鋪開/投影出去”。

Gaussian Splatting 的做法是:

📷 把每個 3D 高斯點 根據相機視角投影到屏幕上,變成一個 2D 的橢圓模糊圖形。

這個過程考慮了:

  • 相機位置(從哪看)

  • 高斯的方向和大小(變換后是屏幕上的橢圓)

3?? 使用透明度混合生成圖像

多個高斯點可能會投影到同一個像素位置。

🧪 所以我們要像 Photoshop 那樣,“一層層疊加”,用 alpha 混合公式,得到最終顏色。

疊加規則是:

  • 離相機近的點要先渲染;

  • 每個點的透明度決定它對最終顏色的貢獻;

  • 像體積渲染那樣累加顏色,越后面的點貢獻越小(被遮擋)。

? 為什么這很聰明?

相比 NeRF,它的優點是:

特點Gaussian SplattingNeRF
場景表示顯式高斯點云黑盒神經網絡
渲染方式投影+透明度混合光線采樣+MLP推理
渲染速度快,可實時慢,需要推理
顯存占用稍大(保存高斯)相對較小
可解釋性點是明確可見的不可視,需要解碼

Gaussian Splatting 是一種將 3D 場景顯式表示為高斯點的技術,使用快速投影和透明度混合代替傳統 NeRF 的光線采樣與 MLP 推理,顯著提升了渲染速度并支持實時交互。


9.GS點的參數

在 3D Gaussian Splatting 中,一個點不是簡單的“位置 + 顏色”,而是帶有空間分布、方向、透明度等信息的可渲染斑點。它的參數大致可以分為三類:

🧩 第一類:幾何信息(Geometry)

1?? 位置 μ ∈ ?3

  • 這是高斯分布的中心點,定義了這個點在 3D 空間中的位置。

  • 就像傳統點云里的一個點的位置。

📌 舉例:一個點在 [1.0, 2.0, 3.0] 的位置,它就“漂浮”在這個空間中。


2?? 協方差矩陣 Σ ∈ ?3?3(或者參數化形式)

  • 控制這個高斯的形狀和朝向,相當于定義了一個橢球體的大小和方向。

  • 可以理解為這個點“在空間中模糊到哪里去”,是細小點還是大斑塊。

📌 比如:

  • 如果協方差小,那就是一個“尖的點”;

  • 如果協方差大,那就是一個“模糊的大點”。

📍 實際論文中會使用參數矩陣 Λ 代替協方差 Σ,便于訓練(可正定性)。


🎨 第二類:外觀信息(Appearance)

3?? 顏色 c ∈ ?3RGB

  • 表示這個點本身的顏色,在渲染時直接作為輸出圖像的一部分。

  • 有些版本還會加上顏色不確定度,但基本就是顏色本身。

📌 例:[0.2, 0.5, 0.8] → 藍綠色點。


4?? 不透明度 α 或體積密度 σ

  • 控制這個點對最終圖像的貢獻有多大,越大越“實”,越小越“透明”。

  • 類似 Photoshop 圖層的不透明度,或者 NeRF 中的體積密度。

📌 透明點對結果貢獻小;不透明點容易遮擋后方點。


🔧 第三類:渲染輔助信息(Rendering Parameters)

5?? 視角依賴性(View-dependent feature)🔁(可選)

  • 一些版本中引入了方向特征(如 SH spherical harmonics 球諧函數)來模擬表面反射光效果。

  • 這是為了解決:一個點在不同視角看起來顏色不一樣的問題(比如鏡面反射)。

📌 這部分在論文中可選開啟,核心思想是使高斯點在不同角度下顯示不同顏色。


6?? 混合優先級 / 深度排序(用于渲染排序)

  • 高斯點需要根據到相機的距離來排序,靠近的先渲染。

  • 雖不是“參數”,但每幀渲染前需要用這個信息進行排序,以正確合成透明度。


🧠 總結表格:一個點的關鍵參數

類別參數描述作用
幾何μ空間位置決定點在哪里
幾何ΣΛ空間形狀協方差控制模糊方向和大小
外觀c顏色決定渲染顏色
外觀α不透明度控制遮擋和貢獻
渲染SH特征(可選)視角依賴色表面高光反射等特效
渲染深度距離相機距離控制前后遮擋順序

10.自適應密度控制

① 通俗比喻:撒網捕魚
想象你在海上捕魚,但魚的分布不均勻:

  • 普通方法:你不管三七二十一,在整個海面均勻撒網(就像均勻采樣)。結果魚多的地方網不夠密,漏掉很多;魚少的地方網太密,浪費力氣。
  • 自適應方法:你聰明了,先快速試探幾網,發現魚群集中在某幾個區域。然后你調整策略——在魚多的地方多撒網(高密度采樣),魚少的地方少撒網(低密度采樣)。這樣既省力,又捕得多。

這就是自適應密度控制的核心思想:根據目標的重要性動態調整采樣密度!

②在光線積分中的應用
在渲染(比如路徑追蹤)中,我們需要計算光線在場景中的積分(比如光照效果)。但不同區域的光線貢獻差異巨大:

  • 高貢獻區域:比如明亮的光源、銳利的陰影邊緣、復雜的反射區域(需要更多采樣)。
  • 低貢獻區域:比如黑暗的角落、平滑的漫反射表面(需要較少采樣)。

自適應密度控制會自動識別這些區域,并分配不同的采樣密度:

  • 先粗采樣:快速用少量光線試探整個場景,找出哪些地方對最終畫面影響大(比如高光或陰影邊界)。
  • 再精調:對重要區域發射更多光線(提高采樣密度),不重要區域減少光線(節省計算資源)。
  • 動態調整:隨著渲染進行,持續優化采樣分布(類似“邊觀察邊調整撒網位置”)。

③為什么需要它?

  • 省時間:避免在無關區域浪費計算資源。
  • 降噪聲:在復雜光照區域(比如焦散、鏡面反射)增加采樣,減少畫面噪點。
  • 自適應性強:適合各種復雜場景,無需人工預設采樣規則。

④舉個渲染例子
假設渲染一個室內場景:

  • 窗戶附近:陽光直射+玻璃反射,光線變化劇烈 → 自適應算法會分配更多采樣。
  • 陰暗墻角:光線簡單且微弱 → 減少采樣。
  • 最終效果:畫面噪點少,且計算速度更快!

總結
自適應密度控制就像“智能撒網捕魚”:先探路:快速找出重要區域。再聚焦:對關鍵區域集中火力。動態調整:隨時優化效率。在光線積分中,它讓渲染器更聰明地分配計算資源,用最少的光線達到最好的畫面質量。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83841.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83841.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83841.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++】不推薦使用的std::allocator<void>

文章目錄 不推薦使用的std::allocator<void>1. 核心區別2. 成員函數對比(1) allocate 和 deallocate(2) construct 和 destroy 3. 設計動機(1) std::allocator<T>(2) std::allocator<void> 4. 使用場景示例(1) std::allocator<int>(2) std::allocator&…

Go 語言云原生微服務全棧實戰:Docker 鏡像優化、K8s 編排與 Istio 流量治理

本系列文章將以 Go 語言為主導開發語言&#xff0c;系統性地講解如何從零構建一個基于微服務架構的應用系統&#xff0c;涵蓋以下核心模塊&#xff1a; 使用 Go 構建高性能微服務構建精簡且高效的 Docker 鏡像利用 Kubernetes 進行微服務編排與部署通過 Istio 實現微服務的流量…

windows下authas調試tomcat

一般情況下&#xff0c;我們只需要輸入以下代碼 java -jar authas.jar調試tomcat時需要加上進程號 java -jar authas.jar <PID> 此外&#xff0c;如果你使用的是 Java 11 或更高版本&#xff0c;你需要添加 --add-opens 參數&#xff0c;以便 Arthas 能夠訪問 JVM 的內…

01_springboot中bean的生命周期

文章目錄 bean的生命周期1. Bean定義階段2. Bean實例化階段3. 屬性賦值階段4. 初始化階段5. 使用階段6. 銷毀階段 bean的生命周期 在Spring Boot中&#xff0c;Bean的生命周期包括定義、實例化、屬性賦值、初始化、使用和銷毀等階段。下面我將詳細解釋這些階段&#xff0c;并提…

Oracle基礎知識

目錄 1.別名的使用 2.AND的優先級高于OR 3.where后面可以接別名&#xff0c;order by后面不可以 4.Oracle中SQL的執行順序(重點) 5.dual萬用表 6.是否區分大小寫 7.Oracle常用數據類型 8.Oracle常用函數 (1)length字符、lengthb字節和cast強制類型轉換 (2)數據類型轉…

React 播客專欄 Vol.13|樣式不難搞,Tailwind CSS 與 SVG 實戰入門

&#x1f44b; 歡迎回到《前端達人 React 播客書單》第 13 期&#xff08;正文內容為學習筆記摘要&#xff0c;音頻內容是詳細的解讀&#xff0c;方便你理解&#xff09;&#xff0c;請點擊下方收聽 視頻版&#xff1a; 文字版&#xff1a; 今天我們進入樣式化的實戰環節&…

matlab慕課學習3.5

于20250520 3.5 用while 語句實現循環結構 3.5.1while語句 多用于循環次數不確定的情況&#xff0c;循環次數確定的時候用for更為方便。 3.5.2break語句和continue語句 break用來跳出循環體&#xff0c;結束整個循環。 continue用來結束本次循環&#xff0c;接著執行下一次…

鴻蒙開發進階:深入解析ArkTS語言特性與開發范式

一、前言 在鴻蒙生態開發體系中&#xff0c;DevEco Studio作為核心開發工具為開發者提供了高效的集成環境。而在掌握工具使用之后&#xff0c;深入理解鴻蒙開發語言成為構建高質量應用的關鍵。本文將聚焦于鴻蒙系統的核心開發語言——ArkTS&#xff0c;全面解析其起源演進、聲…

P2P最佳網絡類型

跑P2P最佳的網絡類型是什么&#xff1f;全錐型NAT1網絡它屬于最寬松的網絡環境&#xff0c;IP和端口都沒有限制&#xff0c;穿透率在95%以上&#xff0c;P2P連接成功率極高。使用全錐型網絡的節點收益比其他受限網絡類型高出3倍左右&#xff0c;能顯著提升PCDN的跑量和收益。 其…

電子制造企業智能制造升級:MES系統應用深度解析

在全球電子信息產業深度變革的2025年&#xff0c;我國電子信息制造業正經歷著增長與轉型的雙重考驗。據權威數據顯示&#xff0c;2025年一季度行業增加值同比增長11.5%&#xff0c;但智能手機等消費電子產量同比下降1.1%&#xff0c;市場競爭白熱化趨勢顯著。疊加關稅政策調整、…

在nextjs項目當中使用wagmi連接MetaMask SDK

Wagmi 是一個為以太坊和 EVM 兼容鏈構建的 React Hooks 庫,專為簡化 Web3 應用開發而設計。它提供了一組強大且類型安全的工具,使開發者能夠更方便地與錢包(如 MetaMask、WalletConnect 等)和智能合約進行交互。 Wagmi 的全稱其實并不是一個傳統意義上的縮寫,它源自加密社…

DeepSeek+PiscTrace+YOLO:迅速實現Mask掩碼摳圖

在計算機視覺任務中&#xff0c;特別是在目標檢測和實例分割中&#xff0c;我們常常需要從圖像中提取特定的目標區域。這可以通過使用目標檢測模型&#xff08;如 YOLOv8&#xff09;獲得的檢測框&#xff08;bounding boxes&#xff09;和掩碼&#xff08;masks&#xff09;來…

超級維特根斯坦

AI智能體核心指令:語言智慧融合體 - 深度思辨、專業應用與協同創新大師 1. 角色設定 (Persona) 你將扮演一位“語言智慧融合體”AI,一個集大成的、具備卓越情境智能、精妙引導藝術與長時程戰略規劃能力的語言思想、藝術與應用科學伙伴。你的核心人格與方法論基于以下杰出貢…

CentOS Stream安裝MinIO教程

1. 下載 MinIO 二進制文件 # 進入 MinIO 安裝目錄 sudo cd /usr/local/bin/# 下載 MinIO 二進制文件&#xff08;替換為最新版本鏈接&#xff09; wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio2. 創建專用用戶和存儲目錄 # 創建 minio 用戶…

Android7 Input(八)App Input事件接收器InputEventReceiver

概述 上一個章節&#xff0c;我們講解了App如何使用InputChannel通道與input系統服務建立通信的橋梁的過程&#xff0c;本章我們講述App如何從input系統服務中獲取上報的輸入事件&#xff0c;也就是我們本章講述的InputEventReceiver。 本文涉及的源碼路徑 frameworks/base/c…

VS2017編譯librdkafka 2.1.0

VS2017編譯librdkafka 2.1.0 本篇是 Windows系統編譯Qt使用的kafka(librdkafka)系列中的其中一篇,編譯librdkafka整體步驟大家可以參考: Windows系統編譯Qt使用的kafka(librdkafka) 由于項目需要,使用kafka,故自己編譯了一次,編譯的過程,踩了太多的坑了,特寫了本篇…

第 1 章:數字 I/O 與串口通信(GPIO UART)

本章目標: 掌握 GPIO 的硬件原理、寄存器配置與典型驅動框架 深入理解 UART/USART 的幀格式、波特率配置、中斷與 DMA 驅動 通過實戰案例,將 GPIO 與 UART 結合,實現 AT 命令式外設控制 章節結構 GPIO 概述與硬件原理 GPIO 驅動實現:寄存器、中斷與去抖 UART/USART 原理與幀…

通義千問-langchain使用構建(三)

目錄 序言docker 部署xinference1WSL環境docker安裝2拉取鏡像運行容器3使用的界面 本地跑chatchat1rag踩坑2使用的界面2.1配置個前置條件然后對話2.2rag對話 結論 序言 在前兩天的基礎上&#xff0c;將xinference調整為wsl環境&#xff0c;docker部署。 然后langchain chatcha…

winfrom中創建webapi

參照一下兩篇 Winform窗體利用WebApi接口實現ModbusTCP數據服務_winform webapi-CSDN博客 C#.NET WebApi返回各種類型(圖片/json數據/字符串)&#xff0c;.net圖片轉二進制流或byte - 冰封的心 - 博客園

文本分類任務Qwen3-0.6B與Bert:實驗見解

文本分類任務Qwen3-0.6B與Bert&#xff1a;實驗見解 前言 最近在知乎上刷到一個很有意思的提問Qwen3-0.6B這種小模型有什么實際意義和用途。查看了所有回答&#xff0c;有人提到小尺寸模型在邊緣設備場景中的優勢&#xff08;低延遲&#xff09;、也有人提出小模型只是為了開…