“NATURE OF CODE” in Houdini – 002 – 力

長い間、仕事ではパイプライン系ツールを書くことが多くなり、幾何学や物理などの数学とはだいぶ疎遠になってしまいました。

最近になって、やっとHoudiniを業務で使用させてもらえる環境が与えられたこともあり、これも良い機会ということで、これからしばらくの間、数学の勉強や復習とリハビリを兼ね、Processingの名著 [NATURE OF CODE] の内容を、Houdiniを使って追いかけていきたいと思います。




 

■動画内容の御品書

  1. シンプルな力
    単純な力を与えて動かす。
  2. 力と質量
    質量を考慮しながらシンプルな力(重力+風)を与えて動かす。
    小さいものほど風の影響を受けやすく水平方向によく動く。
  3. 力と摩擦
    摩擦による減速。
  4. 力と流体抵抗
    Y=0の位置から流体があると仮定し、ポイントが抵抗を受ける。
    この流体の範囲に入った時、ポイントは赤くなります。
  5. 引力(固定アトラクタ)
    原点の位置に引力を発生するポイントを配置し固定。
    その他のポイントは原点のポイントと引き合う。
  6. 引力(ポイントの相互作用)
    各ポイントはそれぞれ相互に引き合う力を持っている。
    質量や引力の設定にもよるが、小さな塊ができ、それぞれの塊が引き合い徐々に大きな塊になっていく。(ポイント半径に合わせたコリジョンは設定していないので、実際には、塊は大きくなりません。)

2.0 Houdiniの単位系

Houdiniは標準的なSI単位を採用している。
https://www.sidefx.com/docs/houdini15.0/dyno/about
http://www.cranenet.or.jp/tisiki/si.html

2.1 力とニュートンの運動の法則

力とは、質量を持った物体に加速度を生じさせるベクトル。

・ニュートンの運動の第1法則(慣性)

静止している物体は静止状態を続け、運動している物体は不平衡力の影響を受けないかぎり、一定の速さで一定の方向へ運動を続ける。

・ニュートンの運動の第3法則(作用・反作用)

力は常に反作用が対になって生じ、その強さは等しく、向きは正反対である。

-F[N]

 押し合う物体の質量が違う場合や、接地面の摩擦力が違う場合、同じ力が加わってもそれぞれの物体が静止し続けるとは限らない。

2.2 力とProcessing

・ニュートンの運動の第2法則(運動方程式)

質量(m)に加速度(A)を掛けあわせると力(F)になる。

・重量と質量

  • 質量(m):物体内の物質の量[kg]
  • 重量(W):物体にかかる重力[N]
  • 密度(Density):単位体積(m^3)あたりの質量(kg)

2.3 力の積算

書籍では質量を1として計算し、F=Aとして簡単化する。

通常、物体にはいくつかの外力が同時に作用する。
そのような場合、全外力の合計値を使用する。
物体に働く力は、特殊な状況を除いて常に変化し、積算されないので、毎フレームで新たな値を計算して使用する。

windForceやgravityForceなどを追加してみる。

2.4 質量

先に計算された外力を質量で割ることで、各ポイントごとに設定された質量を考慮したシミュレーションが行われる。

2.5 力の作成

・力の作り方

  • 直接指定
    自由に直接指定する
  • シミュレーション
    物理公式などを利用し、計算する。

2.6 地球と重力と力のシミュレーション

この時点では、質量が小さいものほど重力の影響を強く受けるようになっている。
物体の落下速度は、その質量にかかわらず一定。
重力加速度の式から正しい加速度を求めて適用するため、重力に質量を掛けあわせてる。

2.7 摩擦

摩擦は散逸力(非保存力)。

※散逸は、抵抗力によって運動エネルギーを熱エネルギーに変換する現象。
散逸力とは、摩擦力などのエネルギーを減少し、別の力に変換させる力。
車のブレーキなどは運動エネルギーを熱エネルギーに変換。

・摩擦の種類

  • 静止摩擦
    接触面に対し静止している物体が受けている摩擦
  • 動摩擦
    動いている物体が接触面から受ける摩擦

摩擦の方向は速度方向の逆。

・摩擦の公式

・公式を使用する際のポイント

  • 右辺を計算し、左辺に代入する。
  • 変数がベクトルかスカラーかを見極める。
  • 記号が隣り合っている場合は乗算を表す。

■各項の意味

  • F friction:摩擦により働く力

  • μ:摩擦係数

    特定の表面上に生じる摩擦力の強さ。

  • N:垂直抗力
    物体が接触面から受ける反作用で接触面に対して垂直方向に物体を押し返す力。
    物体が接触面から受ける垂直抗力の大きさは物体の質量に比例する。
  • v:正規化済みの速度ベクトル
    式中の-1と掛けわせることで摩擦による力の発生する方向を取得する。
    この場合、速度ベクトルの真逆方向に摩擦力による力が発生する。

2.8 空気抵抗と流体抵抗

物体が空気や液体(流体)の中を通り抜けるとき、抵抗力が働く。
これは、粘性力(Viscous Force)や抗力(Drag Force)、流体抵抗(Fluid Resistance)などと呼ばれる。

・流体抵抗の公式

■各項の意味

  • F drag:流体を物体が通り抜ける際に働く抗力
  • 1/2:定数
  • ρ(rho):流体の密度
  • v^2:速度ベクトルの長さの2乗
  • A:進行方を向いている面の表面積
  • Cd:抗力係数、自由に決定する
  • v:正規化された速度ベクトル

2.9 重力

■重力の公式

■各項の意味

  • F gravity:重力
  • G:万有引力定数、独自の値を使っても面白い。
  • m1とm2:相互に作用する2つの物体が持つそれぞれの質量。
  • r:物体間の距離ベクトルを正規化したベクトル。物体同士が引き合う方向。
  • r^2:物体間の距離の2乗。
    物体同士が引き合う力は距離が長いほど弱くなり、近いほど強くなる。

2.10 相互引力と反発

2.9の計算を、各ポイント間で計算し、毎フレーム全ポイントの影響を合計して適用する。


何か間違いがあればツッコミをいただけると助かります。