pow()与smoothStep()函数的比较

目录

前言

一、定义

二、图形

三、性能

四、总结


前言

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()函数可控性高,处理细节方面的的物体效果会较好

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值