このページの最終更新日: 2009/09/26
まったく無いよりはマシな、

pmpdドキュメントの抜粋&意訳

未推敲。とりあえず一旦リリース。




pmpd = Physical modelling for Pd
Pd内で簡易物理モデルを作成するためのオブジェクト群。


物理モデルの様子はGem等で視覚化できるが、物理モデルの出力を数値としてのみ扱う場合は必ずしもCGが伴う必要はな

い。

pmpd関連のオブジェクトはすべてコントロール・レートで制御される。
つまり直接オーディオを生成しない。(当然オーディオ関連オブジェクトの制御には使用できる)


物理モデルが存在する仮想空間として、1次元、2次元、3次元を扱える。


モデルは、主に2つの低レベルなオブジェクト「mass」「link」を組み合わせて作成する。


■mass

外部からの「力」を入力として受け付け、座標を出力する。
ニュートン力学に基づいて動作する。

ΣF = mγ


慣性は存在するが、モーメントは存在しない(mass自体は回転しない)。

外部からの力が加わると、自身の加速度への影響を演算する。



■link

2つの座標を入力として受け付ける。両端の座標に加わる質量と加速度を元に、反作用する2つの力を出力する。
linkは、2つのmassを繋ぐ、粘弾性を持つ接続として機能する。

粘弾性は、フックの法則に定義される。(F = KX)
K = linkの剛性
X = linkの長さ


粘度(F) = DV
D = linkのダンピング
V = 2つのmassの相対速度


linkが生成する力は、上記を合わせたものとなる。
F = KX + DV


■単位

pmpdが扱う長さ、質量などに具体的な単位はない。


■メトロノーム

pmpdにおいて、時間が進行するタイミングはユーザが制御する。
つまり、[metronome]などを用いて、何かしらのクロックを与える必要がある。

これは、以下のメリットを考慮した上での仕様となっている。
・シミュレーションの進行速度をユーザが抑制できる。
・都度、更新の不要な箇所のシミュレーションを部分的に停止できる。
・必要であればビデオのレンダリングとの同期が可能となる。
・pmpdでは、更新毎にすべてのlinkとmassの状態を更新しなければならない。これを行う上で外部クロックは好都合


メトロノームの速度は任意だが、データを取り出したい頻度よりは早いレートでの更新が必要。



(物理計算の詳細は省略)
要するに、加わる力と、前の2ステップの座標(と、それから算出される一つ前の加速度)がわかれば現在の座標を算出で

きる。


メトロノームの機構の基本形は、

[metro]
|
[t b b]
|    |
|    [s $0-link]
|
[s $0-mass]

※まず、すべてのlinkにbangを送信したのち、すべてのmassにbangを送信


■Interactors objects (作用オブジェクト)

Interactorと呼ばれる種類のオブジェクトは、パッチ線で接続することなく一まとまりのmassグループに作用を及ぼす。

Interactorオブジェクトを作成する際には、必ず名前が必須。
同名のmassが作用される対象となる。


■Test object

Test objectに分類されるオブジェクトは、座標、距離、相対速度、その他…等の測定に使用。中にはlink自体の歪み具合

や、変化速度を測定するものもあり。


■Displacement (massの座標変更)

massにメッセージを送信することにより、速度に影響を与えることなく座標を変化させることができる。これは物理法則に

は従わないものの特定用途において有効。



■■pmpdの使用

■コンパイル
pmpdは数値計算のみ行うライブラリなので、特に依存するライブラリはない。


■サンプル

pmpdを理解するには、付属のサンプルを参照するのが手っ取り早い。
ただし物理モデルの視覚化に使用しているGemが必要(0.888以降)
またこれらサンプルはあくまでモデルの視覚化を目的としており、グラフィック・アートでの応用例を示すものではない。


■接続例

(原文中 figure.7参照)

massオブジェクトは
出力…座標
入力…力

linkオブジェクトは
出力…力(二つのmass用)
入力…二つのmassの座標


入力を持たないmassは、外部からの力を受けないため固定点として機能する。(mass 1 & 2)

中央のmass2は、ダンピングが0の二つのlinkに接続されているので、永久に動作する。

massオブジェクトはoutletより、座標、作用している力、速度を出力する。

単体のmass/springはロー・パス・フィルターとして機能する。
連続する数値を自然なカーブで変化させたい場合などに使用できる。


■トポロジー
(Figure.8参照)

同じ構造を持つmassでも、接続が異なると物理的な挙動も異なる。


■その他の一般的な事項

・すべてのオブジェクトは、名前空間の衝突を防ぐため、"pmpd.ObjectName"でも代替可能。
・オブジェクトのパラメータはインスタンス作成時の引数で指定するが、メッセージにより作成後にも変更が可能。
・自然界に存在しないモデルも作成可能。たとえばlinkのダンピングに負数を指定するなど。
・メッセージによりパラメータを変更する際は注意が必要。たとえばlinkの剛性を変化させると、エネルギーが生じる場合

がある。
・モデルが安定している(収束、発散しない)ことが確認されるまでは、遅いレートでの使用を推奨。
・pmpdが使用しているmass class reference systemでは、モデルの演算毎に瞬間的にCPUリソースが必要になることが

多い。音声が途切れる場合はバッファを多めに設定する。



(モデルを使用したシンセシス、リズム生成の例は省略)



■■リファレンス

■mass

1次元のmass。
bangを受信すると、現在位置を計算してoutletに出力する。
慣性が存在する。(新たに入力された力と、過去の座標を元に算出)


引数:
1: 名前
2: 質量 (1)
3: 初期座標 (0)


inlet 1:
bang	座標を算出してoutletに出力
float	力を加える。入力がある度に加算される。
dX float	加速度を変化させずに変位を設定
setM float	質量を設定
setX float	座標を設定。加速度はリセットされる。新しい座標を出力する。
setXmin float	座標の下限を設定。
setXmax float	座標の上限を設定。
reset	座標を初期値に設定。加速度を0にする。
loadbang	初期化時に座標を出力する。


outlet 1	(float) 座標
outlet 2	(float) 加算された力
outlet 3	(float) 加速度


■link

二つのmassを結合する1次元の接続。
二つのinletに、それぞれ異なるmassの座標を入力する。
linkが作用した結果は、bang受信時に出力される。

引数:
1: 名前
2: L: linkの標準時の長さ (0)
3: K: 剛性係数 (0)
4: ダンピング (0)
5: ダンピング2 (0)


inlet 1:
bang	massの座標と速度に応じて力を出力
float	mass1の座標
setK (float)	剛性係数を設定
setL (float)	標準時の長さを設定
setLmin (float)	伸縮する長さの下限を設定(初期値: -100000)
setLmax (float)	伸縮する長さの上限を設定(初期値: 100000)
setD (float)	linkの粘性を設定
setD2 (float)	ダンピングを設定(両massの速度より影響)
reset	すべての内部パラメータを初期化
resetF	出力値がnullとなるように内部パラメータをリセット
resetL	伸縮状況に関わらず、現在の長さを標準の長さに設定する。

inlet 2:
float	mass2の座標

outlet 1	(float) mass1に作用する力
outlet 2	(float) mass2に作用する力

K, D, D2がすべて0のとき、出力される力はnullとなる。


■mass2D

二次元の座標を持つmass

引数:
1: 名前
2: 質量 (1)
3: 初期 X 座標 (0)
4: 初期 Y 座標 (0)
5: X 座標下限 (-100000)
6: X 座標上限 (100000)
7: Y 座標下限 (-100000)
8: Y 座標上限 (100000)
9: スレッショルド (0)


inlet 1:
bang	新しい座標を算出して出力
force2D float float	力を加える
setM float	質量を設定
setXY float float	座標を強制的に設定。加速度はリセットされる。新しい座標を出力
setX float	X座標を強制的に設定。加速度はリセットされる。新しい座標を出力
setY float	Y座標を強制的に設定。加速度はリセットされる。新しい座標を出力
setXmin float
setXmax float
setYmin float
setYmax float
setT float	スレッショルドを設定。シミュレートされた壁との間の摩擦係数に影響。(Xmin, Xmax, Ymin, Ymaxにお

いてのみ有効)
dXY float float	加速度を変更せずに変位を設定。
dX float
dY float
reset	座標、加速度をリセット。新しい座標を出力
resetF	力と変位をリセットする。座標は変更されない。
off	massの動作を止める。(bangには反応しないが、inletより力の入力は受け付ける)
on	massの動作を開始する。
interactor_...	Interactorの座標により作用をおよぼす。詳細は後述。
loadbang


outlet 1	(float float) massのX, Y座標
outlet 2	(float float float) massに作用するX, Y, グローバルの力
outlet 3	(float float float) massに作用するX, Y, グローバルの加速度

物理にシミュレーションにはoutlet1の情報のみ必要。他はコントロール用のパラメータに転用するなど、任意に使用。


■link2D

以下、未完…