Unity中的CG函数总结
更新日期:
编写shader所用到的所有CG函数的汇总
数学函数
abs(x) x绝对值.
acos(x) 反余弦 x在[-1,1] 返回值在[0,PI].
all(x) x的所有成员都不等于0,返回true。反之false。
any(x) x的成员有不等于0的,返回true。反之false。
asin(x) 反正弦 x在[-1,1] 返回值在[-PI/2,PI/2]。
atan(x) 反正切 返回值[-PI/2,PI/2],一般用于处理圆形化。
atan2(x,y) x/y的反正切 返回值[-PI,PI]
cell(x) 不小于x的最小整数
clamp(x,a,b) x小于a,返回a;x大于b,返回b;否则返回x。
cos(x) 余弦 返回值[-1,1]
cosh(x) 双曲余弦
cross(A,B) 两个3元向量的外积。
degrees(x) 弧度转化成角度
determinant(M) 矩阵M的行列式的值
dot(A,B) 两个向量的点积。
exp(x) e的x次方。
exp2(x) 2的x次方。
floor(x) 不大于x的最大整数
fmod(x,y) x/y的余数。
frac(x) x的小数部分。
frexp(x,out,exp) 2的次幂保存在exp中。x等于0,则全是0.
isfinite(x) x是有限的返回true
isinf(x) x是无限的返回true
isnan(x) x不是数字返回true
ldexp(x,n) 2的n次方乘以x
lerp(a,b,f) (1-f)*a+b*f。ab类型一样。
lit(NdotL, NdotH, m) 为环境光,镜面反射,漫反射计算光照系数NdotL为N L,NdotH为N H,返回xyzw
log(x) 返回ln(x),x > 0
log2(x) 返回以2为底x的对数。x > 0
log10(x) 返回以10为底x的对数。x > 0
max(a,b) 返回ab中大的
min(a,b) 返回ab中小的
modf(x,out ip) x分成整数和分数两部分,符号相同,返回分数,ip整数
mul(N,M) 矩阵的乘积
mul(M,v) 矩阵与向量的乘积
mul(v,M) 向量雨矩阵的乘积
noise(x) 噪声函数,返回(0,1)
pow(x,y) x的y次方
radians(x) 角度转弧度
round(x) 距离x最近的整数
rsqrt(x) x平方根的倒数
saturate(x) 把x限制在[0,1]内
sign(x) x>0,返回1,否则返回0
sin(x) x的正弦
sincos(float x, out s, out c) s正弦,c余弦
sinh(x) x的双曲正弦
smoothstep(min,max,x) x
step(a,x) x=a,1
sqrt(x) x的平方根,x>0
tan(x) x的正切
tanh(x) x的双曲正切
transpose(M) 矩阵M的转置矩阵
几何函数
distance(pt1,pt2) 两点之间的距离
faceforward(N,I,Ng) 如果dot(Ng,I)小于0为N,否则为-N
length(v) 一个向量的长度
normalize(v) 返回一个长度为1,方向和v相同的向量
reflect(I,N) 根据入射光线方向I和表面法向量N计算反射向量,三元向量有效
reflect(I,N,eta) 同上,引入了折射向量系数eta
纹理贴图函数
tex1D(sampler1D tex,float a) 1D非投影纹理查询
tex1D(sampler1D tex,float a,float dsdx,float dady) 1D非投影使用导数的纹理查询
tex1D(sampler1D tex,float2 sz) 1D非投影深度比较纹理查询
tex1D(sampler1D tex,float2 sz,float dsdx,float dasy) 1D非投影深度比较并使用导数的纹理查询
tex1Dproj(sampler1D tex,float2 sq) 1D投影纹理查询
tex1Dproj(sampler1D tex,float3 sq) 1D投影深度比较纹理查询
tex2D(sampler2D tex,float s) 2D非投影纹理查询
tex2D(sampler2D tex,float s,float2 dsdx,float2 dsdy) 2D非投影使用导数的纹理查询
tex2D(sampler2D tex,float3 sz) 2D非投影深度比较纹理查询
tex2D(sampler2D tex,float3 sz,float2 dsdx,float2 dsdy) 2D非投影深度比较并使用导数的纹理查询
text2Dproj(sampler2D tex,float3 sq) 2D投影纹理查询
text2Dproj(sampler2D tex,float4 sq) 2D投影深度比较纹理查询
texRECT(samplerRECT tex,float2 s) 2D非投影矩形纹理查询(opengl)
texRECT(samplerRECT tex,float2 s,float2 dsdx,float2 dsdy) 2D非投影使用导数矩形纹理查询(opengl)
texRECT(samplerRECT tex,float3 sz) 2D非投影深度比较矩形纹理查询(opengl)
texRECT(samplerRECT tex,float3 sz,float2 dsdx,float2 dsdy) 2D非投影深度比较使用导数矩形纹理查询(opengl)
texRECTproj(samplerRECT tex,float3 sq) 2D投影矩形纹理查询(opengl)
texRECTproj(samplerRECT tex,float3 szq) 2D投影矩形纹理深度比较查询(opengl)
tex3D(sampler3D tex,float3 s) 3D非投影纹理查询
tex3D(sampler3D tex,float3 s,float3 dsdx,float3 dsdy) 3D非投影使用导数的纹理查询
tex3Dproj(sampler3D tex,float4 sq) 3D投影纹理查询
texCUBE(samplerCUBE tex,float3 s) 立方贴图非投影纹理查询
texCUBE(samplerCUBE tex,float3 s,float 3 dsdx,float3 dsdy) 立方贴图非投影使用的导数的纹理查询
texCUBEproj(samplerCUBE tex,float4 sq) 立方贴图投影纹理查询
导数函数
ddx(a) 近似a关于屏幕空间x轴的偏导数
ddy(a) 近似a关于屏幕空间y轴的偏导数
调试函数
void debug(float4 x) 如果编译器开启了DEBUG,COLOR会输出x值,程序也会终止。如果没开启DEBUG,函数无效。