Unity Shader - 函数整理

  • ​​​​​CG 标准函数

基本函数 功能描述
abs(x) 返回 x 绝对值
max(a, b) 返回 ab 的较大值。
min(a,b) 返回 ab 的较小值。
round(x) 返回 x 的四舍五入值。
ceil(x) 向上取整。例如:ceil(float(1.3)) = 2.0;
floor(x) 向下取整。例如:floor(float(1.3)) = 1.0;
clamp(x,min,max) 返回 x 限制在 [min, max] 范围内的值。
lerp(a, b, f) 返回在 [a, b] 范围内权值为 f 的插值。(权值为 0 - 1)
smoothstep(a, b, x) 返回在 [a, b] 范围内插值为 x 的权值。(权值为 0 - 1)
saturate(x) 返回x 限制在 [0, 1] 范围内的值。
sign(x) 返回输入值的正负。正值返回 1 ;负值返回 0
step(a, x) 如果 x < a ,返回 ,否则,返回 1 。
fmod(x, y) 返回 x / y 的浮点余数。(y != 0
frac(x) 返回 x 的浮点部分;
isfinite(x) 判断 x 是否为有限值。是则返回 true;否则返回 false;
isinf(x) 判断 x 是否为无限值。是则返回 true;否则返回 false;
isnan(x) 判断 x 是否为非数据。是则返回 true;否则 返回false;(非数据:not-a-number NaN)
modf(x, out ip) 把输入值分解为整数和小数部分。整数部分 ip;小数部分 返回
clip(x) 解释:如果x<0,则剔除掉这个像素颜色,等于 if(x
   
幂指函数 功能描述
sqrt(x) 返回 \small \sqrt{x} 的值,(x >= 0
rsqrt(x) 返回 \small \sqrt{x} 的倒数值,(x >= 0
pow(x, y) 返回 \small x^{y} 的值。
exp(x) 返回 \small e^{x} 的倒数值,e=2.71828182845904523536
exp2(x) 返回 \small 2^{x} 的倒数值
log(x) 返回 \small ln(x) 的值。(x > 0)
log2(x) 返回 \small log_{2}(x) 的值。(x > 0)
log10(x) 返回 \small log_{10}(x) 的值。(x > 0)
   
三角函数 功能描述
radians(x) 参数为角度,返回弧度
degrees(x) 参数为弧度,返回角度
sincos(x, out s, out c) 参数为弧度,返回 x 的正弦值、余弦值。
sin(x) 参数为弧度,返回 x 的正弦值。
cos(x) 参数为弧度,返回 x 的余弦值。
tan(x) 参数为弧度,返回x 的正切值。
asin(x) 参数为弧度,返回 x 的反正弦值。
acos(x) 参数为弧度,返回x 的反余弦值。
atan(x) 参数为弧度,返回 x 的反正切值。
atan2(y,x) 参数为弧度,返回 y / x 的反正切值。
sinh(x) 参数为弧度,返回 x 的双曲正弦值。
cosh(x) 参数为弧度,返回 x 的双曲余弦值。
tanh(x) 参数为弧度,返回 x 的双曲切线值。
   
矩阵函数 功能描述
determinant(M) 返回 矩阵M 的行列式。
mul(M, N) 返回 矩阵和 矩阵的积。
mul(M, v) 返回 矩阵和 列向量的积。
mul(v, M) 返回 行向量和 矩阵的积。
transpose(M) 返回 矩阵的转置矩阵。
cross(A,B) 返回 三维向量 AB 的叉积。
dot(A,B) 返回 三维向量 AB 的点积。
   
光照函数 功能描述

lit(n • l, n • h, m)

返回光照向量(环境光,漫反射光,镜面高光,1)。法向量 N;入射光向量 I;半角向量 H;高光系数 M。 

   
几何函数 功能描述
distance(x, y) 返回距离。x 点;y 点;
length(v) 返回模长。v 向量;
normalize(v) 返回单位向量。v 向量;
reflect(i, n) 返回反射向量。I 入射光向量;N 表面法向量;(仅对三元向量有效)
refract(i, n, eta) 返回折射向量。I 入射光向量;N 表面法向量;eta 折射相对系数;(只对三元向量有效)
   
纹理映射函数 功能描述

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) 二维投影纹理查询,并进行深度值比较。
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) 查询投影立方体纹理。
   
偏导函数 功能描述
ddx(x) 返回 x 关于屏幕坐标x轴的偏导数。
ddy(x) 返回 x 关于屏幕坐标y轴的偏导数。
   
调试函数 功能描述
void debug(float4 x) 如果在编译时设置了DEBUG,片段着色程序中调用该函数可以将值 x 作为COLOR语义的最终输出;

 

 

  • UnityCG.cginc

变换矩阵(旧) 变换矩阵(新) 功能描述
UNITY_MATRIX_M unity_ObjectToWorld 模型空间 转 世界空间 矩阵
UNITY_MATRIX_I_M unity_WorldToObject 世界空间 转 模型空间 矩阵

UNITY_MATRIX_MV

unity_MatrixMV 模型空间 转 观察空间 矩阵

UNITY_MATRIX_MVP

unity_MatrixMVP

模型空间 转 裁剪空间 矩阵

UNITY_MATRIX_V

unity_MatrixV

世界空间 转 观察空间 矩阵

UNITY_MATRIX_VP

unity_MatrixVP

世界空间 转 裁剪空间 矩阵

UNITY_MATRIX_P

glstate_matrix_projection

观察空间 转 裁剪空间 矩阵

UNITY_MATRIX_T_MV

unity_MatrixTMV

模型空间 转 观察空间 转置矩阵(暂时定义)

UNITY_MATRIX_IT_MV

unity_MatrixITMV

模型空间 转 观察空间 逆转置矩阵(暂时定义)

UNITY_MATRIX_I_V

unity_MatrixInvV

世界空间 转 观察空间 逆矩阵(暂时定义)
   
切线空间转换函数 功能描述

TANGENT_SPACE_ROTATION

切线空间转换函数。使用后可用rotation矩阵。需要声明v.normal和v.tangent;
   
模型空间转换函数 功能描述
UnityObjectToWorldPos(pos) 返回 把 顶点坐标 从 模型空间 转换到 世界空间。(你以为存在?反正我没找到,用矩阵吧)
UnityObjectToViewPos(pos) 返回 把 顶点坐标 从 模型空间 转换到 观察空间。输入pos:三元坐标;
UnityObjectToClipPos(pos) 返回 把 顶点坐标 从 模型空间 转换到 裁剪空间。输入pos:三元坐标;
UnityObjectToWorldDir(dir) 返回 把 方向矢量 从 模型空间 转换到 世界空间。输入pos:三元向量;
UnityObjectToWorldNormal(nor) 返回 把 法线矢量 从 模型空间 转换到 世界空间。输入pos:三元向量;
   
世界空间转换函数 功能描述
UnityWorldToViewPos(pos) 返回 把 顶点坐标 从 世界空间 转换到 观察空间。输入pos:三元坐标;
UnityWorldToClipPos(pos) 返回 把 顶点坐标 从 世界空间 转换到 裁剪空间。输入pos:三元坐标;
UnityWorldToObjectDir(dir) 返回 把 方向矢量 从 世界空间 转换到 模型空间。输入pos:三元向量;
   
观察空间转换函数 功能描述
UnityViewToClipPos(pos) 返回 把 顶点坐标 从 观察空间 转换到 裁剪空间。输入pos:三元向量;
   
光照函数 功能描述
ObjSpaceLightDir(v) 返回 模型空间 中从 该点 到 光源 的光照方向。输入v:模型空间中的点;没有归一化。
WorldSpaceLightDir(localPos) 返回 世界空间 中从 该点 到 光源 的光照方向。输入localPos:模型空间中的点;没有归一化。
UnityWorldSpaceLightDir(worldPos) 返回 世界空间 中从 该点 到 光源 的光照方向。输入worldPos:世界空间中的点;没有归一化。
   
观察函数 功能描述
ObjSpaceViewDir(v) 返回 模型空间 中从 该点 到 摄像机 的观察方向。输入v:模型空间中的点;没有归一化。
WorldSpaceViewDir(localPos) 返回 世界空间 中从 该点 到 摄像机的观察方向。输入localPos:模型空间中的点;没有归一化。
UnityWorldSpaceViewDir(worldPos) 返回 世界空间 中从 该点 到 摄像机的观察方向。输入worldPos:世界空间中的点;没有归一化。
   
贴图函数 功能描述

TRANSFORM_TEX(tex,name)

返回 模型顶点的uv和Tiling、Offset两个变量进行运算后值。tex:采样纹理;name:外置贴图;

 

 
贴图函数 功能描述

UnpackNormal(packednormal)

返回 法线 纹理查询。

 

你可能感兴趣的:(Unity,Shader,Shader)