0

以下のこのリターンは、ガウスフォールオフとして定義されています。eまたは2の累乗が表示されないため、これがガウスフォールオフとどのように関連しているか、またはメッシュを滑らかに変形させるために使用するフォールアウトの種類が間違っているかどうかはわかりません。

Mathf.Clamp01(Mathf.Pow(360.0、-Mathf.Pow(距離/内接円半径、2.5)-0.01))

ここでMathf.Clamp01、0から1までの値を返します。

inRadiusは歪みのサイズであり、次の要素distanceによって決定されます。

        sqrMagnitude =(vertices [i]-position).sqrMagnitude;
        //遠すぎる場合は早期に
        if(sqrMagnitude> sqrRadius)
            継続する;
        距離=Mathf.Sqrt(sqrMagnitude);

verticesはメッシュの頂点のリストでありposition、メッシュの操作/変形のポイントです。

私の質問は2つの部分です:

1)上記は実際にガウスフォールオフですか?指数関数的ですが、2の重要なeまたは累乗はないようです...(更新-グラフがガウスのように滑らかに減少するように見えることがわかります。おそらく、この関数は問題2の原因ではありません。下)

2)メッシュが十分にスムーズに変形していません-上記のパラメーターを考慮して、別のガウスフォールオフをお勧めしますか?

4

1 に答える 1

0

メッシュなどについてはわかりませんが、その計算を見てみましょう:

f=360^(-0.1- ((d/r)^2.5) ) は、ガウス関数に十分に似ており、「フォールオフ」します。ポイントを示すために指数を分解します: f= 360^( -(d/r)^2.5)*360^(-0.1)=(0.5551)*360^( -(d/r)^2.5)

if d-->+inf then f-->0 if d-->+0 then f-->(0.5551) 360 の指数は常に負であり ('distance' と 'inRadius' が常に正であると仮定)、より大きく(より負)、距離とともにほぼ立方体(2.5の累乗)になるため、関数は「低下」し、かなり速く実行されます。

結論: この関数はガウス関数ではありません。これは、負の入力に対する動作が悪く、おそらく他の理由によるためです。探している「フォールオフ」動作を示します。r を変更すると、フォールオフの速度が変わります。d==r の場合、f=(1/360)*0.5551 です。この関数は 0.5551 を超えたりゼロを下回ったりしないため、コード内の「クリッピング」は無意味です。

定数 360 の具体的な理由はわかりません。変更すると傾きが少し変わります。

乾杯!

于 2011-10-30T01:30:44.450 に答える