shader常用函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shader常用函数相关的知识,希望对你有一定的参考价值。

参考技术A 顶点着色器:

// 将坐标转换到裁剪空间
o.pos = UnityObjectToClipPos(vertex);

// 计算顶点的世界坐标
float3 worldPos = mul(_Object2World, vertex).xyz;

// 计算世界空间下的视角方向
float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));

// 世界空间下的法线
float3 worldNormal = UnityObjectToWorldNormal(normal);

// 世界空间下的反射向量
o.worldRefl = reflect(-worldViewDir, worldNormal);

片段着色器

// 采样纹理并返回数据
fixed4 col = tex2D(_MainTex, i.uv);

// 使用反射向量采样默认的反射立体纹理(unity_SpecCube0)
half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.worldRefl);
// 解码cubemap的数据到具体显示的颜色
half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR);

Unity学习Shader中常用的函数方法

今天给大家列出来shader中常用的一些函数,函数后面有释义,大家可以打印出来,或者在写shader的时候来这篇文章查阅,看看你需要用到哪些。

Cg提供了一系列内建的标准函数。这些函数用于执行数学上的通用计算或通用算法(纹理映射等), 有些函数直接和 GPU 指令相对应,所以执行效率非常高。

这些函数来源于文档,我为大家筛选出了常用的,去掉了基本用不到的函数。


数学函数:


  • 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]


  • 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。

  • fmod(x,y)                                                  

返回x/y 的余数。如果 y 为 0,结果不可预料

  • frexp(x, out exp)              

将浮点数 x 分解为尾数和指数,即x = m* 2^exp,返回m,并将指数存入 exp 中;如果 x 为 0,则尾数和指数都返回0 

  • frac(x)                                                                

Returns the fractional portion of a scalar or each vector component

  • isfinite(x)                  

 判断标量或者向量中的每个数据是否是有限数,如果是返回true;否则返回false;无限的或者非数据(not-a-number NaN)

  • 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元向量: 
1.位表示环境光的贡献,总是 1.0;
2.位代表镜面光的贡献,如果 N •L<0,则为0;否则为 N •L;
3.位代表镜面光的贡献,如果N •L<0或者 N •H <0 ,则位 0;否则为(N •H)m; 
W位始终位 1.0 

  • log(x)                    

计算ln(x)的值,x必须大于 0 
 

  • log2(x)               

计算log(2x)的值,x 必须大于 0

  • log10(x)            

计算log10(x)的值,x必须大于 0

  • max(a, b)         

 比较两个标量或等长向量元素,返回 大值

  • min(a,b)           

比较两个标量或等长向量元素,返回 小值


  •  step(a, x)

如果 x<a,返回0;否则,返回1。


  • sqrt(x) 

求 x的平方根, ,x必须大于 0。

 

  • tan(x) 

 输入参数为弧度,计算正切值


  • transpose(M) 

 M 为矩阵,计算其转置矩阵



几何函数:


  •  distance( pt1, pt2) 

两点之间的欧几里德距离(Euclidean distance)


  • faceforward(N,I,Ng)

 如果Unity学习Shader中常用的函数方法

Unity3D -- shader光照常用函数和变量

Unity3D -- shader常用函数和变量

shader一些语义或术语的解释

用SublimeText当Unity Shader的编辑器

UE5 Shader基础学习笔记——01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合