體積渲染
體積渲染(volume rendering)產生的影像,描繪的不是堅硬的表面,而是一種充滿空間的參與性介質——想想霧、煙、雲、發光的星雲,或醫學 CT 資料中三維格點上每點都有某種密度。你不是去找射線打到表面的地方,而是讓射線穿越體積,一路累積顏色並逐漸被密度遮擋。最終的像素是射線所經一切的混合結果。這正是 NeRF 借用來把神經式密度場轉成影像的渲染模型。
其物理是沿每條射線的單一積分。當射線從相機向場景前進時,兩件事相互競爭。每點的密度貢獻出某種發出的顏色,並依該點對相機而言還有多可見來加權。可見性由透射率(transmittance)刻畫:光從相機到該點未被吸收而存活的比例,它從一開始,並隨射線穿過稠密區域而衰減。渲染出的顏色,就是沿射線距離對「透射率乘以局部密度乘以局部顏色」的積分。換言之:每點的顏色,只有在它夠稠密(確實會發光)且未被遮蔽(它的光能抵達相機)的程度內才被計入。
因為沒有電腦能精確積分,這個積分被離散化為沿射線的若干樣本,並以 alpha 合成(alpha compositing)求值——也就是電腦圖學中通用的由前到後混合。每個樣本由其密度與步長換算成一個不透明度(alpha),樣本依序合成:較近、較不透明的樣本佔主導;較遠的樣本只在較近者透明處才透出。累積的透射率不過是已經過樣本上「一減 alpha」的連乘。這個離散形式,正是 NeRF 在訓練與渲染時為每個像素所計算的方程式。
對學習而言關鍵的性質是整條流程是可微分的:渲染出的像素是每個樣本顏色與密度的平滑函數。這意味你能把渲染影像與真實照片比較,並把誤差一路反向傳播到產生這些密度的任何東西——一個神經網路(NeRF)、一個體素格,或一組高斯。因此體積渲染是讓二維照片得以監督三維表示的橋樑,也是 NeRF 式方法實際上正在最佳化的那個積分。
體積渲染沒有堅硬的表面,只有密度分布,這既是它的優點也是缺點。它能自然地表示模糊的事物(毛髮、煙、半透明)且訓練穩定,但要從學到的密度場萃取出乾淨的網格並不簡單——你必須對密度設門檻,而「表面」究竟落在何處是一個建模選擇,並非天生給定。