CG cosh, exp, sinh, smoothstep, tanh, perlin_easeCurve1/2 曲线

news/2024/7/5 9:50:12

文章目录

  • cosh
    • 为何叫双曲线
      • exp(x)曲线
      • exp(-x) 曲线
      • exp(x)+exp(-x) 两曲线叠加
      • 调整x=0时,y=0
      • 调整x=-2 or 2时,y=1
  • exp(-x*x)
  • sinh
  • smoothstep
  • tanh
  • perlin noise ease curve 1
  • perlin noise ease curve 2
  • Summary
  • excel 文件
  • References

xxxh
中的h==>hyperbolic:双曲线的意思


cosh

// see: https://developer.download.nvidia.cn/cg/cosh.html
float cosh(float x)
{
  return 0.5 * (exp(x)+exp(-x));
}

0.5 ∗ ( e x p ( x ) + e x p ( − x ) ) 0.5 * (exp(x)+exp(-x)) 0.5(exp(x)+exp(x))

在这里插入图片描述


为何叫双曲线

因为exp(x)就是一个曲线,而cosh中有exp(x)与exp(-x),所以就是两个(双)曲线咯


exp(x)曲线

e x p ( x ) exp(x) exp(x)
在这里插入图片描述

exp(-x) 曲线

e x p ( − x ) exp(-x) exp(x)
在这里插入图片描述

exp(x)+exp(-x) 两曲线叠加

e x p ( x ) + e x p ( − x ) exp(x)+exp(-x) exp(x)+exp(x)
在这里插入图片描述
在这里插入图片描述

调整x=0时,y=0

e x p ( x ) + e x p ( − x ) − 2 exp(x)+exp(-x)-2 exp(x)+exp(x)2
在这里插入图片描述

调整x=-2 or 2时,y=1

( e x p ( x ) + e x p ( − x ) − 2 ) ∗ ( 1 / e x p ( x ) + e x p ( − x ) − 2 ) (exp(x)+exp(-x)-2)*(1/exp(x)+exp(-x)-2) (exp(x)+exp(x)2)(1/exp(x)+exp(x)2)
==>
∵ c u r v = ( e x p ( x ) + e x p ( − x ) − 2 ) \because curv=(exp(x)+exp(-x)-2) curv=(exp(x)+exp(x)2)
∵ i n v C u r v = 1 / c u r v \because invCurv=1/curv invCurv=1/curv
∴ 1 = c u r v ∗ i n v C u r v \therefore 1=curv*invCurv 1=curvinvCurv

在这里插入图片描述


exp(-x*x)

2022/07/14 再补充一条曲线
因为在制作 SSS 时,看到别人的代码中有一曲线

half3 Transmittance(half transmittanceMask, half3 sssColor, half3 lightDir, half3 normal, half3 viewDir)
{
	half3 lll = normalize(lightDir + normal * 0.1f);
	half VdotL = saturate(dot(viewDir, -lll));
	half thickness = 1.0f - (VdotL * transmittanceMask);
	
	//return exp((thickness) * half3( -8, -40, -64 ) ); // ref
	return exp(-(thickness * thickness)) * sssColor * (1.0 - thickness);
}

其中留意:exp(-(thickness * thickness))
在这里插入图片描述

单独查看:exp(-x*x
在这里插入图片描述


sinh

float sinh(float x)
{
  return 0.5 * (exp(x)-exp(-x));
}

在这里插入图片描述
在这里插入图片描述


smoothstep

smoothstep(min,max,x)

它的公式如下:
s m o o t h s t e p ( x ) = − 2 ⋅ ( x − m i n m a x − m i n ) 3 + 3 ⋅ ( x − m i n m a x − m i n ) 2 smoothstep(x)=-2 \cdot (\frac{x-min}{max-min})^3+3 \cdot (\frac{x-min}{max-min})^2 smoothstep(x)=2(maxminxmin)3+3(maxminxmin)2

代码是在公式的基础上优化了写法的,可读性会差非常的多!

float smoothstep(float a, float b, float x)
{
    float t = saturate((x - a)/(b - a));
    return t*t*(3.0 - (2.0*t));
}

在这里插入图片描述
在这里插入图片描述


tanh

float tanh(float x)
{
  float exp2x = exp(2*x);
  return (exp2x - 1) / (exp2x + 1);
}

在这里插入图片描述
tanh 的头部过渡速度比较快,中,尾部比较缓慢
一般比较多的动画也会用到类似的曲线


perlin noise ease curve 1

3 ( t 2 ) − 2 ( t 3 ) 3(t^2)−2(t^3) 3(t2)2(t3)可见perlin noise中初版的平滑插值,与smoothstep非常相似

3(t^2)2(t^3)

在这里插入图片描述


perlin noise ease curve 2

6 ( t 5 ) − 15 ( t 4 ) + 10 ( t 3 ) 6(t^5)−15(t^4)+10(t^3) 6(t5)15(t4)+10(t3)

6(t^5)15(t^4)+10(t^3)

在这里插入图片描述
curve 2比curve 1的头尾过渡比较缓慢,也就是说作数值过渡会比较饱满的头尾,中部过渡比较快一些


Summary

其实我们在很多平台的动画库(tween)都会有类似的插值过渡算法


excel 文件

cosh_sinh_smoothstep_tanh_perlinEaseCurve1&2.xlsx 提取码: dxnr


References

  • Cg / Standard Library / cosh
  • Cg / Standard Library / sinh
  • Cg / Standard Library / smoothstep
  • Cg / Standard Library / tanh
  • cg中的关键字、语义词、函数库

http://www.niftyadmin.cn/n/2525438.html

相关文章

Bash的输入输出重定向

Bash的输入输出重定向 此页由Linux Wiki用户Chenxing于2012年12月18日 (星期二) 07:58的最后更改。 在linuxCook的工作基础上。使用Bash可以方便的用<和>实现输出输入的重定向&#xff0c;本文讨论重定向的一些细节和技巧。本文介绍部分是对Bash Quick Reference相关内容…

Unity Shader PostProcessing - 1 - 后处理概念

(加粗的内容需要留意) 什么叫PostProcessing&#xff1f; Post Processing 中文直译&#xff1a;后处理&#xff08;以前我是不知道是怎么回事&#xff0c;总觉得好高端的感觉&#xff0c;-_-&#xff09; 我们知道&#xff1a;在场景的所有需要渲染的对象&#xff0c;渲染完后…

文件描述符和文件流之间的转换

文件描述符和文件流之间的转换 2009-11-24 17:30 345人阅读 评论(0) 收藏 举报streamfilesocketFILE *fdopen(int fildes, const char *type); 这个函数很有用的&#xff0c;功能是将一个流关联到一个打开的文件号filedes上&#xff0c; 该filedes可以是open、pipe、dup、dup2…

Unity Shader PostProcessing - 2 - 边缘检测

边缘检测的算法有很多种 这里介绍的是其中的一部分 SobelPrewittRobertLine 这些卷积核&#xff0c;都是final g越大&#xff0c;越可能是边缘 Sobel (-1,1), (0,1), (1,1)与(-1,-1),(0,-1),(1,-1)的亮度差距越大&#xff0c;特别是左右、上下的差异越大&#xff0c;则final…

switch表达式类型

switch表达式类型 一般格式&#xff1a; switch &#xff08;表达式&#xff09; &#xff5b; case 常量标号1&#xff1a;语句序列1; break; case 常量标号2&#xff1a;语句序列2; break; … case 常量标号n&#xff1a;语句序列n; break; default&#xff1a; 语句S; &…

iOS开发系列之运动事件

前面我们主要介绍了触摸事件以及由触摸事件引出的手势识别&#xff0c;下面我们简单介绍一下运动事件。在iOS中和运动相关的有三个事件:开始运动、结束运动、取消运动。 监听运动事件对于UI控件有个前提就是监听对象必须是第一响应者&#xff08;对于UIViewController视图控制器…

C语言 side effect 和 sequence point

C语言 side effect 和 sequence point 2011-09-18 16:16 126人阅读 评论(0) 收藏 举报语言cobject编译器functionfileC 语言中&#xff0c;术语副作用&#xff08;side effect&#xff09;是指对数据对象或者文件的修改。例如&#xff0c;以下语句 var 99;的副作用是把…

L3-005. 垃圾箱分布

L3-005. 垃圾箱分布 题目链接&#xff1a;https://www.patest.cn/contests/gplt/L3-005 Dijstra 与L2-001.紧急救援类似&#xff0c;是Dijstra最短路的拓展&#xff0c;要注意排序是按照&#xff1a; 1.到所有居民点的最小距离的最大&#xff1b; 2.平均距离最短&#xff1b; 3…