什麼是著色器設計工具節點?
Visual Studio 中的著色器設計工具會以圖形呈現視覺效果。 這些圖表透過精確的方式選擇和連線的節點所建置,來達到預期的效果。 每個節點都代表資訊片段或數學函式,而其間的連線代表資訊如何流經圖表來產生結果。 節點類型包括篩選、紋理節點、參數、常數、公用程式節點和數學節點。
節點結構
所有節點都是由通用項目組合所構成。 每個節點在其右側都至少有一個輸出終端機 (代表著色器輸出的最終色彩節點除外)。 代表計算或紋理取樣器的節點在其左側會有輸入終端機,但代表資訊的節點沒有任何輸入終端機。 輸出終端機會連線至輸入終端機,以將資訊從某個節點移至另一個節點。
輸入的提升
因為著色器設計工具最終必須產生 HLSL 原始程式碼,以在遊戲或應用程式中使用效果,所以著色器設計工具節點受限於 HLSL 所使用的類型提升規則。 因為圖形硬體主要作用於浮點值,所以不同類型之間的類型提升 (例如,從 int
到 float
或從 float
到 double
) 並不常見。 相反地,因為圖形硬體同時對多個資訊片段使用相同的作業,所以在較短的輸入數目加長以符合最長輸入大小時進行不同類型的提升。 加長方式取決於輸入類型和運算本身:
如果較小的類型是純量值,則:
純量值會複寫至大小等於較大輸入的向量。 例如,不論運算為何,在最大運算輸入是三項目向量時,純量輸入 5.0 會變成向量 (5.0, 5.0, 5.0)。
如果較小的類型是向量,而且運算是乘法的 (*、/、% 等等),則:
向量的值會複製至大小等於較大輸入之向量的前置項目,而且尾端項目設為 1.0。 例如,向量輸入 (5.0, 5.0) 乘上四項目向量時,會變成向量 (5.0, 5.0, 1.0, 1.0)。 這會使用乘法單位 1.0 保留輸出的第三個和第四個項目。
如果較小的類型是向量,而且運算是加法 (+、- 等等),則:
向量的值會複製至大小等於較大輸入之向量的前置項目,而且尾端項目設為 0.0。 例如,向量輸入 (5.0, 5.0) 加上四項目向量時,會變成向量 (5.0, 5.0, 0.0, 0.0)。 這會使用加法單位 0.0 保留輸出的第三個和第四個項目。
節點和節點類型
著色器設計工具提供六種不同的節點類型 (篩選、紋理節點、參數、常數、公用程式節點和數學節點) 以及數個屬於每種類型的個別節點。
常數節點
在著色器設計工具中,常數節點代表像素著色器計算中的常值和插入頂點屬性。 因為是將頂點屬性插入,而使每個像素都不相同,所以每個像素著色器執行個體都會收到不同版本的常數。 這可讓每個像素有獨特的外觀。
頂點屬性內插補點
遊戲或應用程式中 3D 場景的影像是將多個由頂點、頂點屬性及基本定義所定義的物件,以數學方式轉換成螢幕像素。 提供像素獨特外觀所需的所有資訊都是透過頂點屬性提供,根據像素和不同頂點 (組成像素「基元」) 間的鄰近程度混合在一起。 基元是基本轉譯元素,也就是一個點、一條線或一個三角形等簡單的圖形。 只和其中一個頂點非常接近的像素會收到和該頂點幾乎完全相同的常數,但均勻分佈在基元所有頂點之間的像素收到的常數則為那些頂點的平均值。 在圖形程式設計中,像素可說是收到「插入」的常數。 以這種方式提供給像素的常數資料,可產生良好的視覺品質,同時減少記憶體使用量和頻寬需求。
雖然每個像素著色器執行個體只收到一組常數值,而且無法變更這些值,但不同的像素著色器執行個體會收到不同組的常數資料。 此設計可讓著色器程式為基元中的每個像素產生不同的色彩輸出。
常數節點參考
節點 | 詳細資料 | 屬性 |
---|---|---|
觀景窗向量 | 從目前像素擴充至世界空間之觀景窗的向量。 您可以用這個來計算世界空間中的反射。 輸出 Output : float3 從目前像素到觀景窗的向量。 |
無 |
色彩常數 | 色彩常數值。 輸出 Output : float4 色彩值。 |
輸出 色彩值。 |
常數 | 純量常數值。 輸出 Output : float 純量值。 |
輸出 純量值。 |
2D 常數 | 兩分量向量常數。 輸出 Output : float2 向量值。 |
輸出 向量值。 |
3D 常數 | 三分量向量常數。 輸出 Output : float3 向量值。 |
輸出 向量值。 |
4D 常數 | 四分量向量常數。 輸出 Output : float4 色彩值。 |
輸出 向量值。 |
標準化位置 | 目前像素的位置,以標準化裝置座標表示。 X 和 Y 座標的值在 [-1, 1] 範圍內,而 Z 座標的值在 [0, 1] 範圍內,W 分量包含檢視空間中的點深度值。W 未經標準化。 輸出 Output : float4 目前像素的位置。 |
無 |
點色彩 | 目前像素的擴散色彩,也就是材質擴散色彩和頂點色彩屬性的組合。 輸出 Output : float4 目前像素的擴散色彩。 |
無 |
點深度 | 檢視空間中目前像素的點深度。 輸出 Output : float 目前像素的深度。 |
無 |
標準化點深度 | 目前像素的深度,以標準化裝置座標表示。 結果的值在 [0, 1] 範圍內。 輸出 Output : float 目前像素的深度。 |
無 |
螢幕位置 | 目前像素的位置,以螢幕座標表示。 根據目前檢視區的螢幕座標。 X 和 Y 分量包含螢幕座標,Z 分量包含標準化到 [0, 1] 範圍內的深度,而 W 分量包含檢視空間中的深度值。 輸出 Output : float4 目前像素的位置。 |
無 |
曲面法線 | 物件空間中目前像素的曲面法線。 您可以用這個來計算物件空間中的光源比重和反射。 輸出 Output : float3 目前像素的曲面法線。 |
無 |
正切空間觀景窗向量 | 從目前像素擴充至正切函數空間之觀景窗的向量。 您可以用這個來計算正切函數空間中的反射。 輸出 Output : float3 從目前像素到觀景窗的向量。 |
無 |
正切空間光方向 | 定義目前像素的正切函數空間中光源投射方向的向量。 您可以用這個向量來計算正切函數空間中的光線和反射比重。 輸出: Output : float3 從目前像素到光源的向量。 |
無 |
世界空間法線 | 世界空間中目前像素的曲面法線。 您可以用這個來計算世界空間中的光源比重和反射。 輸出 Output : float3 目前像素的曲面法線。 |
無 |
世界空間位置 | 世界空間中目前像素的位置。 輸出 Output : float4 目前像素的位置。 |
無 |
參數節點
在著色器設計工具中,參數節點代表每次繪製時都受應用程式控制的著色器輸入,例如材質屬性、定向光線、觀景窗位置及時間。 因為您可以透過每次的繪製呼叫,變更這些參數,所以能夠使用相同的著色器提供物件不同的外觀。
參數節點參考
節點 | 詳細資料 | 屬性 |
---|---|---|
觀景窗世界空間位置 | 觀景窗在世界空間中的位置。 輸出: Output : float4 相機的位置。 |
無 |
光方向 | 定義世界空間中光源投射方向的向量。 您可以用這個向量來計算世界空間中的光線和反射比重。 輸出: Output : float3 從目前像素到光源的向量。 |
無 |
材質環境 | 目前像素的擴散色彩比重屬於間接光源。 像素的擴散色彩會模擬光源和粗糙表面如何相互影響。 您可以用材質環境參數約略估計間接光源在實際物件外觀上的比重。 輸出: Output : float4 目前像素的擴散色彩,由間接 (也就是環境) 光源造成。 |
存取權限 [公用] 允許從模型編輯器設定此屬性,否則為 [私用]。 值 目前像素的擴散色彩,由間接 (也就是環境) 光源造成。 |
材質擴散 | 色彩,描述目前像素如何使直接光源擴散。 像素的擴散色彩會模擬光源和粗糙表面如何相互影響。 您可以使用材質擴散參數來變更目前像素使直接光源 (也就是定向、點及聚光光線) 擴散的方式。 輸出: Output : float4 色彩,描述目前像素如何使直接光源擴散。 |
存取權限 [公用] 允許從模型編輯器設定此屬性,否則為 [私用]。 值 色彩,描述目前像素如何使直接光源擴散。 |
材質放射 | 目前像素的色彩比重屬於自身提供的光源。 您可以用此來模擬發光物件,也就是提供自身光線的物件。 此光線並不會影響其他物件。 輸出: Output : float4 目前像素的色彩比重,由自行提供的光源造成。 |
存取權限 [公用] 允許從模型編輯器設定此屬性,否則為 [私用]。 值 目前像素的色彩比重,由自行提供的光源造成。 |
材質反射 | 色彩,描述目前像素如何使直接光源反射。 像素的反射色彩會模擬光源和平滑、鏡面般的表面如何相互影響。 您可以使用材質反射參數來變更目前像素使直接光源 (也就是定向、點及聚光光線) 反射的方式。 輸出: Output : float4 色彩,描述目前像素如何使直接光源反射。 |
存取權限 [公用] 允許從模型編輯器設定此屬性,否則為 [私用]。 值 色彩,描述目前像素如何使直接光源反射。 |
材質光澤度 | 描述反射反白顯示項目之濃度的純量值。 光澤度越大,反射亮部會變得越強烈和深遠。 輸出: Output : float 一個指數項,描述目前像素上的反射亮部濃度。 |
存取權限 [公用] 允許從模型編輯器設定此屬性,否則為 [私用]。 值 指數,定義目前像素上反射亮部的濃度。 |
標準化時間 | 秒數,標準化為範圍 [0, 1],如此,當時間達到 1 時,就會重設為 0。 您可以將這個當做著色器計算中的參數,如此,舉例來說,就能以動畫方式顯示材質座標、色彩值或其他屬性。 輸出: Output : float 標準化時間,以秒為單位。 |
無 |
Time | 時間 (秒)。 您可以將這個當做著色器計算中的參數,如此,舉例來說,就能以動畫方式顯示材質座標、色彩值或其他屬性。 輸出: Output : float 時間,以秒為單位。 |
無 |
紋理節點
在著色器設計工具中,紋理節點會對各種不同材質類型和幾何形狀取樣,並會產生或轉換材質座標。 材質會提供物件上的色彩和光源詳細資料。
紋理節點參考
節點 | 詳細資料 | 屬性 |
---|---|---|
立方體貼圖範例 | 在指定座標接受來自立方體貼圖的色彩範例。 您可以使用立方體貼圖,為反射效果提供色彩詳細資料,或是套用至與 2D 紋理相比較不失真的球面物件紋理。 輸入: UVW : float3 可在取樣的材質立方體上指定位置的向量。 在此向量和立方體交集處取樣。 輸出: Output : float4 色彩範例。 |
紋理 與取樣器相關聯的材質暫存器。 |
法線貼圖範例 | 在指定座標接受來自 2D 法線的法線範例 您可以使用法線貼圖,在物件的表面上模擬其他幾何詳細資料的外觀。 法線貼圖包含表示單位向量而非色彩資料的封裝資料 輸入: UV : float2 取樣處的座標。 輸出: Output : float3 法線範例。 |
座標軸調整 用來調整法線貼圖範例之慣用手的因數。 紋理 與取樣器相關聯的材質暫存器。 |
移動瀏覽 UV | 移動瀏覽指定的材質座標做為時間函數。 您可以使用這個來移動物件表面的材質或法線貼圖。 輸入: UV : float2 要移動瀏覽的座標。 Time : float 移動瀏覽的時間長度,以秒為單位。 輸出: Output : float2 移動瀏覽的座標。 |
速度 X 每秒在 x 軸間移動瀏覽的材質數目。 速度 Y 每秒在 y 軸間移動瀏覽的材質數目。 |
視差 UV | 將指定的材質座標取代為高度和檢視角度函數。 這所建立的效果就稱為「視差對應」,或是虛擬位移對應。 您可以用來在平面上建立深度錯覺。 輸入: UV : float2 要取代的座標。 Height : float 和 UV 座標相關聯的高度對應值。輸出: Output : float2 取代的座標。 |
深度平面 視差效果的參考深度。 根據預設,此值為 0.5。 較小的值會提高材質,較大值則會使材質沈入表面。 深度縮放 視差效果的比例。 這樣會可或多或少表示外表深度。 一般值的範圍介於 0.02 到 0.1 之間。 |
旋轉 UV | 繞著中心點旋轉指定的材質座標做為時間函數。 您可以使用這個在物件的表面旋轉材質或法線貼圖。 輸入: UV : float2 要旋轉的座標。 Time : float 移動瀏覽的時間長度,以秒為單位。 輸出: Output : float2 旋轉的座標。 |
中心 X 定義旋轉中心的 x 座標。 中心 Y 定義旋轉中心的 y 座標。 速度 材質每秒旋轉的角度 (以弧度為單位)。 |
材質座標 | 目前像素的材質座標。 材質座標依是否在附近頂點的材質座標屬性之中插入而定。 您可以將這個當做材質空間中目前像素的位置。 輸出: Output : float2 材質座標。 |
無 |
材質維度 | 輸出 2D 紋理貼圖的寬度和高度。 您可以將材質維度視為著色器中材質的高度與寬度來使用。 輸出: Output : float2 以向量表示材質的高度與寬度。 寬度儲存在向量的第一個元素。 高度會儲存在第二個元素。 |
紋理 與材質維度相關聯的材質暫存器。 |
材質差異 | 輸出 2D 紋理貼圖材質之間的差異 (距離)。 您可以使用材質差異,對著色器中相鄰的材質值取樣。 輸出: Output : float2 材質和下一個材質 (以對角線正向移動) 間的差異 (距離),以標準化材質空間中的向量表示。 您可以選擇性地略過或否定差異的 U 或 V 座標,衍生出所有相鄰材質的位置。 |
紋理 與材質差異相關聯的材質暫存器。 |
材質範例 | 在指定座標接受來自 2D 紋理貼圖的色彩範例。 您可以使用材質貼圖,在物件的表面提供色彩詳細資料。 輸入: UV : float2 取樣處的座標。 輸出: Output : float4 色彩範例。 |
紋理 與取樣器相關聯的材質暫存器。 |
數學節點
在著色器設計工具中,數學節點負責執行代數、邏輯、三角及其他數學運算。
注意
當您使用著色器設計工具中的數學節點時,特別常見型別提升。 如需深入了解型別提升如何影響鍵入參數,請參閱鍵入提升一節。
數學節點參考
節點 | 詳細資料 | 屬性 |
---|---|---|
Abs | 根據每個元件計算指定輸入的絕對值。 對於輸入 X 的每個元件,負值都會轉成正值,以讓結果的每個元件都有正值。輸入: X :float 、float2 、float3 或 float4 這些值可以決定絕對值。 Output: Output :與輸入 X 相同依每個元件而定的絕對值。 |
無 |
加入 | 根據每個元件計算指定輸入的整體元件總和。 對於結果的每個元件,會將輸入 X 與輸入 Y 的對應元件相加。輸入: X :float 、float2 、float3 或 float4 要相加的其中一個值。 Y :與輸入 X 相同要相加的其中一個值。 輸出: Output :與輸入 X 相同每個元件的總和。 |
無 |
天花板 | 根據每個元件計算指定輸入的上限。 值的上限是指大於或等於該值的最小整數。 輸入: X :float 、float2 、float3 或 float4 要計算上限的值。 輸出: Output :與輸入 X 相同每個元件的上限。 |
無 |
夾鉗 | 將指定輸入的每個元件限縮在預先定義的範圍內。 對於結果的每個元件,低於定義範圍的值都會視為等於該範圍中的最小值,高於定義範圍的值則會視為等於該範圍中的最大值,而範圍內的值則不會變更。 輸入: X :float 、float2 、float3 或 float4 要限縮的值。 輸出: Output :與輸入 X 相同每個元件限縮後的值。 |
Max 範圍內最大的可能值。 Min 範圍內最小的可能值。 |
Cos | 根據每個元件,以弧度為單位計算指定輸入的餘弦函數。 對於結果的每個元件,會計算對應元件的餘弦函數 (弧度中所提供)。 結果之元件的值在 [-1, 1] 範圍內。 輸入: X :float 、float2 、float3 或 float4 要以弧度為單位計算餘弦函數的值。 輸出: Output :與輸入 X 相同每個元件的餘弦函數。 |
無 |
交叉 | 計算指定三分量向量的交叉乘積。 您可以使用交叉乘積來計算兩個向量所定義的曲面法線。 輸入: X : float3 交叉乘積左側的向量。 Y : float3 交叉乘積右側的向量。 輸出: Output : float3 外積。 |
無 |
距離 | 計算指定兩點之間的距離。 結果為正純量值。 輸入: X :float 、float2 、float3 或 float4 要判斷之間距離的其中一個點。 Y :與輸入 X 相同要判斷之間距離的其中一個點。 輸出: Output :與輸入 X 相同距離。 |
無 |
分割 | 計算指定輸入的整體元件商數。 對於結果的每個元件,將輸入 X 的對應元件除以輸入 Y 的對應元件。輸入: X :float 、float2 、float3 或 float4 被除數的值。 Y :與輸入 X 相同除數的值。 輸出: Output :與輸入 X 相同每個元件的商數。 |
無 |
點 | 計算指定向量的內積。 結果為純量值。 您可以使用內積來判斷兩個向量之間的角度。 輸入: X :float 、float2 、float3 或 float4 其中一項。 Y :與輸入 X 相同其中一項。 輸出: Output : float 內積。 |
無 |
底板 | 根據每個元件計算指定輸入的下限。 對於結果的每個元件,其值是小於或等於輸入之對應元件的最大整數值。 結果的每個元件都是整數。 輸入: X :float 、float2 、float3 或 float4 要計算下限的值。 輸出: Output :與輸入 X 相同每個元件的下限。 |
無 |
Fmod | 計算指定輸入的整體元件模數 (餘數)。 對於結果的每個元件,輸入 Y 之對應元件的有些整數倍數 m 會和輸入 X 的對應元件相減,因而留下餘數。 倍數 m 已選取,因此,餘數會小於輸入 Y 的對應元件,並且具有與輸入 X 之對應元件相關的符號。 例如,fmod(-3.14, 1.5) 是 -0.14。輸入: X :float 、float2 、float3 或 float4 被除數的值。 Y :與輸入 X 相同除數的值。 輸出: Output :與輸入 X 相同每個元件的模數。 |
無 |
Frac | 根據每個元件移除指定輸入的整數部分。 對於結果的每個元件,輸入之對應元件的整數部分已移除,但仍保留分數部分和符號。 這個分數值會落在 [0, 1] 範圍內。 例如,值 -3.14 會變成值 -0.14。 輸入: X :float 、float2 、float3 或 float4 要計算分數部分的值。 輸出: Output :與輸入 X 相同每個元件的分數部分。 |
無 |
Lerp | 線性插補。 計算指定輸入的整體元件加權平均。 對於結果的每個元件,則是輸入 X 與 Y 之對應元件的加權平均。 加權是由 Percent ,即純量所提供,並且會一致地套用至所有元件。 您可以使用這個來插入點、色彩、屬性和其他值之間。輸入: X :float 、float2 、float3 或 float4 起始值。 當 Percent 為零,結果會等於這個輸入。Y :與輸入 X 相同端點值。 當 Percent 為一,結果會等於這個輸入。Percent : float 以百分比表示輸入 X 與輸入 Y 之間距離的純量加權。輸出: Output :與輸入 X 相同和指定輸入呈共線性的值。 |
無 |
乘積和 | 計算指定輸入的整體元件乘積和。 對於結果的每個元件,輸入 M 與 A 的對應元件乘積會加入輸入 B 的對應元件。 這個運算順序是在常見公式中發現的 - 例如,在線條的點斜面公式,以及使輸入縮放並偏差的公式。輸入: M :float 、float2 、float3 或 float4 要相乘的其中一個值。 A :與輸入 M 相同要相乘的其中一個值。 B :與輸入 M 相同要加入其他兩個輸入乘積的值。 輸出: Output :與輸入 M 相同每個元件的乘積和結果。 |
無 |
Max | 計算指定輸入的整體元件最大值。 對於結果的每個元件,會使用輸入中較大的對應元件。 輸入: X :float 、float2 、float3 或 float4 要計算最大值的其中一個值。 Y :與輸入 X 相同要計算最大值的其中一個值。 輸出: Output :與輸入 X 相同每個元件的最大值。 |
無 |
Min | 計算指定輸入的整體元件最小值。 對於結果的每個元件,會使用輸入中較小的對應元件。 輸入: X :float 、float2 、float3 或 float4 要計算最小值的其中一個值。 Y :與輸入 X 相同要計算最小值的其中一個值。 輸出: Output :與輸入 X 相同每個元件的最小值。 |
無 |
乘積 | 計算指定輸入的整體元件乘積。 對於結果的每個元件,輸入 X 與 Y 的對應元件會相乘。輸入: X :float 、float2 、float3 或 float4 要相乘的其中一個值。 Y :與輸入 X 相同要相乘的其中一個值。 輸出: Output :與輸入 X 相同每個元件的乘積。 |
無 |
標準化 | 標準化指定的向量。 標準化的向量會保留原始向量的方向,而不是它的範圍。 您可以使用標準化的向量來簡化向量範圍不重要時的計算。 輸入: X :float2 、float3 或 float4 要正規化的向量。 輸出: Output :與輸入 X 相同已正規化的向量。 |
無 |
一個負差 | 根據每個元件計算 1 到指定的輸入之間的差異。 對於結果的每個元件,輸入的對應元件會減去 1。 輸入: X :float 、float2 、float3 或 float4 要減去 1 的值。 輸出: Output :與輸入 X 相同每個元件從 1 到指定的輸入之間的差異。 |
無 |
Power | 計算指定輸入的整體元件乘冪。 對於結果的每個元件,輸入 X 的對應元件會自乘至輸入 Y 之對應元件的乘冪。輸入: X :float 、float2 、float3 或 float4 基底值 Y :與輸入 X 相同指數值。 輸出: Output :與輸入 X 相同每個元件的乘冪。 |
無 |
飽和 | 將指定輸入的每個元件限縮在預先定義的範圍 [0, 1] 內。 您可以使用這個範圍來代表計算中的百分比和其他相關度量。 對於結果的每個元件,輸入小於 0 的對應元件值都會視為等於 0,大於 1 的值都會視為等於 1,而範圍內的值則不會變更。 輸入: X :float 、float2 、float3 或 float4 要使之飽和的值。 輸出: Output :與輸入 X 相同每個元件飽和後的值。 |
無 |
Sin | 根據每個元件,以弧度為單位計算指定輸入的正弦函數。 對於結果的每個元件,會計算對應元件的正弦函數 (弧度中所提供)。 結果之元件的值在 [-1, 1] 範圍內。 輸入: X :float 、float2 、float3 或 float4 要以弧度為單位計算正弦函數的值。 輸出: Output :與輸入 X 相同每個元件的正弦函數。 |
無 |
Sqrt | 根據每個元件計算指定輸入的平方根。 對於結果的每個元件,會計算對應元件的平方根。 輸入: X :float 、float2 、float3 或 float4 要計算平方根的值。 輸出: Output :與輸入 X 相同每個元件的平方根。 |
無 |
差集 | 計算指定輸入的整體元件差值。 對於結果的每個元件,輸入 Y 的對應元件會減去輸入 X 的對應元件。 您可以使用這個來計算從第一個輸入擴充至第二個輸入的向量。輸入: X :float 、float2 、float3 或 float4 要相減的值。 Y :與輸入 X 相同要從輸入 X 減去的值。輸出: Output :與輸入 X 相同每個元件的差值。 |
無 |
轉換 3D 向量 | 將指定的 3D 向量轉換成不同的空間。 您可以用這個將向量帶入通用空間,以便用來執行有意義的計算。 輸入: Vector : float3 要轉換的向量。 輸出: Output : float3 已轉換的向量。 |
從系統 向量的原始空間。 至系統 轉換向量的目標空間。 |
公用程式節點
在著色器設計工具中,公用程式節點代表常見且實用,卻不完全適合其他類別的著色器計算。 有些公用程式節點執行簡單的作業,例如將向量附加在一起,或有條件地選擇結果,還有其他執行複雜作業的節點,例如根據常用的光源模型計算光源比重。
公用程式節點參考
節點 | 詳細資料 | 屬性 |
---|---|---|
附加向量 | 將指定的輸入附加在一起,建立一個向量。 輸入: Vector :float 、float2 或 float3 要附加到的值。 Value to Append : float 要附加的值。 輸出: Output :float2 、float3 或 float4 ,取決於輸入類型 Vector 新的向量。 |
無 |
菲涅耳 | 使用指定的曲面法線入計算菲涅耳降低值。 菲涅耳降低值表示目前像素的曲面法線與檢視向量有多一致。 當向量對齊時,函式的結果為 0; 結果會因為向量變得較不類似而增加,並在向量成直角時達到其最大值。 您可以根據目前像素方向與觀景窗之間的關聯性,使用這個對外表進行或多或少的效果。 輸入: Surface Normal : float3 目前像素的曲面法線,定義於目前像素的正切函數空間。 如同在法線對應中一樣,您可以用此來擾亂明顯的曲面法線。 輸出: Output : float 目前像素的反射率。 |
指數 用來計算菲涅耳降低值的指數。 |
If | 每個元件都有條件地選擇三個可能結果之一。 條件是由其他兩個指定輸入之間的關聯性來定義。 對於結果的每個元件,會根據前兩個輸入的對應元件之間的關聯性,選擇三個可能結果之一的對應元件。 輸入: X :float 、float2 、float3 或 float4 要比較的左邊值。 Y :和輸入 X 的類型相同要比較的右邊值。 X > Y :和輸入 X 的類型相同當 X 大於 Y 時要選擇的值。X = Y :和輸入 X 的類型相同當 X 等於 Y 時要選擇的值。X < Y :和輸入 X 的類型相同當 X 小於 Y 時要選擇的值。輸出: Output : float3 根據元件選擇的結果。 |
無 |
Lambert | 使用指定的曲面法線,根據 Lambert 光源模型計算目前像素的色彩。 色彩是直接光源之下,環境色彩和擴散光源比重的總和。 環境色彩接近間接光源的總計比重,但看起來單調又晦暗,而且沒有其他光源的協助。 擴散光源有助於將圖案和深度加入物件。 輸入: Surface Normal : float3 目前像素的曲面法線,定義於目前像素的正切函數空間。 如同在法線對應中一樣,您可以用此來擾亂明顯的曲面法線。 Diffuse Color : float3 目前像素的擴散色彩,通常是「點色彩」。 如果未提供任何輸入,則預設值是白色。 輸出: Output : float3 目前像素的擴散色彩。 |
無 |
遮罩向量 | 為指定向量的元件加上遮罩。 您可以使用這個從色彩值中移除特定的色彩頻道,或者使特定元件不在後續計算中發揮作用。 輸入: Vector : float4 要加上遮罩的向量。 輸出: Output : float4 遮罩的向量。 |
紅色 / X False 表示遮住紅色 (x) 元件,否則為 True。 綠色 / Y False 表示遮住綠色 (y) 元件,否則為 True。 藍色 / Z False 表示遮住藍色 (z) 元件,否則為 True。 Alpha / W False 表示遮住 Alpha (w) 元件,否則為 True。 |
反射向量 | 根據觀景窗位置計算正切空間中目前像素的反射向量。 您可以用這個來計算反射、立方體貼圖座標和反射光源比重 輸入: Tangent Space Surface Normal : float3 目前像素的曲面法線,定義於目前像素的正切函數空間。 如同在法線對應中一樣,您可以用此來擾亂明顯的曲面法線。 輸出: Output : float3 反射向量。 |
無 |
反射 | 使用指定的曲面法線,根據 Phong 光源模型計算反射光源比重。 反射光源可為水、塑膠或金屬等物件提供閃亮、反光的外觀。 輸入: Surface Normal : float3 目前像素的曲面法線,定義於目前像素的正切函數空間。 如同在法線對應中一樣,您可以用此來擾亂明顯的曲面法線。 輸出: Output : float3 反射亮部的色彩比重。 |
無 |
篩選節點
在著色器設計工具中,篩選節點會將色彩或材質範例等輸入轉換為象徵性的色彩值。 這些象徵性的色彩值通常會在進行非相片品質的轉譯時使用,或當成其他視覺效果中的元件使用。
篩選節點參考
節點 | 詳細資料 | 屬性 |
---|---|---|
模糊 | 使用高斯函數,使材質中的像素變得模糊。 您可以用此來減少材質中的色彩詳細資料或雜訊。 輸入: UV : float2 要測試的材質座標。 輸出: Output : float4 模糊效果的色彩值。 |
紋理 與模糊期間使用之取樣器產生關聯的材質暫存器。 |
反滲透 | 減少指定色彩中的色彩量。 當移除色彩時,色彩值會相當接近灰階。 輸入: RGB : float3 要去色的色彩。 Percent : float 若要移除的色彩百分比,以 [0, 1] 範圍內的標準化數值表示。 輸出: Output : float3 已去色的色彩。 |
明亮度 提供給紅色、綠色和藍色色彩元件的加權。 |
邊緣偵測 | 使用 Canny 邊緣偵測器偵測到材質中的邊緣。 邊緣像素會輸出為白色,而非邊緣像素會輸出為黑色。 您可以用這個來識別材質中的邊緣,以便使用其他效果來處理邊緣像素。 輸入: UV : float2 要測試的材質座標。 輸出: Output : float4 如果材質位在邊緣,為白色,否則為黑色。 |
紋理 與邊緣偵測期間所用之取樣器產生關聯的材質暫存器。 |
銳利化 | 將材質銳利化。 您可以用此來強調材質中的詳細資料。 輸入: UV : float2 要測試的材質座標。 輸出: Output : float4 模糊效果的色彩值。 |
紋理 與銳利化期間使用之取樣器產生關聯的材質暫存器。 |
下一步
若要深入了解,請參閱在 Visual Studio 中使用著色器設計工具建立著色器。