在第一篇文章 時空藍色噪聲實時渲染,第 1 部分 中,我們將時間軸和重要性采樣引入藍色噪波紋理。在這篇文章中,我們將深入了解,展示一些擴展,并解釋一些最佳實踐。
有關更多信息,請在 GitHub 上的 NVIDIAGameWorks/SpatiotemporalBlueNoiseSDK 下載時空藍色噪聲紋理和生成代碼。
藍色噪音是如何工作的,為什么?
藍色噪波紋理中的相鄰像素彼此具有非常不同的值,包括環繞相鄰像素,就像紋理是平鋪的一樣。假設您有一個渲染像素的函數,在 x 中的小變化導致 y 中的小變化, x 中的大變化導致 y 中的大變化。
當為 x 輸入非常不同的鄰居值時,也會為 y 輸出非常不同的鄰居值,從而使渲染結果具有藍色噪波錯誤模式。除非像素渲染函數是散列函數,否則此假設通常適用于幾何體邊或著色不連續。
還值得注意的是,時空藍色噪聲中的每個像素都是隨時間推移的漸進藍色噪聲序列,但從序列中的任何一點開始都是漸進的。這可以在查看 DFT 時看到,并記住傅里葉變換假設被變換序列的無限重復。
藍色噪波中沒有會扭曲頻率內容的接縫。這意味著,當使用 TAA 時,每個像素在不同的時間線上拋出其歷史記錄,當拒絕歷史記錄時,每個像素立即處于良好的漸進采樣序列上,而不是處于較差的序列上,直到序列重新啟動,這在其他采樣策略中很常見。這樣,時空藍色噪聲中的每個像素都是環形漸進的。
值得一提的是,在 TAA 下運動的像素失去了時間上的好處,我們的噪聲就如同純粹的空間藍色噪聲。然而,在一瞬間仍然是偶數的像素獲得了時間穩定性和較低的誤差,當它們再次運動時,這將由 TAA 攜帶。在這些情況下,我們的噪聲并不比空間藍色噪聲差,因此應始終使用它,以在可用的情況下獲得好處,并在其他情況下不會更差。
藍色噪聲去噪
由于數字信號處理的原因,藍色噪聲比白色噪聲更容易從圖像中去除。白噪聲在所有頻率中具有隨機化,而藍噪聲僅在高頻中具有隨機化。
模糊(如長方體濾波器或高斯模糊)是一種低通濾波器,這意味著它可以去除高頻,但可以保持低頻。
- 當白噪聲模糊時,由于低通濾波器的低頻隨機化,它會變成噪聲斑點。
- 當藍色噪聲模糊時,高頻噪聲消失,圖像的低頻部分保持不變。
藍色噪聲在其創建過程中使用高斯能量函數,因此經過優化,可以通過高斯模糊去除。如果您使用高斯函數模糊藍色噪聲,并且看到噪聲斑點仍然存在,這意味著您必須在模糊中使用較大的 sigma ,因為藍色噪聲通過濾波器的頻率較低。在去除這些斑點和在去噪圖像中保留更多細節之間可能存在一種平衡。這取決于你的喜好。
圖 2 、 3 和 4 顯示了在使用原始噪聲和去噪時,藍色噪聲與白色噪聲的比較。
在圖 3 中,兩個圖像總共只有八種顏色,因為它們每個顏色通道只有 1 位。藍色噪聲 – 抖動圖像中有更多可識別和更精細的細節!
要了解為什么藍色噪聲比白色噪聲去噪效果更好,請在頻率空間中查看它們。通過卷積應用高斯模糊,這與頻率空間中的逐像素乘法相同。
- 如果你用高斯核頻率乘以藍色噪聲頻率,就什么都不剩了,而且全是黑色的;高斯模糊消除藍色噪聲。
- 如果你用高斯核頻率乘以白噪聲頻率,你會得到高斯核頻率的形狀(低頻),但它們是隨機的。這些是模糊白噪聲后留下的斑點。
圖 5 顯示了藍噪聲、白噪聲和高斯模糊核的頻率大小。
平鋪藍色噪音
由于沒有任何較大的比例(較低的頻率)內容,藍色噪聲平鋪良好。圖 6 顯示了這一點,但也顯示了藍色噪波平鋪在較低分辨率下變得更加明顯。這一點很重要,因為藍色噪波紋理通常在屏幕上平鋪,并在屏幕空間中使用。如果在使用藍色噪波時注意到平鋪,則應嘗試使用分辨率更高的藍色噪波紋理。
每像素獲取多個值
有時,您可能希望每個像素具有多個時空藍色噪波值,例如在渲染每個像素的多個采樣時。
一種方法是以固定的偏移量讀取紋理。例如,如果在(像素 x ,像素 y ) %textureSize 處讀取第一個值,則可能在(像素 x + 5 ,像素 y + 7 ) %textureSize 處讀取第二個值。這本質上為您提供了一個不相關的時空藍色噪波值,就像您有第二個正在讀取的時空藍色噪波紋理一樣。
之所以這樣做,是因為藍色噪波紋理僅在短距離內具有相關性。在長距離情況下,這些值是不相關的,如圖 7 所示。
理想情況下,如果您想要 N 時空藍色噪波值,則應在彼此最大間隔的 N 偏移處讀取藍色噪波紋理。這樣做的一個好方法是有一個漸進的低差異序列,在其中插入隨機數索引,它會為您提供一個讀取紋理的偏移量。
我們已經非常成功地使用 馬丁·羅伯特的 R2 序列 插入索引,在[0 , 1]中獲得 2D 向量,然后乘以藍色噪波紋理大小以獲得要讀取的偏移量。
不過,還有另一種方法可以通過向每個像素添加秩 1 晶格來獲得每個像素的多個值。這樣做時,它類似于晶格上的 Cranley-Patterson 旋轉,但使用藍色噪聲而不是白色噪聲。
- 對于標量藍色噪聲,我們使用黃金比率或二的平方根得到了很好的結果。
- 對于非單位 vec2 藍色噪聲,我們使用 Martin Robert 的 R2 序列得到了很好的結果。
實際上,您可以使用相同的方法將 2D 藍色噪波紋理轉換為時空藍色噪波,但在該過程中會丟失一些質量。有關更多信息,請參閱 SIGGRAPH 2021 年關于此方法的論文 使用藍色噪聲誤差分布構建屏幕空間采樣器時的經驗教訓和改進 。
這種方法有時比時空藍噪聲收斂得更好,但誤差圖更不穩定,使其時間穩定性降低,并破壞藍噪聲頻譜。圖 8 顯示了頻率損傷,圖 8 顯示了一些收斂行為。有關收斂特性的更多信息,請參閱本文后面的簡單函數收斂部分。
圖 9 顯示了將真實矢量時空藍色噪聲與 R2 低差異序列進行比較的圖表, R2 低差異序列使用單個矢量藍色噪聲紋理進行 Cransley-Patterson 旋轉。
這兩種方法是其他方法之前設置藍色噪波動畫的方式。藍色噪波紋理在每幀上偏移,這使其在空間上為藍色噪波,在時間上為白色噪波,或者在低差異序列中播種藍色噪波值,使其在空間上為損壞的藍色噪波,但在時間上為良好的收斂序列。
通過曲線反演生成矢量值時空藍噪聲
如果你有一個標量時空藍色噪聲紋理,你可以把它通過一個倒置的莫頓或希爾伯特曲線,使它成為一個向量值時空藍色噪聲紋理。我們用希爾伯特曲線得到了更好的結果。雖然這些紋理的表現不如其他制造時空藍色噪聲的方法,但速度要快得多,甚至可以實時完成(圖 10 )。
這種方法的一個有趣之處是,我們發現它可以很好地處理各種抖動掩模或其他標量值(灰度)噪聲模式:拜耳矩陣 交錯梯度噪聲 ,甚至是樣式化的噪聲模式。
在所有這些情況下,當在渲染中使用向量時,會導致錯誤模式,這些錯誤模式采用源紋理的特性和外觀。這對于樣式化的噪波渲染可能很有趣,但也意味著將來,如果發現其他標量采樣遮罩,則可以使用此方法將它們轉換為具有相同屬性的向量值遮罩。
分層
只有在下列條件成立時,向量值時空藍色噪聲的能量函數才能修改為返回非零:
- 像素來自相同的切片(相同的 z 值)
- 交換中涉及的像素的時間直方圖不會變差
如果你這樣做,你最終會得到在空間上呈藍色,但隨著時間分層的噪音;分層順序是隨機的。因為分層不是漸進的,所以在采集所有樣本之前,它不會很好地收斂,但在這一點上效果很好(圖 11 )。
高維藍噪聲
產生時空藍色噪聲的算法并不局限于 3D 。雖然到目前為止,我們還沒有找到這些算法的使用案例,但這些算法可以進行簡單的修改,以產生各種高維的藍色噪聲。如果時空藍色噪聲是 2Dx1D ,因為它在 XY 上是 2D 藍色噪聲,在 Z 上是 1D 藍色噪聲,圖 12 顯示了 4D 藍色噪聲的頻率大小,分別是 2Dx2D 和 2Dx1Dx1D ,尺寸為 64x64x16x16 。
點集
使用 void 和 cluster 算法生成的藍色噪波紋理可以閾值化為一個百分比值。許多像素在閾值化后存活下來,它們是藍色噪聲分布的。我們的標量值時空藍噪聲紋理具有相同的屬性,并產生時空藍噪聲點集。圖 13 顯示了標量時空藍色噪聲紋理的閾值點,以及這些閾值點的頻率振幅。
這些點集使得每一幀的像素都以令人愉悅的空間藍色噪聲的方式分布,但每一幀也會得到不同的點集。這意味著,與白噪波或其他動畫藍噪波方法相比,隨著時間的推移,您可以獲得更多獨特的像素。圖 14 顯示了圖像的五幀累積樣本,使用重要性圖作為每像素藍色噪聲閾值。我們的噪波以最快的速度對最獨特的像素進行采樣,同時在空間上也提供了一個漂亮的藍色噪波圖案。
單函數收斂
在本節中,我們將討論使用常見噪聲類型的簡單函數在蒙特卡羅積分和指數移動平均下的收斂性,以模擬 TAA 。
標量蒙特卡羅積分
圖 15 顯示了 Monte Carlo 積分下的收斂速度,就像您在每像素采集多個樣本時所做的一樣。 HB LDBN 來自 一種低偏差取樣器,將蒙特卡羅誤差作為藍色噪聲分布在屏幕空間中 。雖然低差異序列可以比 STBN 做得更好,但它在時間上更穩定,并且由于在空間上是藍色噪聲而產生良好的感知誤差。 STBN 偏移量 1 / 3 表明,如果從序列中的任意位置啟動 STBN ,它仍然保持良好的收斂特性。這表明 STBN 是環向漸進的。
標量指數移動平均
圖 16 顯示了指數移動平均下的收斂速度。指數移動平均值以 0.1 的值從上一個值線性插值到下一個值。這模擬了無重投影或鄰域采樣拒絕的 TAA 。


Vec2 蒙特卡羅積分
圖 17 顯示了蒙特卡羅積分下的收斂速度。標量 STBN 使用 R2 紋理偏移方法讀取此 2D 積分的兩個標量值。因此,它在階躍函數(最終是一個一維問題)和雙線性函數(最終是一個軸對齊問題)中的性能優于向量 STBN 。重要抽樣有任何錯誤的原因都是由于向量和 PDF 值的離散化。
指數移動平均數
圖 18 顯示了 EMA 下的收斂。指數移動平均值以 0.1 的值從上一個值線性插值到下一個值。這模擬了無重投影或鄰域采樣拒絕的 TAA 。
結論
雖然藍色噪聲采樣點近年來取得了進步,但幾十年來,藍色噪聲紋理似乎在很大程度上被忽略了。如圖所示,時空藍色噪聲紋理對于實時渲染具有幾個理想的特性,在實時渲染中只能提供較低的采樣數:良好的空間誤差模式、更好的時間穩定性和收斂性,以及環形漸進性,僅舉幾例。
我們認為,這些紋理只是開始,因為還有其他幾種改進采樣紋理的可能性,無論它們是基于藍色噪波的、混合的還是完全其他的。
但值得注意的是,還有其他方法可以在樣本數最低的情況下獲得很好的結果。例如, NVIDIA RTXDI 也適用于這種情況,但使用不同的方法。
?