【Unity Shader】---CG标准函数库
1、CG标准函数库
和C的标准函数库类似,CG也提供了一系列的内建函数库,这些函数用于计算数学上的通用计算或算法(如纹理映射)。
例如:求取入射光线的反射光线用Reflect函数,求折射光线用Reflact函数,作矩阵乘法运算用mul函数。有些函数和GPU
指令相对,所以执行效率非常高。绝大部分标准函数都被重载过,用于支持不同长度的数组或向量做参数。
2、CG标准函数库分为5个部分
(1)数学函数(Mathematical Functions)
数学函数用于数学上的计算,包括三角函数、幂函数、圆函数、向量和矩阵操作函数。并重载了这些函数以适应不用长度和类型的参数。
(2)几何函数(Geometric Functions)
(3)纹理映射函数(Texture Map Functions)
s象征一元、二元、三元纹理坐标;
z代表使用“深度比较(depth comparison)”的值;
q表示一个透视值(perspective value,其实就是透视投影后所得到的齐次坐标的 后一位),这个值被用来除以纹理坐标(s),
得到新的纹理坐标(已归一化到0 和1 之间)然后用于纹理查询。纹理函数非常多,总的来说,按照纹理维数进行分类,
即:1D纹理函数, 2D 纹理函数,3D纹理函数,已经立方体纹理。需要注意,TexREC函数查询的纹理实际上也是二维纹理。
3D 纹理,另一个比较学术化的名称是“体纹理(Volume Texture)”,体纹理通常用于体绘制,体纹理用于记录空间中的体细节数据。
还有一类较为特殊的纹理查询函数以 proj 结尾,主要是针对投影纹理进行查询。所谓投影纹理是指:将纹理当做一张幻灯片投
影到场景中,使用投影纹理技术需要计算投影纹理坐标,然后使用投影纹理坐标进行查询。使用投影纹理坐标进行查询的函数就是
投影纹理查询函数。本质来说,投影纹理查询函数和普通的纹理查询函数没有什么不同,唯一的区别在于“投影纹理查询函数使用计
算得到的投影纹理坐标,并在使用之前会将该投影纹理坐标除以透视值”。
举例而言,计算得到的投影纹理坐标为float4 uvproj,使用二维投影纹理查询函数:
tex2Dproj(texture,uvproj);等价于按如下方法使用普通二维纹理查询函数:
float4 uvproj = uvproj/uvproj.q; tex2D(texture,uvproj)
(4)偏导数函数(Derivative Functions)
函数 ddx和 ddy 用于求取相邻像素间某属性的差值。
函数 ddx和 ddy 的输入参数通常是纹理坐标。
函数 ddx和 ddy 返回相邻像素键的属性差值。
(5)调试函数(Debugging Functions)
Debug函数的目的是允许一个程序被编译两次——一次使用Debug选项,另一次则不选择。通过
指向两个程序,有可能获得一个包含程序的最后输出的帧的缓冲器和另一个包含了一个为了
调试为目的需要检查的中间值的帧缓冲器。