ShaderGraph節點——Math

Math Nodes:數學節點

1 高級

Absolute——絕對值:返回輸入的絕對值。輸入動態矢量的正分量將保持爲正,負分量將反向變爲正。

void Unity_Absolute_float4(float4 In, out float4 Out)
{
    Out = abs(In);
}

Exponential——指數:返回輸入的指數值。指數基可以從節點上的基下拉菜單在e基和2基之間進行切換。

Base E:返回E的輸入冪

Base 2:返回2的輸入冪

 

Length——長度:返回輸入的長度。這也被稱爲幅度。矢量的長度是由畢達哥拉斯定理計算出來的。

向量2的長度可以計算爲:\sqrt{x^{2} + y^{2}}。其中x和y是輸入向量的分量。長度可以通過添加或刪除組件來計算其他維向量。

\sqrt{x^{2} + y^{2} + z^{2}}等等。

Log——對數:返回輸入的對數。對數是指數節點的逆運算。

例如,使用輸入值3的基數2指數的結果是8。2^{3} = 2\times 2\times 2 = 8

因此,使用輸入值8的base-2對數的結果是3。

對數基可以從節點上的基下拉菜單中在base-e、base-2和base-10之間進行切換。

Modulo——取模:返回輸入A除以輸入B的餘數。

void Unity_Modulo_float4(float4 A, float4 B, out float4 Out)
{
    Out = fmod(A, B);
}

Negate——取反:返回輸入的翻轉符號值。正的值變成負的,負的值變成正的。

Normalize——標準化:返回輸入的規範化值。輸出向量與輸入方向相同,但長度爲1。

Posterize——色調分離:此節點將輸入的色調分離(也稱爲量化)值返回到輸入步驟指定的值的數量中。

void Unity_Posterize_float4(float4 In, float4 Steps, out float4 Out)
{
    Out = floor(In / (1 / Steps)) * (1 / Steps);
}

Reciprocal——倒數:返回1除以輸入In的結果。這可以通過快速逼近着色器模型5來計算,通過設置Method 爲fast。

Default

void Unity_Reciprocal_float4(float4 In, out float4 Out)
{
    Out = 1.0/In;
}

Fast (Requires Shader Model 5)

void Unity_Reciprocal_Fast_float4(float4 In, out float4 Out)
{
    Out = rcp(In);
}

Reciprocal Square Root——倒數平方:返回1除以輸入In的平方根的結果。

2 Basic:基礎

Add——加:返回兩個輸入值A和B的和。

Divide——除:返回輸入A(被除數)除以輸入B(除數)的結果。

Multiply——乘:返回輸入A乘以輸入b的結果。如果兩個輸入都是向量類型,則輸出類型將是與這些輸入的計算類型具有相同維數的向量類型。如果兩個輸入都是矩陣類型,則輸出類型將是與這些輸入的計算類型具有相同維數的矩陣類型。如果一個輸入是向量類型,另一個是矩陣類型,那麼輸出類型將是與向量類型輸入具有相同維數的向量。

Power——冪:返回輸入A的結果到輸入B的冪次。

Square Root——平方根:返回輸入的平方根。

Subtract——減:返回輸入A減去輸入B的結果。

3 Derivative:導數

DDX:返回輸入對屏幕空間x座標的偏導數。此節點只能在像素着色階段使用。

DDXY:返回輸入對屏幕空間x座標和屏幕空間y座標的偏導數的和。此節點只能在像素着色階段使用。

DDY:返回輸入對屏幕空間y座標的偏導數。此節點只能在像素着色階段使用。

4 Interpolation:插值

Inverse Lerp:返回線性參數,該參數在輸入A到輸入B的範圍內產生由輸入T指定的內插。

逆Lerp是Lerp節點的逆操作。它可以用來根據一個Lerp的輸出來確定它的輸入是什麼。

例如,Lerp的值在0和2之間,T值爲1,等於0.5。因此,在0和2之間,T值爲0.5的逆Lerp的值是1。

void Unity_InverseLerp_float4(float4 A, float4 B, float4 T, out float4 Out)
{
    Out = (T - A)/(B - A);
}

 

Lerp:返回輸入T對輸入A和輸入B進行線性插值的結果。輸入T的值被夾在0到1的範圍內。

例如,當輸入的值T = 0時返回值等於輸入的A值,當T=1返回值等於輸入的B值,當T=0.5時返回值是A和B兩個輸入值的中點值。

Smoothstep:如果輸入In的值分別位於輸入Edge1和Edge2的值之間,則返回在0和1之間的平滑Hermite插值的結果。如果輸入In的值小於輸入Step1的值,則返回0;如果大於輸入Step2的值,則返回1。

這個節點與Lerp節點相似,但是有兩個顯著的區別。首先,使用這個節點,用戶指定範圍,返回值在0到1之間。這可以看作是Lerp節點的反面。其次,該節點使用平滑Hermite插值代替線性插值。這意味着插值將逐漸加快,從開始和放慢到結束。這對於創建看起來自然的動畫、淡入淡出和其他過渡非常有用。

5 Matrix:矩陣

Matrix Construction——構造矩陣:從四個輸入向量M0、M1、M2和M3構造方陣。該節點可生成矩陣2x2、矩陣3x3、矩陣4x4等類型的矩陣。

可以使用節點上的下拉菜單選擇輸入值是指定矩陣行還是列。

  • 行:輸入向量指定從上到下的矩陣行。
  • 列:輸入向量指定從左到右的矩陣列。

矩陣輸出是從左上角的建設的投入。這可以用來從不同的維向量生成不同維的矩陣。

例如,將向量2的類型值連接到輸入M0和M1將從輸出2x2生成所需的矩陣。

 

Matrix Determinant——矩陣行列式:返回由輸入定義的矩陣的行列式。它可以看作是矩陣所描述的變換的比例因子。

Matrix Split——矩陣分裂:將一個由輸入定義的矩陣分割成向量。輸出向量維由輸入矩陣的維數定義。

節點上的下拉菜單可用於選擇輸出值是取自輸入矩陣的行還是列。

  • 行:輸出向量由從上到下的矩陣行組成。
  • 列:輸出向量由從左到右的矩陣列組成。

類型爲matrix 2x2或matrix 3x3的輸入矩陣將在超出其維數的行(或列,取決於下拉選擇)中返回0值。

例如,將矩陣2x2類型連接到輸入將返回正確的向量2類型輸出到輸出槽M0和M1,而輸出的M2和M3將返回0值。

Matrix Transpose——轉置矩陣:返回由輸入In定義的矩陣的轉置值。這可以看作是將矩陣翻轉到其對角線上的操作。結果是它改變了矩陣的行和列的指標。

6 Range:範圍

Clamp——固定:返回固定在由輸入Min和Max分別定義的最小值和最大值之間的輸入。

Fraction——小數:返回輸入的小數部分(或小數部分);大於等於0,小於1。

Maximum——最大值:返回兩個輸入值A和B中最大的一個。

Minimum——最小值:返回兩個輸入值A和B中最小的一個。

One Minus——一減:返回從1中減去的輸入值的結果。

Random Range——隨機值:返回一個基於輸入種子的僞隨機數值,該值位於分別由輸入Min和Max定義的最小值和最大值之間。

雖然相同的輸入種子的值總是會導致相同的輸出值,但輸出值本身將出現隨機。輸入種子是一個向量2值,方便根據UV輸入生成隨機數,但是在大多數情況下,一個向量1輸入就足夠了。

Remap——重映射:根據輸入的值的在In Min Max輸入值的x和y分量之間的進行線性插值,返回 Out Min Max輸入的值的x和y分量之間的值。

void Unity_Remap_float4(float4 In, float2 InMinMax, float2 OutMinMax, out float4 Out)
{
    Out = OutMinMax.x + (In - InMinMax.x) * (OutMinMax.y - OutMinMax.x) / (InMinMax.y - InMinMax.x);
}

Saturate:返回固定在0和1之間的輸入值。

7 Round:四捨五入

Ceiling:返回大於或等於輸入In的值的最小整數值或整數。

Floor:返回小於或等於輸入In的值的最大整數值或整數。

Round:將輸入的值四捨五入爲最接近的整數或整數。

Sign:對於每個組件,如果輸入的值小於0,則返回-1;如果等於0,則返回0;如果大於0,則返回1。

Step:對於每個組件,如果input In的值大於或等於input Edge的值,則返回1,否則返回0。

Truncate:返回輸入值的整數或整數組件。例如,給定輸入值1.7,此節點將返回值1.0。

8 Trigonometry:三角

Arccosine——反餘弦:將輸入的每個分量的反餘弦作爲相同維數和相同長度的向量返回。每個分量都應該在-1到1的範圍內。

Arcsine——反正弦值:返回輸入的每個分量的反正弦值,作爲相同維數和相同長度的向量。每個分量應該在- π/2到π/2的範圍內。

Arctangent:返回輸入值的反正切值。每個分量應該在- π/2到π/2的範圍內。

Arctangent2:返回輸入A和輸入b的值的反正切值。輸入值的符號(無論它們是正的還是負的值)用於確定輸出組件或通道在-Pi到Pi的範圍內是正的還是負的。

Cosine:返回輸入值的餘弦值。

Degrees to Radians:返回輸入值,該值由度轉換爲弧度。1度大約等於0。0174533弧度360度的完整旋轉等於2π弧度。

Hyperbolic Cosine:返回輸入的雙曲餘弦值。

Hyperbolic Sine:返回輸入的雙曲正弦值。

Hyperbolic Tangent:返回輸入的雙曲正切。

Radians to Degrees:返回從弧度轉換爲角度的輸入值。一個弧度大約等於57。2958度一個完整的旋轉2弧度等於360度。

Sine:返回輸入值In的正弦值。

Tangent:返回輸入值的正切值。

9 Vector:向量

Cross Product:返回輸入A和b的值的叉乘。兩個向量的叉乘得到第三個向量,它垂直於兩個輸入向量。結果的大小等於兩個輸入的大小相乘,然後乘以輸入之間夾角的正弦值。您可以使用“左手規則”來確定結果向量的方向。

Distance:返回輸入A和b之間的歐氏距離。這對於計算空間中兩點之間的距離很有用,通常用於計算有符號距離函數 (Signed Distance Function)。

Dot Product:返回兩個輸入向量A和B的點積,或標量積。

點積是一個等於兩個向量相乘的模的值然後乘以它們夾角的餘弦值。

對於歸一化的輸入向量,如果它們指向完全相同的方向,則點積節點返回1;如果它們指向完全相反的方向,則返回-1;如果向量垂直,則返回0。

Fresnel Effect:菲涅耳效應是在一個表面上的不同反射率的影響,取決於觀察角度,當你接近掠射角更多的光被反射。菲涅耳效應節點通過計算表面法線和視圖方向之間的角度來近似地實現這一點。這個角度越大,返回值越大。這種效果經常用於實現邊緣照明,在許多藝術風格中很常見。

Projection:返回將輸入A的值投影到與輸入B的值平行的直線上的結果。

Reflection:使用輸入和表面法線返回一個反射向量。

Rejection:返回結果的輸入的值的投影到輸入值A的正交平面,或輸入B值的垂直平面。拒絕向量的值等於原來的A輸入的值的向量,減去相同的投影輸入的值。

void Unity_Rejection_float4(float4 A, float4 B, out float4 Out)
{
    Out = A - (B * dot(A, B) / dot(B, B))
}

 

Rotate About Axis:通過旋轉的值使輸入向量繞軸旋轉。旋轉角度的單位可以由參數單位來選擇。

Sphere Mask:創建一個來自輸入中心的球體掩碼。球是計算距離和修改使用半徑和硬度輸入。球面遮罩功能可以在二維和三維空間中工作,它基於座標輸入中的矢量座標。

Transform:返回將輸入值(In)從一個座標空間轉換爲另一個座標空間的結果。選擇節點上的下拉選項,以定義要從哪些空間轉換到哪些空間。

10 Wave:波

Noise Sine Wave:返回輸入值In的正弦值。對於方差,psuedo-random噪聲被添加到正弦波的振幅,在輸入的最小到最大值範圍內。

void Unity_NoiseSineWave_float4(float4 In, float2 MinMax, out float4 Out)
{
    float sinIn = sin(In);
    float sinInOffset = sin(In + 1.0);
    float randomno =  frac(sin((sinIn - sinInOffset) * (12.9898 + 78.233))*43758.5453);
    float noise = lerp(MinMax.x, MinMax.y, randomno);
    Out = sinIn + noise;
}

Sawtooth Wave:從輸入的值中返回一個鋸齒波。

void Unity_SawtoothWave_float4(float4 In, out float4 Out)
{
    Out = 2 * (In - floor(0.5 + In));
}

Square Wave:從輸入的值中返回一個方波。

void Unity_SquareWave_float4(float4 In, out float4 Out)
{
    Out = 1.0 - 2.0 * round(frac(In));
}

 

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