目录
前言
B站上听课,在关于blin-phong模型中的shader代码上,对于提高其对比度方面,大佬提了一嘴,“pow()函数的性能比smoothStep()函数要费”,有点懵,所以简要记录一下关于两个函数的学习过程 (以下比较是基于CG语言)
一、定义
pow(x,y)
作用:求x的y次幂
smoothstep(min,max,x)
作用:在min和max之间平滑插值,其实跟lerp()函数差不多
具体函数为
float smoothstep(float a, float b, float x)
{
float t = saturate((x - a)/(b - a));
return t*t*(3.0 - (2.0*t));
}
二、图形
pow(x,y)
smoothstep(min,max,x)
smoothstep()与lerp()
其实从这里的图形可以直观地看出
pow()函数是非常简单粗暴地控制函数的走势,所以形成的变化也比较迅猛
smoothstep()函数通过输入最大最小值和调节的权重值,形成了非常平滑曲线,且较为可控,与lerp()插值函数相比,smoothstep()函数在接近最大/最小值的时候走势会变缓
三、性能
感觉还是要看具体的输入输出函数……
总体上看是
如果pow()函数的数据是某个数的多少次幂时,耗费会很大,对物体的影响也很大
四、总结
pow()函数比较激进,难以控制,但更善于应用在物体变化幅度大的情况
smoothstep()函数可控性高,处理细节方面的的物体效果会较好