【转载】继续填坑,介绍 UE4 中两种 Smoothstep 的用法

1,394 阅读4分钟

原文链接:《继续填坑,介绍 UE4 中两种 SmoothStep 的用法》 | 作者:包小猩 CG 杂货店

大家好
又见面了
一天不见甚是想念

昨天科普了一期 Smoothstep 的原理

戳我回顾:Smoothstep 是个啥?这是数学的魅力!

很多小伙伴们就后台找我留言说:

“好难啊没看懂”

“讲了这么多到底有什么用哩??”

image.png

于是我考虑了一上午,感觉应该加写一篇用法的推文

来补充之前那篇文章

这里我会使用两个案例分别表现 Smoothstep 区间变换平滑功能的用法

话不多说咱们开始吧

640.gif

案例1:选取特定的数值区间 —— 代表效果:光线扫描

首先咱们来看看最终效果:

640.gif

怎么用 Smoothstep 做到这个效果呢?首先咱们来看看核心节点:

image.png

可以看到,图中的节点被分成了 4 个区域,每个区域其实都是代表了不同的功能

首先 A 区是求摄像机位置和每个像素的世界位置之间的距离,这个距离是超过 1 的非常大的数字。

B 区则起到一个驱动器的作用,使用时间求余,让其在 0-1 之间不断循环

C 区就是咱们设置扫描线最远的距离(FarDistance),以及扫描线宽度(Thickness) 的地方了,同时和 B 区的结果相乘,达到动态的效果

D 区就是这个效果的重点了,我们使用 C 区中的最远距离(FarDistance)作为最大值,接入 B 端。而采用最远距离减去扫描线宽度(Thickness)的值作为最小值,接入 A 端。这样在时间驱动的情况下,就可以在世界空间内查找 x 输入端符合区间的值进行映射,达到扫描的效果。后面乘以 1-x 的目的其实是为了摘头去尾,可以通过下面的图很直观的感受到:

image.png

接下来就只需要将相乘结果进行一下 ceil 运算(向上取整计算),就可以得到相应的扫描线区间了!

做到这里,主要功能已经做完了,接下来的艺术效果制作大家可以自由发挥 —— 输出上图的节点我们就可以得出下图的结果:

640.gif

案例2:平滑输入值 —— 代表效果:平滑移动图像、物体

首先咱们来看看案例结果吧:

640.gif

这里是平滑图像移动案例,可以看到左半部分的图像比右半部分的图像移动更加平滑(可以试着用手遮住一半图像方便观察)

这个效果的节点如下图所示:

image.png

首先看到的是红色框框内的部分 —— 这部分是进行 SmoothStep 采样的节点。原理和前面的限制区间不同,这里是使用 SmoothStep 节点平滑时间取余后的线性结果。在这里我将最小和最大值分别取 01 ,相当于略过第一个区间变换函数,直接将输入函数进行平滑。

然后蓝色框内的部分就是没有进行 SmoothStep 采样的节点。

接下来就是平滑移动的第二个案例了:平滑物体移动

首先还是看看最终效果:

640.gif

这其实是两个圆柱体,效果是从顶视图截图方便观察动态。可以看到粉红色的圆柱比蓝色的圆柱运动更加平滑,但是这是怎么做到的呢?依然归功于 SmoothStep,咱们一起来看看节点:

image.png

首先使用时间驱动一个线性正弦(LinearSine),什么是线性正弦?顾名思义,就是 “直来直去” 的正弦,入下图所示。

image.png

接下来我们将这个结果连到 SmoothStep 中,就会将上图的函数平滑成下图所示的函数图像

image.png

是不是很神奇,接下来只需要拿这个结果,选择一个特定轴向和 World Space Position 一加,效果就出来了,完事。

看到这里~ 两个案例的介绍也就到此为止了,希望借此抛砖引玉,也期待屏幕前的你能发掘出更多的用法,更多的骚操作!

最后如果你喜欢这篇文章,记得点赞收藏分享哟,么么扎!

640.gif