大家好
又见面了
一天不见甚是想念
昨天科普了一期 Smoothstep
的原理
很多小伙伴们就后台找我留言说:
“好难啊没看懂”
“讲了这么多到底有什么用哩??”
于是我考虑了一上午,感觉应该加写一篇用法的推文
来补充之前那篇文章
这里我会使用两个案例分别表现 Smoothstep
区间变换和平滑功能的用法
话不多说咱们开始吧
案例1:选取特定的数值区间 —— 代表效果:光线扫描
首先咱们来看看最终效果:
怎么用 Smoothstep
做到这个效果呢?首先咱们来看看核心节点:
可以看到,图中的节点被分成了 4 个区域,每个区域其实都是代表了不同的功能
首先 A 区是求摄像机位置和每个像素的世界位置之间的距离,这个距离是超过 1 的非常大的数字。
B 区则起到一个驱动器的作用,使用时间求余,让其在 0-1 之间不断循环
C 区就是咱们设置扫描线最远的距离(FarDistance
),以及扫描线宽度(Thickness
) 的地方了,同时和 B 区的结果相乘,达到动态的效果
D 区就是这个效果的重点了,我们使用 C 区中的最远距离(FarDistance
)作为最大值,接入 B 端。而采用最远距离减去扫描线宽度(Thickness
)的值作为最小值,接入 A 端。这样在时间驱动的情况下,就可以在世界空间内查找 x
输入端符合区间的值进行映射,达到扫描的效果。后面乘以 1-x
的目的其实是为了摘头去尾,可以通过下面的图很直观的感受到:
接下来就只需要将相乘结果进行一下 ceil
运算(向上取整计算),就可以得到相应的扫描线区间了!
做到这里,主要功能已经做完了,接下来的艺术效果制作大家可以自由发挥 —— 输出上图的节点我们就可以得出下图的结果:
案例2:平滑输入值 —— 代表效果:平滑移动图像、物体
首先咱们来看看案例结果吧:
这里是平滑图像移动案例,可以看到左半部分的图像比右半部分的图像移动更加平滑(可以试着用手遮住一半图像方便观察)
这个效果的节点如下图所示:
首先看到的是红色框框内的部分 —— 这部分是进行 SmoothStep
采样的节点。原理和前面的限制区间不同,这里是使用 SmoothStep
节点平滑时间取余后的线性结果。在这里我将最小和最大值分别取 0 和 1 ,相当于略过第一个区间变换函数,直接将输入函数进行平滑。
然后蓝色框内的部分就是没有进行 SmoothStep
采样的节点。
接下来就是平滑移动的第二个案例了:平滑物体移动
首先还是看看最终效果:
这其实是两个圆柱体,效果是从顶视图截图方便观察动态。可以看到粉红色的圆柱比蓝色的圆柱运动更加平滑,但是这是怎么做到的呢?依然归功于 SmoothStep
,咱们一起来看看节点:
首先使用时间驱动一个线性正弦(LinearSine
),什么是线性正弦?顾名思义,就是 “直来直去” 的正弦,入下图所示。
接下来我们将这个结果连到 SmoothStep
中,就会将上图的函数平滑成下图所示的函数图像
是不是很神奇,接下来只需要拿这个结果,选择一个特定轴向和 World Space Position
一加,效果就出来了,完事。
看到这里~ 两个案例的介绍也就到此为止了,希望借此抛砖引玉,也期待屏幕前的你能发掘出更多的用法,更多的骚操作!
最后如果你喜欢这篇文章,记得点赞收藏分享哟,么么扎!