一般預設都用弧度;
radians(degree) : 角度變弧度;
degrees(radian) : 弧度變角度;
sin(angle), cos(angle), tan(angle)
asin(x): arc sine, 返回弧度 [-pi/2, pi/2];
acos(x): arc cosine,返回弧度 [0, pi];
atan(y, x): arc tangent, 返回弧度 [-pi, pi];
atan(y/x): arc tangent, 返回弧度 [-pi/2, pi/2];
pow(x, y): x的y次方;
exp(x): 指數, log(x):
exp2(x): 2的x次方, log2(x):
sqrt(x): x的根號; inversesqrt(x): x根號的倒數
abs(x): 絕對值
sign(x): 符號, 1, 0 或 -1
floor(x): 底部取整
ceil(x): 頂部取整
fract(x): 取小數部分
mod(x, y): 取模, x - y*floor(x/y)
min(x, y): 取最小值
max(x, y): 取最大值
clamp(x, min, max): min(max(x, min), max);
mix(x, y, a): x, y的線性混疊, x(1-a) + y*a;
step(edge, x): 如 x
smoothstep(edge0, edge1, x): threshod smooth transition時使用。 edge0<=edge0時為0.0, x>=edge1時為1.0
length(x): 向量長度
distance(p0, p1): 兩點距離, length(p0-p1);
dot(x, y): 點積,各分量分別相乘 後 相加
cross(x, y): 差積,x[1]*y[2]-y[1]*x[2], x[2]*y[0] - y[2]*x[0], x[0]*y[1] - y[0]*x[1]
normalize(x): 歸一化, length(x)=1;
faceforward(n, i, nref): 如 dot(nref, i)< 0則n, 否則 -n
reflect(i, n): i的反射方向, i -2*dot(n, i)*n, n必須先歸一化
refract(i, n, eta): 折射,k=1.0-eta*eta*(1.0 - dot(n, i) * dot(n, i)); 如k<0.0 則0.0,否則 eta*i - (eta*dot(n, i)+sqrt(k))*n
matrixcompmult(matx, maty): 矩陣相乘, 每個分量 自行相乘, 即 r[i][j] = x[i][j]*y[i][j];
矩陣線性相乘,直接用 *
lessthan(vecx, vecy): 向量 每個分量比較 x < y
lessthanequal(vecx, vecy): 向量 每個分量比較 x<=y
greaterthan(vecx, vecy): 向量 每個分量比較 x>y
greaterthanequal(vecx, vecy): 向量 每個分量比較 x>=y
equal(vecx, vecy): 向量 每個分量比較 x==y
notequal(vecx, vexy): 向量 每個分量比較 x!=y
any(bvecx): 只要有乙個分量是true, 則true
all(bvecx): 所有分量是true, 則true
not(bvecx): 所有分量取反
參考:
Shader內建函式和變數
radians degree 角度變弧度 degrees radian 弧度變角度 sin angle cos angle tan angle asin x arc sine,返回弧度 pi 2,pi 2 acos x arc cosine,返回弧度 0,pi atan y,x arc tangen...
基礎shader函式
得到這個值的小數部分 float fract float x vec2 fract vec2 x vec3 fract vec3 x vec4 fract vec4 x fract x png 1 y fract x 得到兩個值的模,其實就是餘數 y mod x,1.5 下取整 y floor x ...
Unity3D內建Shader翻譯一
unity3d內建了很多shader,文件很詳細,自己翻一下.便於加深印象.首先先解釋下unity3d的shader.unity裡面的shaders是使用一種叫shaderlab的語言編寫的,它同微軟 的.fx檔案或者nvidia的cgfx有些類似。傳統意義上的vertex shader和pixel...