网格操作的高斯衰减格式

时间:2011-10-29 11:14:45

标签: math 3d mesh gaussian procedural

以下返回定义为高斯衰减。我没有看到e或2的幂,所以我不确定这与高斯衰减有什么关系,或者如果我用它来在我的网格上获得一个很好的平滑变形是错误的影响:

 Mathf.Clamp01 (Mathf.Pow (360.0, -Mathf.Pow (distance / inRadius, 2.5) - 0.01))

其中Mathf.Clamp01返回介于0和1之间的值。

inRadius是失真的大小,distance由以下因素确定:

        sqrMagnitude = (vertices[i] - position).sqrMagnitude;
        // Early out if too far away
        if (sqrMagnitude > sqrRadius)
            continue;
        distance = Mathf.Sqrt(sqrMagnitude);

vertices是一个网格顶点列表,position是网格操纵/变形的点。

我的问题分为两部分:

1)以上实际上是高斯衰减吗?它是指数的,但似乎没有2的关键e或幂......(更新 - 我看到图形似乎以类似高斯的方式平滑地减少。也许这个函数不是问题的原因2下面)

2)我的网格没有足够平滑变形 - 鉴于上述参数,你会推荐一个不同的高斯衰减吗?

1 个答案:

答案 0 :(得分:0)

不知道网格等,但让我们看看数学:

f = 360 ^( - 0.1-((d / r)^ 2.5))看起来类似于gausian函数以使“脱落”。 我会把指数分开来说明一点: f = 360 ^( - (d / r)^ 2.5)* 360 ^( - 0.1)=(0.5551)* 360 ^( - (d / r)^ 2.5)

如果d - >> + inf则f - > 0 如果d - >> +0则f - >(0.5551) 360的指数总是负的(假设'距离'和'inRadius'总是正的)并且随着距离变得更大(更负),几乎立方(功率为2.5)因此功能“脱落”并且相当快。

结论:该功能不是Gausian,因为它对负输入表现不佳,可能还有其他原因。它确实表现出您正在寻找的“脱落”行为。 改变r将改变衰减的速度。当d == r时,f =(1/360)* 0.5551。 该函数永远不会超过0.5551且低于零,因此代码中的“限幅”毫无意义。

我没有看到任何特定原因导致常数360 - 改变它会稍微改变斜率。

喝彩!