(177)材質函數概述

材質函數 是材質圖的一些小片段,它們可以保存在包中,並在多個材質之間重複使用。它們的用途是使您能夠即時訪問常用的材質節點網絡,從而簡化創建材質的過程。例如,如果您發現自己經常要創建一個網絡以處理混沌紋理平移,那麼將該部分網絡保存爲材質函數並在需要這種行爲時使用該函數可以大大提高處理速度。

您可在材質編輯器中像是編輯普通材質一樣編輯函數,但在可以使用哪些節點方面存在一些限制。正確使用函數可降低材質冗餘度,進而減輕保持重複表達式同步所需的美工維護工作,以及修改期間遺漏某個副本而引起的不可避免的錯誤。

材質函數也是可以顯示在 內容瀏覽器 中的資產。材質函數圖與材質圖的不同之處在於,材質函數沒有主材質節點,而是具有輸出節點,這些節點代表最終函數的輸出連接。

將材質函數想像成電子設備萬用盒可能有幫助。您可以視需要添加任意數目的輸入和輸出。函數的核心是其在這些輸入與輸出之間執行的操作。此示例接收兩個層並將它們混合到一起,這類似於 Photoshop 的濾色混合 。此函數從想要使用它的美工獲取詳細信息,因此不必實際瞭解濾色混合的數學運算即可使用濾色混合操作。如果任何人稍後想要更改濾色混合的工作方式,他們可以對此函數進行更改,並且該更改會自動傳播到所有使用此函數的材質。

ScreenBlendFunction.png

如上圖所示,在輸入與輸出之間發生的情況完全由您控制,並由標準材質表達式節點的任何網絡所定義。但是,一旦將材質函數部署到材質中,您就會只看到帶有輸入及輸出的函數節點。

ScreenBlendInMaterial.png

材質函數庫

創建材質函數完成後,應該將其發佈到材質函數庫,以方便創建材質期間進行訪問。材質函數庫是材質編輯器中的一個窗口,其中包含經過分類且可過濾的可用材質函數列表。這個列表包含所有已裝入的函數,不過也包含所有雖然未裝入但已通過內容瀏覽器所使用的 內容瀏覽器數據庫 找到的函數。

FunctionLibrary.png

您可將鼠標懸停在這些條目上以便查看其工具提示形式的說明,或者將條目拖放到材質中。

爲了讓材質函數顯示在材質函數庫中,必須選中其 發佈到庫(Expose To Library)屬性。在函數中,取消選中所有節點可顯示該函數自身的基本屬性,您可在其中找到此屬性。

要獲取默認情況下材質函數庫中包含的現有函數的完整列表,請參閱 材質函數參考 。

與函數相關的節點

下列是與材質函數相關的材質表達式節點及其用途:

  • MaterialFunctionCall(材質函數調用)- 允許使用來自另一個材質或函數的外部函數。這個外部函數的輸入及輸出節點將變成函數調用節點的輸入和輸出。

  • FunctionInput(函數輸入)- 只能放在材質函數中,用於在該函數中定義該函數的某個輸入。

  • FunctionOutput(函數輸出)- 只能放在材質函數中,用於在該函數中定義該函數的某個輸出。

  • TextureObject(紋理對象)- 用來爲函數內的紋理函數輸入提供默認紋理。此節點不會對該紋理進行實際取樣,因此必須與 TextureSample(紋理樣本)節點配合使用。

  • TextureObjectParameter(紋理對象參數)- 定義一個紋理參數並輸出紋理對象,以便在調用具有紋理輸入的函數的材質中使用。此節點不會對該紋理進行實際取樣,因此必須與 TextureSample(紋理樣本)節點配合使用。

  • StaticSwitch(靜態開關)- 根據輸入值在兩個輸入之間執行編譯時選擇。

  • StaticBool(靜態布爾值)- 用來爲函數內的靜態布爾函數輸入提供默認布爾值。此節點不會在任何內容之間切換,因此必須與 StaticSwitch(靜態開關)節點配合使用。

  • StaticBoolParameter(靜態布爾參數)- 定義一個靜態布爾參數並輸出靜態布爾值,以便在調用具有靜態布爾輸入的函數的材質中使用。此節點不會在任何內容之間切換,因此必須與 StaticSwitch(靜態開關)節點配合使用。

輸入及輸出

因爲材質函數是封裝的節點網絡,因此用戶負責確保數據可流入和流出材質函數。這是通過 FunctionInput(函數輸入)和 FunctionOutput(函數輸出)節點進行處理的。瞭解這些節點對於使用材質函數十分關鍵。

在函數自身中,FunctionInput(函數輸入)和 FunctionOutput(函數輸出)節點看起來如下所示:

InputOutput_Within.png

但是,從外部來看,在材質中使用函數時,這些節點用作輸入及輸出的引腳:

InputOutput_Without.png

FunctionInput(函數輸入)節點

如上所述,材質輸入節點用作匝道,數據通過其進入材質函數。給定的函數可具有任意數目的輸入節點,其中每一個都與顯示在函數自身上的輸入引腳相對應。

InputNode.png

它們具有下列屬性及數據引腳:

項目

說明

屬性

輸入名稱(Input Name)

提供從函數外部可見的輸入名稱。

說明(Description)

提供輸入說明,當用戶將鼠標懸停在函數的輸入引腳上時,系統會顯示此說明。

輸入類型(Input Type)

向輸入指示所需的數據類型。請參閱下文中的 輸入類型 。

預覽值(Preview Value)

用作一種測試方法,並作爲一種在構造過程中幫助顯示函數用途的方法。任何在此處輸入的值都會被使用,就像通過輸入從函數外部傳遞此值一樣。

使用預覽值作爲默認值(Use Preview Value as Default)

此複選框無非允許您將預覽值中設置的任何數據用作默認值。當您不想強制用戶爲函數提供此值的輸入時,此複選框非常有用。

排序優先順序(Sort Priority)

此數值用於控制輸入引腳在函數節點上列出時採用的順序。順序爲最低到最高。

輸入引腳

預覽(Preview)

此輸入接收一個值,該值將取代“預覽值”(Preview Value)屬性。與相關聯的屬性相同,此輸入對於在構造期間測試函數以及設置默認值而言非常有用。

輸出引腳

(無標籤)

提供函數所要處理的傳入數據的輸出。

FunctionOutput(函數輸出)節點

FunctionOutput(函數輸出)節點提供讓處理後的數據從最終函數中退出以便在材質中進一步使用的方法。與 FunctionInput(函數輸入)節點相同,一個函數可具有任意數目的這些節點,它們可連接到任意數目的潛在輸出。

OutputNode.png

FunctionOutput(函數輸出)節點具有下列屬性:

項目

說明

屬性

輸出名稱(Output Name)

提供從函數外部可見的輸出名稱。

說明(Description)

提供輸入說明,當用戶將鼠標懸停在函數的輸出引腳上時,系統會顯示此說明。

排序優先順序(Sort Priority)

此數值用於控制輸入引腳在函數節點上列出時採用的順序。順序爲最低到最高。

輸入引腳

(無標籤)

提供函數已處理的數據的輸入。此數據將從函數中發出,以便在材質中使用。

輸入類型

輸入具有與其相連接的任何表達式所需的指定類型。您可通過 FunctionInput(函數輸入)節點上的 輸入類型(Input Type)屬性來設置此類型。從函數外部來看,在材質中使用此函數時,此類型會以幾個字母顯示在輸入接頭旁邊。在本例中,輸入都是“矢量 3”(Vector3),因此顯示 V3。在材質中使用時,任何連接到輸入的內容都 必須 可轉換爲輸入類型,否則將發生錯誤。

InputType.png

以下是可用輸入類型及其相關聯的縮寫:

輸入類型

縮寫

標量

S

矢量 2(Vector2)

V2

矢量 3(Vector3)

V3

矢量 4(Vector4)

V4

2D 紋理(Texture2D)

T2D

立方體紋理(TextureCube)

TCube

靜態布爾值(StaticBool)

B

公共屬性

設計函數時,取消選中所有節點將顯示函數自身的基本屬性。

項目

說明

屬性

說明(Description)

當用戶將鼠標懸停在函數列表中的函數上,或者在材質編輯器內將鼠標懸停在函數節點的主體上時,此說明將以工具提示形式顯示。

發佈到庫(Expose to Library)

如果選中這個框,那麼材質函數將顯示在材質編輯器內的材質函數列表中,並可在材質中使用。您可能需要重新啓動編輯器才能顯示新函數。

庫類別(Library Categories)

此數組存放“材質函數”(Material Functions)選項卡的類別,此函數將在所有這些類別下顯示。

預覽

編輯材質函數時,預覽窗口將顯示正在預覽的節點。您可以 右鍵單擊 任何節點並選擇 開始預覽節點(Start Previewing Node),以預覽截至該點爲止的網絡的結果。

StartPreviewing.png

在大部分情況下,您想要預覽函數輸出,因此默認情況下將會預覽這些輸出。

PreviewingOutput.png

函數輸入節點具有一些用於指定預覽值的選項,因爲它們不知道材質中將要使用的實際值。每個輸入都具有內置的 預覽值,此值可用來爲浮點輸入類型顯示常量。函數輸入也具有“預覽”接頭,該接頭允許您使用任何與輸入類型匹配的值來覆蓋內置值。在以下示例中,使用了紋理樣本來提供“浮點 3”輸入的預覽。

PreviewTexture.png

在以下示例中,使用了靜態布爾值節點來提供靜態布爾輸入的默認值。

PreviewStaticBool.png

請注意,此數據具有名爲“使用預覽值作爲默認值”(Use Preview Value As Default)的選項。如果啓用此選項,那麼每當在材質中使用此函數並且未將任何內容連接到該輸入時都會使用預覽值,而不會引起編譯錯誤。這會使該輸入成爲可選輸入,因此它顯示爲灰色。

參數

函數現可包含參數節點類型。這些參數可直接傳遞到任何材質以供使用。

要將紋理參數與函數配合使用,請建立紋理輸入並將其連接到“紋理樣本”(Texture Sample)節點中的紋理覆蓋對象:

TextureParameterFunction.png

然後,在使用該函數的材質中,放置一個 TextureObjectParameter(紋理對象參數)節點並將其連接到紋理輸入:

TextureParameterMaterial.png

同樣,對於靜態開關參數,請建立 靜態布爾值(Static Bool)輸入並將其連接到 StaticSwitch(靜態開關)節點:

StaticSwitchFunction.png

然後,在使用該函數的材質中,放置一個 StaticBoolParameter(靜態布爾參數)節點並將其連接到靜態布爾輸入:

StaticSwitchMaterial.png

組織

函數由幾個人創建但由許多人使用,因此,維護良好的文檔以記錄函數用途以及函數輸入和輸出所需的值十分重要。正因爲如此,函數在函數名稱及輸入/輸出名稱頂部提供了多個文檔字段:

  • 函數說明(Function description) - 單擊空白區域可查看函數屬性,其中包含說明。如果您打算只填寫一個說明字段,請填寫此字段!在任何顯示此函數的位置(內容瀏覽器、材質函數庫以及函數調用節點),此說明都會以工具提示形式顯示。

  • 輸入/輸出說明(Input / output descriptions) - 這些說明位於函數中的輸入及輸出節點上。當您將鼠標懸停在函數調用節點的輸入和輸出上時,這些說明將以工具提示形式顯示。

填寫的函數說明:

FunctionProperties2.png

在材質中使用時顯示的相應工具提示:

FunctionTooltip.png

傳播

您編輯函數並單擊“應用更改”(Apply Changes)時,新版本將傳播到所有引用了此函數的已裝入材質或函數。任何引用了此函數的未裝入材質都將在下次裝入時根據更改進行更新。

如果從函數中刪除某個輸入或輸出並傳播更改,那麼使用了該函數的材質中所有指向這些已刪除接頭的鏈接都將中斷!因爲傳播不可撤銷,所以瞭解這一點非常重要。越多材質使用該函數,發生此類中斷的可能性就越大,因此務必謹慎。

傳播函數更改時,系統會將所有使用了該函數的已裝入材質都標記爲“髒”,您可憑此確定可重新保存哪些包以避免裝入時間增加。您可通過在 內容瀏覽器 中 單擊右鍵 並選擇以下選項來找到所有使用了某個函數的已裝入材質:

FindUsingMaterials.png

嵌套函數

函數可任意嵌套(一個函數位於另一個函數內)並鏈接在一起,但不得產生循環依賴關係。

編譯錯誤

函數內的編譯錯誤將在使用該函數的材質內以紅色突出顯示 MaterialFunctionCall(材質函數調用)節點。錯誤消息也會指出錯誤在哪個函數內發生。在以下示例中,錯誤原因是尚未連接函數的輸入。

CompileErrors0.png

通過爲輸入提供預覽值,然後激活每個輸入的 使用預覽值作爲默認值(Use Preview Value as Default)屬性,可以同時避免上面這組錯誤。但是,這種做法也有副作用,因爲這樣就沒有高度明顯的警報(例如錯誤消息)來提醒您尚未連接某個輸入。

此函數的輸入現已連接完成,但錯誤消息指出使用了此函數的 OneMinus(一減)節點有錯誤。

CompileErrors1.png

請 雙擊 此函數以針對其打開編輯器,其中,OneMinus(一減)節點將因爲出錯而以紅色突出顯示:

CompileErrors2.png

默認材質函數

許多材質函數已創建完畢並隨虛幻引擎 4 一起提供。這些材質函數已可通過 材質編輯器選用板 使用。

您可通過 內容瀏覽器 的 引擎(Engine)> 函數(Functions)文件夾來訪問默認材質函數以進行編輯。

如果對默認材質函數進行任何更改並加以保存,那麼這些更改將存在於這些函數的所有實例中。因此,一般而言,如果您需要更改現有的函數,建議您建立自己的副本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章