大氣散射渲染的藝術與科學
渲染一個真實的天空是電腦圖形學中最具挑戰性但也最有成就感的任務之一。雖然許多開發者依賴靜態天空盒(skyboxes)或簡單的線性漸層來模擬地平線,但要達到真實日落那種令人屏息的品質,或是深邃的太空虛空,則需要深入研究光的物理學。
Maxime Heckel 最近對天空、日落和行星渲染的探索,展示了基於物理的渲染(PBR)相對於「圖形技巧(graphics hacks)」的強大威力。透過模擬光線如何與大氣中的粒子互動,可以創造出動態且可信的環境,並能自然地對太陽和觀察者的位置做出反應。
天空的物理學:超越漸層
對於許多人來說,渲染天空的第一直覺是使用堆疊漸層。雖然這對於靜態圖像可以產生尚可的結果,但它缺乏真實大氣的動態感。正如社群成員所指出的,從「圖形技巧」轉向物理模型,正是區分平庸天空與驚艷天空的關鍵。
真實天空渲染的核心是 大氣散射。這是恆星(例如我們的太陽)發出的光線被行星大氣中的分子和較大粒子偏轉的過程。定義我們所見顏色的散射主要有兩種類型:
- Rayleigh Scattering:這發生在光線撞擊比光波長小得多的粒子(例如氧氣和氮氣分子)時。它對短波長(藍色)的影響比長波長(紅色)更大,這就是為什麼天空在白天看起來是藍色的。
- Mie Scattering:這發生在光線撞擊較大粒子(例如灰塵、花粉或水滴)時。這種散射對波長的依賴性較低,往往會在太陽周圍創造出明亮的「光暈」或眩光。
實作模型
創造這些視覺效果需要數學精確度與運算效率的結合。這個過程通常涉及光線步進(ray marching)——從攝影機發射光線穿過大氣層,以計算路徑上每一點有多少光線會散射向眼睛。
社群強調了幾個基礎資源和替代模型,供想要實作的人參考:
- The Nishita Model:一篇 1993 年的開創性論文「Display of The Earth Taking into Account Atmospheric Scattering」被引用為此主題的「OG」基礎。
- Analytical Models:一些開發者偏好解析模型,例如 Perez All-Weather 或 Preetham sky models,這些模型提供了一種更快、雖然靈活性稍低的方法,可以在不進行完整光線追蹤的情況下計算天空輻射。
- BSSRDF:對於對散射的廣泛科學感興趣的人來說,雙向散射表面反射分佈函數(BSSRDF)對於理解光線如何穿透並從表面射出至關重要——這個概念使得渲染像牛奶或皮膚這類材料變得極其困難。
真實感的挑戰:黃昏問題
即使有了強大的散射模型,要達到完美的真實感仍需關注自然的「邊緣案例」。關於日落模型的一個關鍵觀察是向夜晚的過渡。在許多簡單的模擬中,天空會在太陽落入地平線的那一刻變黑。
在現實中,大氣層在太陽從觀察者的直接視線中消失後,仍會持續捕捉陽光。這會創造出 黃昏,此時高層大氣仍被照亮。在地球上,這種效果會持續到太陽位於地平線下方約 18 度時。實作這點需要模擬能夠考慮到光線路徑在即使太陽技術上已「落下」時,仍會彎曲或在穿過大氣層時發生反射。
擴展地平線
大氣散射很少作為獨立功能存在;當它與其他體積效果結合時,其真正的潛力才會被釋放。開發者指出,將散射與 volumetric cloud rendering(體積雲渲染)結合可以產生超真實的日落,光線會透過雲層過濾,創造出金色、橙色和深紫色交織的複雜圖案。
從 SpaceEngine 的宏大尺度到 Sebastian Lague 的程序化行星實驗,目標始終如一:使用數學來鏡射自然界的之美。無論是為了高端遊戲引擎,還是基於瀏覽器的互動式體驗,從「看起來對」到「符合物理正確性」的轉變,正是視覺效果最令人驚豔的飛躍。