Unity Shader---数学公式总结

转自:https://www.cnblogs.com/Fflyqaq/p/12553567.html

1、数学函数

dot(A,B)	//点积
//点积结果为标量,主要用于求向量的夹角或b向量在a向量上的投影。
cross(A,B)	//叉积
//叉积结果为向量,结果与这两个向量组成的平面垂直。主要用于3D图形学

mul(M, N)	//矩阵M和矩阵N的积
mul(M, v)	//矩阵M和列向量v的积
mul(v, M)	//行向量v和矩阵M的积

abs(x)	//返回绝对值
saturate(x)	//把x限制到[0,1]之间
clamp(x,a,b)	//把x限制到[a,b]之间

sqrt(x)	//求x的平方根,,x必须大于0
rsqrt(x)	//x的平方根的倒数,x必须大于0

all(x)	//如果输入参数均不为0,则返回ture; 否则返回flase。&&运算
any(x)	//输入参数只要有其中一个不为0,则返回true。||运算

lerp(a, b, f)	//计算(1-f)a + b*f 。即在下限a和上限b之间进行插值,f表示权值。注意,如果a和b是向量,则权值f必须是标量或者等长的向量。


ceil(x)   //对x向上取整。
floor(x)   //对x向下取整。
round(x)	//返回四舍五入值。

step(a, x)	//如果x< a,返回0;否则,返回1
sign(x)	//如果x大于0,返回1;如果小于0,返回-1;否则返回0;

exp(x)	//计算e^x,e=2.71828
exp2(x)	//计算2^x

fmod(x,y)	//返回x/y的余数。如果y为0,结果不可预料。
modf(x, out ip)	//把x分解成整数和分数两部分,每部分都和x有着相同的符号,整数部分被保存在ip中,分数部分由函数返回

max(a, b)	//比较两个标量或等长向量元素,返回最大值。
min(a,b)	//比较两个标量或等长向量元素,返回最小值。

determinant(m)	//计算矩阵的行列式因子。
transpose(M)	//矩阵M的转置矩阵

degrees(x)	//函数将弧度值转换为角度值
radians(x)	//函数将角度值转换为弧度值

log(x)	//计算ln(x)的值,x必须大于0
log2(x)	//计算log2^x的值,x必须大于0
log10(x)	//计算log10^x的值,x必须大于0



frac(x)	返回标量或矢量的小数
frexp(x, out i)	将浮点数x分解为尾数和指数,即, 返回m,并将指数存入i中;如果x为0,则尾数和指数都返回0
isfinite(x)	判断标量或者向量中的每个数据是否是有限数,如果是返回true;否则返回false;
isinf(x)	判断标量或者向量中的每个数据是否是无限,如果是返回true;否则返回false;
isnan(x)	判断标量或者向量中的每个数据是否是非数据(not-a-number NaN),如果是返回true;否则返回false;
lit(NdotL, NdotH, m)	N表示法向量。L表示入射光向量。H表示半角向量。m表示高光向量。函数计算环境光,散射光,镜面光的贡献,返回四元向量: X表示环境光的贡献,总是1;Y表示散射光的贡献,如果N.L<0,则为0,否则为N.L; Z表示镜面光的贡献,如果N.L<0或者N.H<0,则为0;否则为(N.H)^m;W始终为1
noise(x)	根据它的参数类型,这个函数可以是一元、二元或三元噪音函数。返回的值在0和1之间,并且通常与给定的输入值一样	
ldexp(x, n)	计算x*(2^n)的值
smoothstep(min, max, x)	 x位于min和max之间,若x=min,返回0;若x=max,返回1;若x在两者之间,按下列公式返回数据:-2*((x-min)/(max-min))^3+3*((x-min)/(max-min))^2


sin(x)	返回弧度x的正弦值,返回值范围为[-1,1]
cos(x)	返回弧度x的余弦值。返回值范围为[-1,1]
tan(x)	计算x正切值

asin(x)	反正弦函数,输入参数取值区间为[-1,1],返回角度值范围为[-π/2,π/2]
acos(x)	反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值
atan(x)	反正切函数

sinh(x)	计算x的双曲正弦
cosh(x)	计算x的双曲余弦值。
tanh(x)	计算x的双曲线切线
sincos(float x, out s, out c)	同时计算x的sin值和cos值,其中s=sin(x),c=cos(x)。该函数比分别运算要快很多!

2、几何函数

normalize(v)	//返回v向量的单位向量
reflect(I, N)	//根据入射光纤方向I和表面法向量N计算反射向量,仅对三元向量有效

length(v)	//返回v向量的模,即sqrt(dot(v,v))
distance(pt1, pt2)	//两点之间的欧几里德距离

faceforward(N,I,Ng)	//如果dot(I,Ng)<0,返回N;否则返回-N。
refract(I,N,eta)	//根据入射光线方向I,表面法向量N和折射相对系数eta,计算折射向量。如果对给定的eta,I和N之间的角度太大,返回(0,0,0)。只对三元向量有效

3、纹理映射函数

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)	使用导数值查询一维纹理, 并进行深度值比较
Tex1Dproj(sampler1D tex, float2 sq)	一维投影纹理查询
Tex1Dproj(sampler1D tex, float3 szq)	一维投影纹理查询,并比较深度值


Tex2D(sampler2D tex, float2 s)	二维纹理查询
Tex2D(sampler2D tex, float2 s, float2 dsdx, float2 dsdy)	使用导数值查询二维纹理
Tex2D(sampler2D tex, float3 sz)	二维纹理查询,并进行深度值比较
Tex2D(sampler2D tex, float3 sz, float2 dsdx,float2 dsdy)	使用导数值查询二维纹理,并进行深度值比较
Tex2Dproj(sampler2D tex, float3 sq)	二维投影纹理查询
Tex2Dproj(sampler2D tex, float4 szq)	二维投影纹理查询,并进行深度值比较
texRECT(samplerRECT tex, float2 s)	二维非投影矩形纹理查询(OpenGL独有)
texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy)	二维非投影使用导数的矩形纹理查询(OpenGL独有)
texRECT (samplerRECT tex, float3 sz)	二维非投影深度比较矩形纹理查询(OpenGL独有)
texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy)	二维非投影深度比较并使用导数的矩形纹理查询(OpenGL独有)
texRECT proj(samplerRECT tex, float3 sq)	二维投影矩形纹理查询(OpenGL独有)
texRECT proj(samplerRECT tex, float3 szq)	二维投影矩形纹理深度比较查询(OpenGL独有)
Tex3D(sampler3D tex, float s)	三维纹理查询
Tex3D(sampler3D tex, float3 s, float3 dsdx, float3 dsdy)	结合导数值查询三维纹理
Tex3Dproj(sampler3D tex, float4 szq)	查询三维投影纹理,并进行深度值比较
texCUBE(samplerCUBE tex, float3 s)	查询立方体纹理
texCUBE (samplerCUBE tex, float3 s, float3 dsdx, float3 dsdy)	结合导数值查询立方体纹理
texCUBEproj (samplerCUBE tex, float4 sq)	查询投影立方体纹理


本文作者:Fflyqaq

本文链接:https://www.cnblogs.com/Fflyqaq/p/12553567.html

本文声明:转载请标记作者哦。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Unity Shader是一种用于在Unity引擎创建和控制图形渲染效果的编程语言。通过使用Unity Shader,开发人员可以自定义游戏各种物体的外观和行为,从而实现更加逼真和出色的视觉效果。 而热图(Heatmap)是一种用于显示某个区域内物体热度分布的视觉化工具。在游戏开发,热图通常用于统计和分析玩家在游戏的行为和偏好,以便开发人员可以根据这些数据进行游戏优化和改进。 为了创建一个热图效果,我们可以使用Unity Shader来实现。首先,我们需要将游戏各个物体按照玩家与其的互动情况和频率进行区分,不同的行为和频率可以对应不同的颜色或者纹理。接着,我们可以在Shader根据这些信息来着色和渲染物体,以展示物体的热度分布。 在Shader,我们可以通过为物体添加一张热图纹理,并使用该纹理来表示物体的热度值。热图纹理可以是一张灰度图,不同的灰度值对应不同的热度。然后,我们可以使用纹理坐标和采样操作来获取每个像素对应的热度值,并根据这些值来着色和渲染物体。 除了使用纹理来表示热度分布,我们还可以使用其他的技术和效果来增强热图的可视化效果。例如,我们可以使用颜色渐变和透明度来形成平滑的过渡效果,以更好地显示物体的热度变化。我们还可以添加动画效果,使热图效果更加生动和有趣。 总结而言,Unity Shader可以用于创建热图效果,通过着色和渲染来展示物体的热度分布。这样的热图可以帮助开发人员分析游戏玩家的行为和偏好,从而优化和改进游戏的设计和内容。这些热图效果能够增强游戏的可视化效果,并提供有价值的数据供开发人员参考。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值