Unity Shader---數學公式總結





1、數學函數

dot(A,B)	//點積
//點積結果為標量,主要用於求向量的夾角或b向量在a向量上的投影。
cross(A,B)	//叉積
//叉積結果為向量,結果與這兩個向量組成的平面垂直。主要用於3D圖形學

mul(M, N)	//矩陣M和矩陣N的積
mul(M, v)	//矩陣M和列向量v的積
mul(v, M)	//行向量v和矩陣M的積

abs(x)	//返回絕對值
saturate(x)	//把x限制到[0,1]之間
clamp(x,a,b)	//把x限制到[a,b]之間

sqrt(x)	//求x的平方根,,x必須大於0
rsqrt(x)	//x的平方根的倒數,x必須大於0

all(x)	//如果輸入參數均不為0,則返回ture; 否則返回flase。&&運算
any(x)	//輸入參數只要有其中一個不為0,則返回true。||運算

lerp(a, b, f)	//計算(1-f)a + b*f 。即在下限a和上限b之間進行插值,f表示權值。注意,如果a和b是向量,則權值f必須是標量或者等長的向量。


ceil(x)   //對x向上取整。
floor(x)   //對x向下取整。
round(x)	//返回四舍五入值。

step(a, x)	//如果x< a,返回0;否則,返回1
sign(x)	//如果x大於0,返回1;如果小於0,返回-1;否則返回0;

exp(x)	//計算e^x,e=2.71828
exp2(x)	//計算2^x

fmod(x,y)	//返回x/y的余數。如果y為0,結果不可預料。
modf(x, out ip)	//把x分解成整數和分數兩部分,每部分都和x有着相同的符號,整數部分被保存在ip中,分數部分由函數返回

max(a, b)	//比較兩個標量或等長向量元素,返回最大值。
min(a,b)	//比較兩個標量或等長向量元素,返回最小值。

determinant(m)	//計算矩陣的行列式因子。
transpose(M)	//矩陣M的轉置矩陣

degrees(x)	//函數將弧度值轉換為角度值
radians(x)	//函數將角度值轉換為弧度值

log(x)	//計算ln(x)的值,x必須大於0
log2(x)	//計算log2^x的值,x必須大於0
log10(x)	//計算log10^x的值,x必須大於0



frac(x)	返回標量或矢量的小數
frexp(x, out i)	將浮點數x分解為尾數和指數,即, 返回m,並將指數存入i中;如果x為0,則尾數和指數都返回0
isfinite(x)	判斷標量或者向量中的每個數據是否是有限數,如果是返回true;否則返回false;
isinf(x)	判斷標量或者向量中的每個數據是否是無限,如果是返回true;否則返回false;
isnan(x)	判斷標量或者向量中的每個數據是否是非數據(not-a-number NaN),如果是返回true;否則返回false;
lit(NdotL, NdotH, m)	N表示法向量。L表示入射光向量。H表示半角向量。m表示高光向量。函數計算環境光,散射光,鏡面光的貢獻,返回四元向量: X表示環境光的貢獻,總是1;Y表示散射光的貢獻,如果N.L<0,則為0,否則為N.L; Z表示鏡面光的貢獻,如果N.L<0或者N.H<0,則為0;否則為(N.H)^m;W始終為1
noise(x)	根據它的參數類型,這個函數可以是一元、二元或三元噪音函數。返回的值在0和1之間,並且通常與給定的輸入值一樣	
ldexp(x, n)	計算x*(2^n)的值
smoothstep(min, max, x)	 x位於min和max之間,若x=min,返回0;若x=max,返回1;若x在兩者之間,按下列公式返回數據:-2*((x-min)/(max-min))^3+3*((x-min)/(max-min))^2


sin(x)	返回弧度x的正弦值,返回值范圍為[-1,1]
cos(x)	返回弧度x的余弦值。返回值范圍為[-1,1]
tan(x)	計算x正切值

asin(x)	反正弦函數,輸入參數取值區間為[-1,1],返回角度值范圍為[-π/2,π/2]
acos(x)	反余切函數,輸入參數范圍為[-1,1], 返回[0,π]區間的角度值
atan(x)	反正切函數

sinh(x)	計算x的雙曲正弦
cosh(x)	計算x的雙曲余弦值。
tanh(x)	計算x的雙曲線切線
sincos(float x, out s, out c)	同時計算x的sin值和cos值,其中s=sin(x),c=cos(x)。該函數比分別運算要快很多!

2、幾何函數

normalize(v)	//返回v向量的單位向量
reflect(I, N)	//根據入射光纖方向I和表面法向量N計算反射向量,僅對三元向量有效

length(v)	//返回v向量的模,即sqrt(dot(v,v))
distance(pt1, pt2)	//兩點之間的歐幾里德距離

faceforward(N,I,Ng)	//如果dot(I,Ng)<0,返回N;否則返回-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)	使用導數值查詢一維紋理, 並進行深度值比較
Tex1Dproj(sampler1D tex, float2 sq)	一維投影紋理查詢
Tex1Dproj(sampler1D tex, float3 szq)	一維投影紋理查詢,並比較深度值


Tex2D(sampler2D tex, float2 s)	二維紋理查詢
Tex2D(sampler2D tex, float2 s, float2 dsdx, float2 dsdy)	使用導數值查詢二維紋理
Tex2D(sampler2D tex, float3 sz)	二維紋理查詢,並進行深度值比較
Tex2D(sampler2D tex, float3 sz, float2 dsdx,float2 dsdy)	使用導數值查詢二維紋理,並進行深度值比較
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)	結合導數值查詢三維紋理
Tex3Dproj(sampler3D tex, float4 szq)	查詢三維投影紋理,並進行深度值比較
texCUBE(samplerCUBE tex, float3 s)	查詢立方體紋理
texCUBE (samplerCUBE tex, float3 s, float3 dsdx, float3 dsdy)	結合導數值查詢立方體紋理
texCUBEproj (samplerCUBE tex, float4 sq)	查詢投影立方體紋理



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM