與 SDF 函式的處理

在 16.0.0 版本中,Substance 3D Designer 引入了一組強大的節點來撰寫 SDF 函式,這些函式可用於建立和操作程序化的 3D 形狀。

SDF 函數是 Substance 函數圖,結合工具集中可用的 SDF 節點,並套用於支援 SDF 函數的節點中的專用參數。

作為起點,請記住基本工作流程如下:

  1. 在 3D 檢視🔗節點中撰寫一個 SDF 函數以視覺化結果。
  2. 將最終函數圖複製(或 實例化)到支援 SDF 函數 的節點參數中,例如 Shape splatter v2。

Substance 3D Designer 中 3D SDF 功能節點的動態圖

什麼是SDF函數?

就像數學函數可以在二維中繪製曲線一樣,它們也可以在三維中繪製為曲面。

有符號距離場是一種數學函數,透過計算空間中任意一點到曲面上最近點的距離,來定義三維空間中的曲面。

讓我們來拆解一下「有符號距離場」這個名稱,以更好地理解它:

  • 有符號 表示,若點在表面外側或前方,函數回傳正值;若點在表面內側或後方,則回傳負值;若點正好在表面上,則回傳為零。
  • 距離 指的是函數計算空間中任一點到表面上*最近*點的距離。
  • 場的意思 是函數描述一個值域,因為空間中的每個點都有對應的值,代表它與最近曲面的距離。
可視化由SDF函數產生的形狀,並帶有掃掠等值線。

這些功能在電腦圖形中有許多應用,例如繪製表面、陰影投射、輪廓遮罩、碰撞偵測等。

在 Substance 3D Designer 中,SDF 函式用於以程序化方式建立和操作 3D 形狀。

SDF 函數的輸出與預期用途

SDF 函數節點輸出單一浮點數值:即與最近曲面的有號距離。

但它們還有更多功能:它們內部取得並設定宿主節點需要定義和/或知道的變數值,以便操作和繪製產生的形狀。

這表示這些節點必須用於支援 SDF 函式 的節點,因為它知道這些變數並原生整合。

節點包括 Shape splatter v2 和 3D 檢視器。

物質函數圖

SDF 函數節點設計用於專用的 Substance 函數圖,因此僅能在該圖類型中使用。
節點參數若要以函式形式表示,則使用「編輯函數」按鈕。

你需要知道的關於物質函數圖的事項:

  • 與 Substance 圖類似,節點連接器是​ 專門化 ​的,意即只能連接到代表其類型🔗、顏色​ 相符 的其他連接器。
  • 節點沒有參數,只能有輸入。 (當然有少數特定例外)
  • 該圖只有一個輸出節點。 右鍵點擊節點,選擇 Set as output 指定為輸出節點。
  • 同樣地,與 Substance 圖類似,還有 原子 節點——基礎建構單元——以及 代表其他 Substance 函數圖的實例 節點。
  • 有獨立的運算子(代數運算子、邏輯運算子和比較運算子)可以對圖中的數值進行運算,但 SDF 節點有 自己的運算子
定義 SDF 函數的函數圖範例
working-with-sdf-function-graph.png

開始

要撰寫 SDF 函式,我們首先需要視覺化它們,以便理解我們調整的節點與參數的影響。

3D 檢視節點有專用模式用來視覺化使用 SDF 函數所產生的形狀:將節點的 場景類型 參數設為 ,SDF function並點擊​ 編輯函數 ​按鈕即可開啟將承載 SDF 函式的功能圖。

節點提供專用功能,用以視覺化 SDF 函數的各個面向,讓我們能更直覺且有效率地建構,例如包圍框架與等值線。

物理太陽/天空節點可用於快速設定 3D 檢視器的環境光照。

設定 3D 檢視節點以進行 SDF 函數視覺化。

TIP
table 0-row-2 0-border-none 1-border-none 2-border-none html-authored no-header

所有 SDF 功能節點及其輸入連接器都有工具提示,能讓你更了解它們的用途以及如何使用。

一定要去看看!

SDF 功能節點輸入連接器的提示。

設定節點值

與 Substance 函數圖中的所有節點一樣,SDF 函數節點沒有參數,只有作為參數使用的輸入連接器。

要設定這些輸入的值,可以使用 常數節點 如 Float、 Float3 和 Integer3。
你可以用節點選單中常用的方式建立這些節點,或者從連接器拖曳新連線,這樣就能看到篩選出的匹配節點清單。

大多數 SDF 函式節點的輸入連接器都有預設值,並會在工具提示中揭露。

常數節點用於編輯 SDF 原語。

TIP
table 0-row-2 0-border-none 1-border-none 2-border-none html-authored no-header

如果你不需要一直保持某些數值可見,可以用鍵來停靠節點 D ,這樣可以節省空間並清理圖表。

你也可以用註解來追蹤數值。

SDF 功能節點輸入連接器的提示。

包圍框架

等值線

因為變換形狀涉及實際*轉換它們所繪製的空間*,經過某些變換後所用節點的結果可能會令人驚訝。
在這些情況下,視覺化空間本身會很有幫助,這可以透過視覺化形狀的距離場來實現。

為此,3D 檢視節點使用 等值線,即代表形狀表面給定距離的等高線。 SDF 等值線參數使得這種視覺化成為可能。
等值線繪製在由 SDF 等值線位置參數指定的水平面上。

觀察等值線因變換而變形,有助於理解形狀本身的變換,並相應調整節點參數。

3D 檢視節點的包圍框架功能,用於 SDF 功能。

SDF 功能節點類別

SDF 函數節點在函式庫中依其功能與用途進行分類。

你可以建立任意數量的函式庫檢視,以組織工作區,使 SDF 功能工具組依類別排列,同時保持所有工具隨時可用。 請前往 Windows >新資料庫 檢視以新增獨立的資料庫檢視。

範例工作區
working-with-sdf-workspace.png

基本體

SDF 功能的基本組件,讓你能創造基本形狀,如球體、方框、圓柱體等。

營運商

這些節點讓你能組合和修改用圖元建立的形狀。 包括:

轉換

形狀可以透過多種方式變換,例如平 移、 旋轉、 縮放、 扭轉 等。
這些節點讓你能透過變換表面所定義的空間來執行這些轉換。

這個空間被稱為 ,請 P繼續閱讀下一節,了解它的意義以及空間轉換的運作方式。

材質

基本材質管理可用於使用 SDF 函數產生的形狀。

你可以定義基本材質屬性:顏色、粗糙度和金屬度,用於 3D 檢視器節點的直接視覺化,或作為 Shape splatter v2 節點材質工作的基礎。
你也可以為形狀的不同部分指派材質 ID,將它們分隔開來。

以下將了解這些節點🔗的應用。

「P」輸入

當我們對形狀施加變換,例如偏移或旋轉時,實際上是變換該形狀所處的空間。

如果我們希望轉換能傳播到其他形狀——例如,如果我們想以相同方式旋轉多個形狀——就必須確保它們都使用相同的轉換空間。

轉換後的空間會透過節點的專用 P 輸入來共享,這在大多數 SDF 節點中都能找到。
「P」代表世界空間 P osition:一個三維向量,代表世界空間中某點的座標。

偏移 P 和旋轉 P 節點會轉換空間,並讓你能將這個轉換傳播到所有應該繼承它的節點。
例如,多個圖形可以透過連接 P 同一個旋轉 P 節點來旋轉。

這不僅僅是方便的問題,更是確保SDF節點在空間中能與相同位置運作。

舉個例子:

working-with-sdf-p-input.gif

球體被重複使用,以視覺化空間為三維網格。 **​重複空間。
若沒有共享 P,彎曲圓柱會使用球體所使用的重複空間。
透過共享 P的 ,可以在共享旋轉空間中正確定義形狀。

在「Shape splatter v2」節點使用 SDF 函式

當你在 3D 檢視器節點的上下文中完成一個 SDF 函式後,你可以複製整個函式並貼到 Shape splatter v2 節點,作為該節點的形狀產生器使用。

將 Shape 類型​ 參數設 ​為 SDF function,然後前往 Pattern SDF 函數​參數,點擊​ 編輯函數 ​按鈕即可開啟該參數的功能圖。
接著你可以把從 3D 檢視器節點複製的函式貼到那張圖裡。 (別忘了再設定函數圖的輸出節點!)

務必調整 SDF 的包圍框架大小 參數,使其符合 你在 3D 檢視節點中使用的包圍框架 ,並確保形狀繪製正確。

working-with-sdf-shape-splatter-v2.png
Shape Splatter v2 的​ Shape 類型 ​設定為 SDF function。 注意​ SDF 邊界框架尺寸 ​已調整以符合該形狀。

TIP
若要輕鬆重用 SDF 函式,可以將其複製到新的 Substance 函式圖,並在 3D 檢視器和 Shape splatter v2 節點中作為實例節點​使用。
這帶來多項好處:
  • 你對函式的任何更新都會反映在兩個節點上,不需要再複製貼上。 這對於複雜形狀來說是極大的生活品質提升。
  • 圖可以有一個描述性的名稱,在實例節點中可見,這會讓你使用自己的 SDF 圖形庫更易管理,也讓圖表更易閱讀。
  • 你可以為函數圖建立輸入,然後搭配 Get🔗 節點使用。這些輸入會在實例節點中以輸入連接器的形式暴露,讓你能輕鬆做出形狀的變化。

材質識別

SDF 形狀可以被指派一個材質 ID,這是一個整數值,可以用來區分形狀的各個部分,並在 3D 檢視🔗器和 Shape splatter v2 節點中分配不同的材質。

請注意,不同材質 ID 的表面會被硬邊分割成混合形狀,如下範例所示。

在你想標記特定材質 ID 的形狀部分後面,使用 設定材質 ID 節點,並用 整數 常數節點設定想要的材質 ID 值。
在 3D 檢視器節點中,設定 輸出 參數以 Material ID 視覺化形狀的材質 ID。

working-with-sdf-material-id.png
右側為兩個 3D 檢視節點的輸出,合成顯示形狀(左)與材質 ID(右),說明混合形狀中材質如何插值,而材質 ID 則被分割。

材質 ID 可由 Shape splatter v2 伴隨節點利用:

Shape splatter v2 映射器色彩節點中用於色彩映射的 SDF 材質 ID。 Shape splatter v2 映射器色彩中用於色彩映射
的材質 ID
Shape splatter v2 映射器色彩節點中用於三平面映射的 SDF 材質 ID。 用於 Shape splatter v2 映射器色彩中三平面映射
的材質識別碼
在 Shape splatter v2 中用於遮罩的 SDF 材質 ID。
用於 Shape splatter v2 遮罩
的材質 ID

顏色、粗糙度與金屬度

Set color、Set roughness 和 Set metalness 節點讓你在 SDF 函式中為形狀定義這些材質屬性。

然後,當該 SDF 函式作為 Shape splatter v2🔗 節點的形狀類型時,這些材質屬性會以 SDF 顏色​、 SDF 粗糙度​和 SDF 金屬度​ 輸出的貼圖 ​形式提供。這些地圖可作為使用其他節點進行更複雜材質工作的基礎。

請注意,與材質 ID 不同,數值會 以漸層形式插 值於混合形狀間,如下例所示。

Shape splatter v2 節點的 SDF 色彩輸出。 SDF 色彩輸出
Shape splatter v2 節點的 SDF 粗糙度。
SDF 粗糙度輸出
Shape splatter v2 節點的 SDF 金屬性。 SDF 金屬度輸出

材料樣本

Rusty bolts 材質範例可供跳入 Shape splatter v2 節點中應用的 SDF 函數。

圖表經過組織與註解,引導你了解結構、節點設定及 SDF 函式設定。

它也 完全可 編輯,因此可以作為沙盒,讓玩家更實際地了解 Shape splatter v2 和 SDF 功能工具組。 你可以製作任意多的範例圖表,歡迎隨意嘗試!

3D 檢視節點的包圍框架功能,用於 SDF 功能。
recommendation-more-help
substance-3d-designer-help-guide