unity shader smoothstep and lerp ,InverseLerp

Unity和Unity ShaderLab 里面的SmoothStep居然不是一样的东西。。所以记录一下

Unity Lerp 同 Shader Lerp

 public float Lerp(float a, float b, float value)
 {
 	if(value <= 1 && value >= 0)
 	{
 		return a * (1 - value) + b * value;
 	}
	else if(value < 0)
	{
		return a;
	}
	else 
	{
		return b;
	}
 }

Unity InverseLerp

 public float InverseLerp(float a, float b, float value)
 {
     if (a != b)
         return Mathf.Clamp01((value - a) / (b - a));
     else
         return 0.0f;
  }

unity SmoothStep

float SmoothStep(float a, float b, float value) 
{
	
 	if(value <= 1 && value >= 0)
 	{
 		value = value * value * (3 - 2 * value);
 		return a * (1 - value) + b * value;
 	}
	else if(value < 0)
	{
		return a;
	}
	else
	{
		return b;
	}
}

Shader SmoothStep

float SmoothStep(float a, float b, float x) 
{
  	x = clamp((x - a) / (b- a), 0,1); 
  	return x * x * (3 - 2 * x);
}

Unity SmoothDamp

public static float SmoothDamp(float current, float target, ref float currentVelocity, float smoothTime, [DefaultValue("Mathf.Infinity")] float maxSpeed, [DefaultValue("Time.deltaTime")] float deltaTime)
{
     smoothTime = Mathf.Max(0.0001f, smoothTime);
     float num = 2f / smoothTime;
     float num2 = num * deltaTime;
     float num3 = 1f / (1f + num2 + 0.48f * num2 * num2 + 0.235f * num2 * num2 * num2);
     float num4 = current - target;
     float num5 = target;
     float num6 = maxSpeed * smoothTime;
     num4 = Mathf.Clamp(num4, -num6, num6);
     target = current - num4;
     float num7 = (currentVelocity + num * num4) * deltaTime;
     currentVelocity = (currentVelocity - num * num7) * num3;
     float num8 = target + (num4 + num7) * num3;
     if (num5 - current > 0f == num8 > num5)
     {
         num8 = num5;
         currentVelocity = (num8 - num5) / deltaTime;
     }
     return num8;
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值