ShaderGraph中SmoothStep节点的坑

ShaderGraph中SmoothStep节点,在文档中的介绍:

如果输入 In 的值位于输入 Edge1 和 Edge2 的值之间,返回 0 和 1 之间的平滑埃尔米特插值结果。如果输入 In 的值小于输入 Step1 的值,返回 0;如果大于输入 Step2 的值,返回 1。

此节点类似于 Lerp 节点,但存在两个显著差异。首先,使用此节点时,由用户指定范围,返回值介于 0 和 1 之间。这可视为与 Lerp 节点相反。其次,此节点采用平滑埃尔米特插值,而不是线性插值。这意味着插值从开始后将逐渐加快速度,并在接近结束时减慢速度。这对于创建自然的动画、淡入淡出和其他过渡非常有用。

具体参考 Smoothstep 节点 | Shader Graph | 10.5.0

然后,我在做案例联系的时候遇到了一个问题

ShaderGraph中SmoothStep节点的坑_第1张图片

 这个图形是如何通过SmoothStep节点获得渐变色的条状的,经过我的多次测试大概得出了结果,不一定正确,有大佬了解原理的,可以来讨论。

如上图,edge1是模型的自身坐标Y值,数值为0至1,edge2为Offset值,为一个可在外部调控阈值(控制黑带出现的位置),In值为Offset减去一个-0.5至0的一个值(控制图中黑带的宽度),如果不改变数值,那么只有edge1是变化的,edge1由0变化到1的过程,edge1的值向edge2靠近,edge1和edge2的距离越来越小,又由于In的值永远比edge2小一个固定值(宽度),所以最后的输出是越来越靠近edge1的,即in是从白慢慢变到靠近黑色(看上面的节点解释,在两者之间的时候,是从越靠近edge1,in值越趋向于0,反之越趋向于1,且不是线性的),这样的话,edge1从0变化到In值就能解释了。由下图,结果翻转之后,比较明显,下半部分为渐变色的,而非纯色。

然后是edge1大于In值之后,那就是In值小于edge1,返回0;如下图,我将结果做了Step操作,小于0.01的,即是此部分。

ShaderGraph中SmoothStep节点的坑_第2张图片

 

那之后是为何又会变成白色呢,这个就是我之前一直想不明白的,他当edge1>edge2的时候,他是形不成一个区间的,即大于edge2为1,小于edge1为0,在两者之间为0-1变化,这三个情况合起来,是有交集的,会存在又小于edge1,又大于dege2,这种情况到底是什么结果呢,经过我的测试,得出的结论是,In值靠近哪个,就是遵循哪个的输出值,如下图。

ShaderGraph中SmoothStep节点的坑_第3张图片

ShaderGraph中SmoothStep节点的坑_第4张图片

 至此,此操作也全部解释完成,且符合实际显示结果了。

 

你可能感兴趣的:(Shader,Unity,ShaderGraph)