Linear Drag とは何か?
Visual Effect Graphの公式ドキュメント によると,
Linear Drag Blockは、パーティクルに力を加えて、方向を変えずに速度を落とすことができます。
と書かれていて,ここでのdragとは抗力らしいです.つまり空気抵抗や摩擦に近いものっぽい.
実際にやってそうな計算
KeijiroさんのKvantSwarm を読んでいて,Linear dragが何かがおおよそわかりました ↓
//現在のフレームで設定する速度 = (前のフレームの速度) * (抵抗力) + (加速度) * (時間 dt)
velocity = velocity * _Drag + (force) * _DeltaTime;
現在のvelocityの方向は変更せず,大きさだけ若干落とすというやり方になっていました.ここでの _Drag
の数値として,C#側から Mathf.Exp(-_drag * deltaTime)
が設定されていました(実際の値はMathf.Exp(- 2 * 0.025) = 0.951..
でした).
dragの値における減少度合いは以下の通りです.
math.exp(- 0 * 0.025) => 0.0
math.exp(- 100 * 0.025) => 0.08208..
math.exp(- 1 * 0.025) => 0.9753..
math.exp(- 10 * 0.025) => 0.7788..
math.exp(- 100 * 0.025) => 0.08208..
という感じです.ちなみにdragの値をマイナスにすると抵抗ではなく,加速的な状態になるので注意が必要です.
math.exp(- (-1) * 0.025) => 1.0253..
math.exp(- (-10) * 0.025) => 1.0253..
math.exp(- (-100) * 0.025) => 12.182...
用途
ちなみにKvantSwarmでは,特定のオブジェクト(Attractor objectと呼ばれる)に追従するトレイルの速度を決める際に使われていました,
linear dragがないと,速度が強すぎてAttractor objectよりも遠くにトレイルがいってしまう(発散する)ので,その速度を落とすのにLinear dragが使われていました.