我是 Shahid Beheshti 大學物理學/宇宙學的博士生。自 2012 年以來,我也一直是遊戲產業的動畫工程師。您可以在我的 GitHub 上找到我的一些作品。

在這裡,我分享一些在宇宙學研究中使用 Blender 的想法和技巧。雖然這些技巧專門用於宇宙學,但我相信類似的想法也適用於科學的其他領域。這裡展示的所有檔案都可以在這個 GitHub 儲存庫中免費取得。

宇宙學是對巨大尺度(在大小和時間上)的物理世界進行研究的科學;尺度之大,以至於一個星系可以被視為一個單點,時間之長,以至於一千年可以被視為一個時間幀!

我對宇宙學世界的興趣在於宇宙微波背景(CMB)輻射,這是來自早期宇宙的光線。CMB 的溫度約為 2.7 開爾文(約 -270 攝氏度),在天空中幾乎均勻;然而,它在天空中存在一些微小的波動(大小為 10⁻⁶ 至 10⁻⁴ K),其中包含來自早期可定義時期以及宇宙歷史的極具吸引力的資訊。這些光線是我們在天空中能觀察到的最後的東西,來自最遙遠的距離。它們記錄了宇宙歷史上的無數事件,而我們現在很幸運能夠解碼其中一些有趣的資訊。

在 Blender 中用於宇宙學的早期想法,受到 YouTube 上 Seanterelle 富有創意的精彩作品的啟發。他的 Geo Nodes 模擬具有引人注目的表現,給我留下了深刻的印象,我嘗試使用 Geometry Nodes 進行宇宙學計算。

在 2024 年,我們的一個關於 CMB 的專案,利用 Geometry Nodes 作為計算、視覺化和演算法除錯的工具。我們需要一個工具來視覺化 CMB 天空中不同大小的圓蓋和條紋,以檢查它們的區域與銀河系遮罩(由於我們銀河系的污染而無法接收 CMB 光的區域)的重疊程度。透過利用 Geo Nodes 和一些簡單的骨架綁定,我們能夠製作出這樣的視覺化工具。

人們可以透過這篇論文 存取該專案的結果。這個視覺化為我們使用 Geo Nodes 應用於更廣泛的領域和更多的用例提供了起點。

Geometry Nodes 以平行方式在網格元素上計算。如果將網格元素(面或頂點等)視為「數據儲存槽」和「處理線程」,我們就可以完美地利用 Geo Nodes 進行「單指令多數據」(SIMD)計算。雖然 CUDA 或 Compute shaders 等其他工具可能更快,但 Geo Nodes 也提供了免費的除錯器和視覺化工具。它特別適合小型專案;我們可以即時計算和視覺化,在大多數情況下,我們可以在實時中獲得最終的數值結果。

有時我們只需要一個快速可靠的工具,特別是對於計算流程的測試,以檢查其結果是否在物理上正確。Geo Nodes 是在較小規模上測試流程/演算法正確性的便捷工具。在以下章節中,我們將看到一些實際宇宙學的範例,我們不僅可以利用 Geometry Nodes 進行視覺化和除錯,還可以進行計算。

正如前一節所述,要使用 Geometry Nodes 處理數據,我們需要一個 3D 網格來儲存數據並執行處理。為我們的數據製作適當的網格是利用 Geometry Nodes 的第一步。

從計算的角度來看,如何適當地儲存數據是決定性的。我們儲存數據的方式可以極大地減少計算量。宇宙學家和地質學家需要處理球形地圖/數據,並且必須以能夠加快球形計算的方式儲存數據。有一種特殊的球體像素化稱為 HEALPix(分層等面積等緯度像素化)。

正如其名稱所示,這種像素化的像素具有相同的面積。這個球體可以被劃分為與赤道平行的環。它的任何像素中心都不位於極點(處理極點通常很麻煩)。這種像素化非常適合儲存數據,並且進行球形數學計算非常有效。

您可以透過 這裡 的逐步教學找到製作不同解析度的 HEALPix 球體的方法。

儘管 HEALPix 像素化有其優點,但處理這些像素的位置和排序(編號/索引)有時會很複雜。接下來,我們將看到 Geo Nodes 如何讓我們免於處理地圖分析中的繁瑣事務。

一旦我們創建了一個具有適當像素排序的 HEALPix 球體,我們就可以使用 HEALPix 網格的面屬性來儲存 CMB 數據並使用 Geometry Nodes 進行視覺化。這裡 提供了一個詳細的 CMB 地圖視覺化教學,儘管我在此簡要描述步驟。首先,我們需要將地圖數據(例如 CMB 的溫度)注入網格,並將每個 HEALPix 球體面的數據儲存在每個面上。現在我們應該取最小和最大溫度,並將它們範圍化為顏色。

Geometry Nodes 的數據(屬性)投影是一個非常強大的工具,在許多實際範例中都很有益。在本節中,我將舉幾個例子。

在處理宇宙學中的球形數據時,我們需要地圖轉換,並且在數學和計算上保留 HEALPix 像素化在這些轉換中非常重要。在這裡,我們將看到如何旋轉地圖並保留像素化。執行此任務可能看起來很困難,但使用 Geometry Nodes 中的屬性投影工具會非常容易。

這個想法是旋轉 HEALPix 網格(包含地圖在其面上的網格),並將其數據投影到另一個未旋轉(轉換)的 HEALPix 球體上。這實際上是本節討論的所有地圖轉換背後的想法。

在實施方面,在 Geo Nodes 中,我們需要:

遵循這些步驟,人們將獲得一個不錯的旋轉地圖,同時保持像素化完好無損:

地圖旋轉不是屬性投影的唯一用例;我們發現有用的另一個案例是扭曲地圖同時保持像素化。這個想法與旋轉的想法非常相似,即將扭曲的地圖投影到未扭曲的球體上。

不同的物理過程可能導致地圖失真。例如,都卜勒效應是一種物理現象,它會以多種方式改變 CMB 地圖,其中一種是像差(一種特殊的失真)。如果我們相對於光源沒有移動,來自光源的光線將在通常預期的方向上到達我們。然而,由於我們的行星(和星系)在太空中移動(相對於光源),我們在改變的方向上接收到入射光線(請參閱下面的影片)。這種現象稱為像差。這會影響所有進入我們光線(包括 CMB)的光線,因此由於我們相對於光源的運動,每個天空地圖都會失真。

像差效應可以在 Geometry Nodes 中輕鬆模擬。如果我們知道我們的移動速度和方向,我們就可以計算入射光線的像差方向(我們透過觀察到的光線頻率的變化來估計它)。要模擬像差,我們需要扭曲像素邊界(HEALPix 球體的頂點)。如果我們計算每個頂點的像差方向,我們將得到一個扭曲的球體。現在,如果我們將這個扭曲的球體投影到一個正常的 HEALPix 球體上,我們將得到 HEALPix 像素化中的 CMB 像差地圖。

當我們在天空中移動時發生的另一個效應是都卜勒增強效應,這是由於我們相對於光源的運動而導致入射光線波長發生變化。每條 CMB 光線也會受到這種運動的影響,因此我們測量到的溫度不同。知道溫度如何隨速度變化,我們就可以計算每個像素的變化。混合像差和都卜勒增強,我們就可以使用 Geo Nodes 模擬我們在天空中的運動:

在一個宇宙學專案中,我們需要透過機器學習來調查 CMB 天空地圖中的一些異常點。為了讓機器能夠從天空中獲取相似的數據,我們需要天空各區域的方形圖像。起初,HEALPix 地圖令人困惑的索引誤導了我們。過了一段時間,我們發現透過使用 Geo Nodes 的屬性投影,我們可以乾淨地準備所需的圖像,而無需過度思考 HEALPix 令人困惑的索引。

這個想法是一樣的。將一個方形平面放置在您想要擷取圖像的位置,並以與先前部分相同的方式應用投影,您將獲得 CMB 地圖的漂亮方形圖像。

我們可以儲存索引或溫度,但由於技術原因,我更喜歡像素索引。然後,我透過將平面放置在每個區域的頂部並儲存其下方的像素索引來跨越整個天空。這樣,我們就為機器學習程式準備了適當的數據集。

天空中的巨大物體會導致光線在其路徑上彎曲。當我們觀察一個星系時,如果一個巨大物體在我們的視線中,我們會看到它的變形圖像。從我們的角度來看,光源會被偏轉,並與其原始位置不同(就像普通的光學透鏡使我們看到物體變形或錯位一樣)。如果彎曲物體的質量不是太大,則透鏡效應會很弱。這種形式的透鏡效應很容易計算,並且在 CMB 中更常見。

要模擬弱透鏡效應,我們需要找到透鏡效應後的光源的偏轉位置。要在 Blender 中計算這一點,可以將網格的每個頂點視為光源,並透過偏轉角度來操縱其位置

(M 是巨大物體的質量,b 是與巨大物體的垂直距離)。在下面的影片中,您可以看到 Suzanne 的透鏡化圖像;它被假定為一個光源,受到巨大物體的影響。

要在實際場景中利用它,可以拍攝一張星系圖像並將其放在一個平面上(具有足夠的頂點數),並對其頂點執行相同的操作來模擬星系圖像上的透鏡效應:

這對於準備樣本以訓練機器尋找透鏡源或對圖像進行去透鏡化非常有用。

為了在 2D 平面上視覺化球形地圖,有一種常見的風格,即將整個天空攤平成 2D 圖像。有許多有趣的映射,各有其用途。宇宙學家通常使用一種稱為 Mollweide 的映射。

有可用的套件可以幫助我們以 Mollweide 視圖繪製圖表,但它們有自己的限制。Geo Nodes 使我們能夠實現這些 3D 到 2D 的映射,並允許我們對圖表進行幾乎任何操作。例如,我們可以即時視覺化地圖上的變化或繪製自訂輪廓。

要以 Mollweide 繪製圖表,首先,我們需要切割球體以展開它(沿一個經線切割)。我們處理 HEALPix 球體,它具有特殊的拓撲結構。首先,我們應該添加一些邊來完成我們想要切割的經線上的邊循環,然後分割(切割)它,以便球體可以展開。然後,要使用 Mollweide 方法投影點,我們需要迭代一個坐標,並且我們需要 Geo Nodes 中的 for 循環來執行此操作。

一旦我們分割了網格並找到了投影位置,我們的球體將被映射到 Mollweide。

Blender 中的 Mollweide,結合其他章節中的像素化保留技術,將提供一個即時 Mollweide 視覺化工具。例如,在下面的影片中,您可以看到地圖旋轉與 Mollweide 投影的結合:

如前所述,人們可以利用 Geometry Nodes 以平行方式計算事物。計算球形地圖上每個像素的事物是一個非常重要的用例。在宇宙學中,使用球諧函數(或球諧函數)來描述球形地圖/圖像非常普遍。球諧函數類似於傅立葉級數,但它們存在於球體的表面上。它們幫助我們分離球形地圖的大特徵和小特徵,以研究它們的物理起源。

球諧函數通常表示為 Ylm(θ, φ)。它們是方向(θ, φ)的函數,並具有兩個索引 l 和 m。在我們的例子中,方向由 HEAPix 球體上的像素(或其網格的面)表示。計算球諧函數通常有點棘手,因為它們應該使用遞迴數學關係來計算(否則使用直接公式會很快溢位)。有幾種方法可以創建給我們球諧函數的遞迴關係,但大多數都不穩定。它們會很快溢位或變為零。下圖顯示了使用遞迴關係穩定計算球諧函數的路徑。

有了穩定的遞迴關係,我們應該使用節點實現公式。在 Geo Nodes 中編寫長數學公式非常麻煩,我認為這需要一個腳本節點來更輕鬆地處理這種情況;然而,最終結果非常漂亮、快速且方便。

一旦我們正確實現了公式,就可以像地圖一樣在球體表面上顯示它:

眾所周知,Geometry Nodes 使用 float32 數字,這對於分析高解析度地圖或天空分割來說不夠精確,我們需要 float64 數字。然而,使用 Geo Nodes 進行精確計算並非終點。可以透過兩個 float32 數字來模擬 float64 數字及其運算。有很多演算法可以透過兩個 float32 來模擬 64 位數字。我們在 Geometry Nodes 中處理過程中所做的唯一更改是將 64 位數字儲存在兩個 float 通道中,這意味著使用兩個單獨的通道或使用一個向量通道來保存實際數字的兩部分。我們可以創建自訂函數來模仿分離數字的運算子。然而,為了視覺化,將數字轉換回 float32 並進行視覺化就足夠了。

從我第一次在 YouTube 上看到 Seanterelle 的精彩作品,到我開發上述技術,一直到現在,我一直在思考「物理學的其他領域還能如何利用 Geometry Nodes?」我確信其他領域的物理學家可以在他們的領域中利用 Geo Nodes。我可以想像用它來模擬晶體、自旋系統、天體物理系統、液體、蛋白質摺疊、廣義相對論計算/視覺化以及多體系統。這個列表肯定不會在此結束。您也可以思考用例並在您的領域中開發模擬。

我想對 Nima Khosravi 教授表示誠摯的感謝,感謝他在這些工作的科學方面給予的寶貴指導。特別感謝 Abdolali Banihshemi 博士在專案和撰寫這篇文章期間的合作。我也感謝 Francesco Siddi、Fiona Cohen 和 Sybren Stüvel 博士在發表這篇用戶故事方面的善意支持。