欢迎光临散文网 会员登陆 & 注册

关于smoothstep函数的理解

2023-06-29 21:51 作者:绝剑结城  | 我要投稿

在进行ramp图u坐标的取值的时候,我看到很多大佬用了smoothstep这个函数。不过一时半会我还不太理解为啥它能把半兰伯特给变成能取样到很靠近右边的ramp图的明暗交界,后面画了个图,查了些资料,终于理解了。现在在这里做下笔记。

ramp图

首先讲下我们用的lambert,我在原神渲染02里面,展示了一开始两种半lambert,分别是有无平方的,但其实这还是有一个前提,也就是运算它们的lambert是没有clamp过的。而正规的lambert其实应该clamp之后再变halflambert,这样的话得到的结果又和之前完全不同,我下面画了示意图。而那些大佬似乎用的就是这种半lambert。

那么就以这个半Lambert为基础。首先,如果我们直接用这个半lambert对ramp采样。那么结果肯定不正确,如我画的图所示。明暗交界线在将近0.9的地方,过渡很不自然。

而大佬们使用smoothstep函数来解决这种情况。配合下面这张图,我来讲一下这个函数是怎么解决这个问题的。首先,我们要对坐标和值的概念分清楚,我下面图也标出来了,坐标是固定的,左边是0右边是1,中间均匀分布。值则是会改变的,最开始的半兰伯特是这样的。

然后我们对它进行smoothstep(0.2,0.4)之后,其实就是首先对它做一个钳制,大于0.4的值全部改为1,小于0.2的值全部改为0。钳制之后如下图示意。

然后进行一个映射,以x(0.2,0.4)y(0,1)的范围构建一个这个平滑函数f(x),然后把之前那个轴上,0.2到0.4范围内的值全部由x变为f(x)。

最终结果如下,然后以这个图为u坐标去采样ramp,明暗交界线就不会特别靠右边了,而且也因为平滑函数的原因,有了一定的扩展。

下面是一图流


关于smoothstep函数的理解的评论 (共 条)

分享到微博请遵守国家法律