(1)數學函數
函數 | 功能描述 |
---|---|
abs(x) | 返回輸入參數的絕對值 |
acos(x) | 反余切函數,輸入參數范圍為[-1,1], 返回[0,π]區間的角度值 |
all(x) | 如果輸入參數均不為0,則返回ture; 否則返回flase。&&運算 |
any(x) | 輸入參數只要有其中一個不為0,則返回true。 |
asin(x) | 反正弦函數,輸入參數取值區間為[−1,1],返回角度值范圍為, [−π2,π2] |
atan(x) | 反正切函數,返回角度值范圍為[−π2,π2] |
atan2(y,x) | 計算y/x的反正切值。實際上和atan(x)函數功能完全一樣,至少輸入參數不同。atan(x) = atan2(x, float(1))。 |
ceil(x) | 對輸入參數向上取整。例如: ceil(float(1.3)) ,其返回值為2.0 |
clamp(x,a,b) | 如果x值小於a,則返回a; 如果x值大於b,返回b; 否則,返回x。 |
cos(x) | 返回弧度x的余弦值。返回值范圍為[−1,1] |
cosh(x) | 雙曲余弦(hyperbolic cosine)函數,計算x的雙曲余弦值。 |
cross(A,B) | 返回兩個三元向量的叉積(cross product)。注意,輸入參數必須是三元向量! |
degrees(x) | 輸入參數為弧度值(radians),函數將其轉換為角度值(degrees) |
determinant(m) | 計算矩陣的行列式因子。 |
dot(A,B) | 返回A和B的點積(dot product)。參數A和B可以是標量,也可以是向量(輸入參數方面,點積和叉積函數有很大不同)。 |
exp(x) | 計算ex的值,e=2.71828182845904523536 |
exp2(x) | 計算2x的值 |
floor(x) | 對輸入參數向下取整。例如floor(float(1.3))返回的值為1.0;但是floor(float(-1.3))返回的值為-2.0。該函數與ceil(x)函數相對應。 |
fmod(x,y) | 返回x/y的余數。如果y為0,結果不可預料。 |
frac(x) | 返回標量或矢量的小數 |
frexp(x, out i) | 將浮點數x分解為尾數和指數,即x=m∗2i, 返回m,並將指數存入i中;如果x為0,則尾數和指數都返回0 |
isfinite(x) | 判斷標量或者向量中的每個數據是否是有限數,如果是返回true;否則返回false; |
isinf(x) | 判斷標量或者向量中的每個數據是否是無限,如果是返回true;否則返回false; |
isnan(x) | 判斷標量或者向量中的每個數據是否是非數據(not-a-number NaN),如果是返回true;否則返回false; |
ldexp(x, n) | 計算x∗2n的值 |
lerp(a, b, f) | 計算(1−f)∗a+b∗f或者a+f∗(b−a)的值。即在下限a和上限b之間進行插值,f表示權值。注意,如果a和b是向量,則權值f必須是標量或者等長的向量。 |
lit(NdotL, NdotH, m) | N表示法向量; L表示入射光向量; H表示半角向量; m表示高光系數。 函數計算環境光、散射光、鏡面光的貢獻,返回的4元向量。 X位表示環境光的貢獻,總是1.0; Y位代表散射光的貢獻,如果 N∙L<0,則為0;否則為N∙L Z位代表鏡面光的貢獻,如果N∙L<0 或者N∙H<0,則位0;否則為(N∙L)m; W位始終位1.0 |
log(x) | 計算ln(x)的值,x必須大於0 |
log2(x) | 計算log(x)2的值,x必須大於0 |
log10(x) | 計算log(x)10的值,x必須大於0 |
max(a, b) | 比較兩個標量或等長向量元素,返回最大值。 |
min(a,b) | 比較兩個標量或等長向量元素,返回最小值。 |
modf(x, out ip) | 把x分解成整數和分數兩部分,每部分都和x有着相同的符號,整數部分被保存在ip中,分數部分由函數返回 |
mul(M, N) | 矩陣M和矩陣N的積,計算方法如下
mul(M,N)=⎡⎣⎢⎢⎢M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢N11N12N12N13N21N22N23N24N31N32N33N34N41N42N43N44⎤⎦⎥⎥⎥
|
mul(M, v) | 矩陣M和列向量v的積,公式如下
mul(M,v)=⎡⎣⎢⎢⎢M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢v1v2v3v4⎤⎦⎥⎥⎥
|
mul(v, M) | 行向量v和矩陣M的積,公式如下
mul(v,M)=[v1v2v3v4]⎡⎣⎢⎢⎢M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44⎤⎦⎥⎥⎥
|
noise(x) | 根據它的參數類型,這個函數可以是一元、二元或三元噪音函數。返回的值在0和1之間,並且通常與給定的輸入值一樣 |
pow(x, y) | xy |
radians(x) | 函數將角度值轉換為弧度值 |
round(x) | 返回四舍五入值。 |
rsqrt(x) | x的平方根的倒數,x必須大於0 |
saturate(x) | 把x限制到[0,1]之間 |
sign(x) | 如果x>0則返回1;否則返回0 |
sin(x) | 輸入參數為弧度,計算正弦值,返回值范圍 為[-1,1] |
sincos(float x, out s, out c) | 該函數是同時計算x的sin值和cos值,其中s=sin(x),c=cos(x)。該函數用於“同時需要計算sin值和cos值的情況”,比分別運算要快很多! |
sinh(x) | 計算x的雙曲正弦 |
smoothstep(min, max, x) | 值x位於min、max區間中。如果x=min,返回0;如果x=max,返回1;如果x在兩者之間,按照下列公式返回數據: −2∗(x−minmax−min)3+3∗(x−minmax−min)2 |
step(a, x) | 如果x<a,返回0;否則,返回1 |
sqrt(x) | 求x的平方根,x√,x必須大於0 |
tan(x) | 計算x正切值 |
tanh(x) | 計算x的雙曲線切線 |
transpose(M) | 矩陣M的轉置矩陣 如果M是一個AxB矩陣,M的轉置是一個BxA矩陣,它的第一列是M的第一行,第二列是M的第二行,第三列是M的第三行,等等 |
(2)幾何函數
函數 | 功能描述 |
---|---|
distance(pt1, pt2) | 兩點之間的歐幾里德距離(Euclidean distance) |
faceforward(N,I,Ng) | 如果Ng∙I<0,返回N;否則返回-N。 |
length(v) | 返回一個向量的模,即sqrt(dot(v,v)) |
normalize(v) | 返回v向量的單位向量 |
reflect(I, N) | 根據入射光纖方向I和表面法向量N計算反射向量,僅對三元向量有效 |
refract(I,N,eta) | 根據入射光線方向I,表面法向量N和折射相對系數eta,計算折射向量。如果對給定的eta,I和N之間的角度太大,返回(0,0,0)。 只對三元向量有效 |
(3)紋理映射函數
函數 | 功能描述 |
---|---|
tex1D(sampler1D tex, float s) | 一維紋理查詢 |
tex1D(sampler1D tex, float s, float dsdx, float dsdy) | 使用導數值(derivatives)查詢一維紋理 |
Tex1D(sampler1D tex, float2 sz) | 一維紋理查詢,並進行深度值比較 |
Tex1D(sampler1D tex, float2 sz, float dsdx,float dsdy) | 使用導數值(derivatives)查詢一維紋理, 並進行深度值比較 |
Tex1Dproj(sampler1D tex, float2 sq) | 一維投影紋理查詢 |
Tex1Dproj(sampler1D tex, float3 szq) | 一維投影紋理查詢,並比較深度值 |
Tex2D(sampler2D tex, float2 s) | 二維紋理查詢 |
Tex2D(sampler2D tex, float2 s, float2 dsdx, float2 dsdy) | 使用導數值(derivatives)查詢二維紋理 |
Tex2D(sampler2D tex, float3 sz) | 二維紋理查詢,並進行深度值比較 |
Tex2D(sampler2D tex, float3 sz, float2 dsdx,float2 dsdy) | 使用導數值(derivatives)查詢二維紋理,並進行深度值比較 |
Tex2Dproj(sampler2D tex, float3 sq) | 二維投影紋理查詢 |
Tex2Dproj(sampler2D tex, float4 szq) | 二維投影紋理查詢,並進行深度值比較 |
texRECT(samplerRECT tex, float2 s) | 二維非投影矩形紋理查詢(OpenGL獨有) |
texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy) | 二維非投影使用導數的矩形紋理查詢(OpenGL獨有) |
texRECT (samplerRECT tex, float3 sz) | 二維非投影深度比較矩形紋理查詢(OpenGL獨有) |
texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy) | 二維非投影深度比較並使用導數的矩形紋理查詢(OpenGL獨有) |
texRECT proj(samplerRECT tex, float3 sq) | 二維投影矩形紋理查詢(OpenGL獨有) |
texRECT proj(samplerRECT tex, float3 szq) | 二維投影矩形紋理深度比較查詢(OpenGL獨有) |
Tex3D(sampler3D tex, float s) | 三維紋理查詢 |
Tex3D(sampler3D tex, float3 s, float3 dsdx, float3 dsdy) | 結合導數值(derivatives)查詢三維紋理 |
Tex3Dproj(sampler3D tex, float4 szq) | 查詢三維投影紋理,並進行深度值比較 |
texCUBE(samplerCUBE tex, float3 s) | 查詢立方體紋理 |
texCUBE (samplerCUBE tex, float3 s, float3 dsdx, float3 dsdy) | 結合導數值(derivatives)查詢立方體紋理 |
texCUBEproj (samplerCUBE tex, float4 sq) | 查詢投影立方體紋理 |
在這個表中,每個函數第二個參數的名字指明了在執行紋理查詢的時候,它的值是如果被使用的:
- s表示這是一個一元、二元或三元紋理坐標。
- z表示這是一個用來進行陰影貼圖查找的深度比較值。
- q表示這是一個透視值,在進行紋理查找之前,它被用來除以紋理坐標(s)。
當你使用的紋理函數允許你指定一個深度比較值的時候,與之相關聯的紋理單元必須被設置成深度比較紋理。否則,深度比較實際上不會被執行。
(4)偏導函數
函數 | 功能描述 |
---|---|
ddx(a) | 近似a關於屏幕空間x軸的偏導數 |
ddy(a) | 近似a關於屏幕空間y軸的偏導數 |
(5)調試函數
函數 | 功能描述 |
---|---|
void debug(float4 x) | 如果在編譯時設置了DEBUG,片段着 色程序中調用該函數可以將值x作為COLOR語義的最終輸出;否則該函數什么也不做。 |