2011/9/30 Smalltalk勉強会 1
HoneyGinger:
粒子法流体シミュレーションを
オレオレ
Smalltalk
っぽく作ってみたら、
こんなんなりました。ツ
2011/9/30 Smalltalk勉強会 2
2011/9/30 Smalltalk勉強会 3
小田朋宏
● E-mail: tomohiro.tomo.oda@gmail.com
● twitter ID: @tomooda
2011/9/30 Smalltalk勉強会 4
Smalltalk遍歴
● 大学編
– 大学入学時に、Dolphinワークステーションを見かけた
2011/9/30 Smalltalk勉強会 5
(株)SRA編
– PARTS Workbench
– VisualSmalltalk Enterprise – VisualWorks
● じゅん
– Squeak/Pharo
● NaturalSmalltalk
2011/9/30 Smalltalk勉強会 6
2011/9/30 Smalltalk勉強会 7
表向きは
2011/9/30 Smalltalk勉強会 8
実は…
“This isn't magic - it's logic.”
2011/9/30 Smalltalk勉強会 9
Danger lies before you, while safey lies behind, Two of us wil help you, whichever you would ind,
One among us seven wil let you move ahead, Anoher wil ransport he drinker back insead,
Two among our number hold only netle-wine, hree of us are kilers, waiing hidden in line Choose, unless you wish o stay here forevermore To help you in your choice, we give you hese clues four:
First, however slyly he poison ries o hide You wil always ind some on netle wine's left side Second, diferent are hose who stand at eiher end But if you would move onward, neiher is your riend;
hird as you see clearly, al are diferent size Neiher dwarf nor giant hold deah in heir insides;
Fourh, he second left and he second on he right Are twins once you tase hem, hough diferent at irst sight.
2011/9/30 Smalltalk勉強会 10
● もちろんSmaltalkで解きましたとも!
2011/9/30 Smalltalk勉強会 11
2011/9/30 Smalltalk勉強会 12
SPH法
Smoothed Particle Hydrodynamics Method
なめろうした
つぶつぶの
にゅるにゅる流れとう
2011/9/30 Smalltalk勉強会 13
2011/9/30 Smalltalk勉強会 14
2011/9/30 Smalltalk勉強会 15
ナビエ・ストークス方程式
http://upload.wikimedia.org/math/8/b/8/8b86dfc3e7718c881e72c9067b7c54c4.png
● これが解ければ、本田△のシュートも読めるはず、
2011/9/30 Smalltalk勉強会 16
この方程式の一般解はミレニアム問題の1つ
19世紀に定式化されてから、
2011/9/30 Smalltalk勉強会 17
2011/9/30 Smalltalk勉強会 18
そこで
もっと粗い近似のストークス方程式
● 右側を計算すれば、時間巾ごとにその値を加速度にし
2011/9/30 Smalltalk勉強会 19
2011/9/30 Smalltalk勉強会 20
流体に方程式を適用するには
流体をどうモデル化するかが問題
● パーティクル法
2011/9/30 Smalltalk勉強会 21
パーティクル法
● 流体とはいえ、相手は粒子の集まりだ : 幾何的
2011/9/30 Smalltalk勉強会 22
メッシュ法
● 流体とはいえ、相手は区画の集まりだ : トポロジー的
例: VisualAgentsheet
2011/9/30 Smalltalk勉強会 23
SPHはパーティクル法の代表
2011/9/30 Smalltalk勉強会 24
2011/9/30 Smalltalk勉強会 25
粒同士の相互作用なんだから、
2011/9/30 Smalltalk勉強会 26
おまえとの距離はどれぐらいだから、 どれぐらいの力で押すのか、とか、
2011/9/30 Smalltalk勉強会 27
おまえとの距離はどれぐらいだから、
どれぐらいの力で引き摺られるのか、とか、
self viscosity * (self area + aParticle area)
2011/9/30 Smalltalk勉強会 28
2011/9/30 Smalltalk勉強会 29
力学の場合、「場」で記述するとうまい場合が多い
2011/9/30 Smalltalk勉強会 30
つまり、
「圧力」と「流れ」という
2つの「場」が粒の動きを決める
2011/9/30 Smalltalk勉強会 31
「圧力」は粒子の数
SPHSimulator>>countAt:kernel:
「流れ」は粒子の速度
SPHSimulator>>velocityAt:kernel:
どちらも、座標とカーネル関数が引数
2011/9/30 Smalltalk勉強会 32
2011/9/30 Smalltalk勉強会 33
2011/9/30 Smalltalk勉強会 34
カーネル関数というのは
2011/9/30 Smalltalk勉強会 35
2011/9/30 Smalltalk勉強会 36
ある座標点から半径r内の円の中にある粒子の数
で圧力を計算すると
圧力変化がガタゴトしてしまう
2011/9/30 Smalltalk勉強会 37
それじゃ偏微分を扱うのに困るし、
自然条件では普通は圧力は滑らかに変化する
2011/9/30 Smalltalk勉強会 38
だから、なだらか〜に変化するように、
k(d) = 0, if d >= r
となるような滑かな関数kを使って重み付けをする
k(d)
2011/9/30 Smalltalk勉強会 39
粒の位置のカーネル関数を重ね合わせると、
● ● ● ● ● ● ● ● ● http://www.actact.co.jp/swfu/d/s_kernelsmoothing.png
2011/9/30 Smalltalk勉強会 40
ってな感じで、こいつの右辺を計算します。
2011/9/30 Smalltalk勉強会 41
2011/9/30 Smalltalk勉強会 42
目標:
● バターを熱いナイフで「ストン」と切る
2011/9/30 Smalltalk勉強会 43
デザイン上の原則:
● シミュレーション ≠ 計算
● シミュレーション =
人間からの干渉 + 計算 + 人間への干渉
●
●
●
●
●
● 武器:
● 「じゅん」で鍛えた幾何計算!
– 干渉計算、空間分割、三角形分割…
● Morphicフレームワークの泥縄^H^H柔軟なUI構築!
そして…
● オブジェクト指向は計算モデルじゃないんだぜ、
2011/9/30 Smalltalk勉強会 45
道具:
● Pharo/Squeak
● ネットワークを介したユルユルな分散協調
⇒ 処理能力が必要になったら、
2011/9/30 Smalltalk勉強会 46
SPH法
Smoothed Particle Hydrodynamics Method
なめろうした
つぶつぶの
にゅるにゅる流れとう
2011/9/30 Smalltalk勉強会 47
2011/9/30 Smalltalk勉強会 48
● バターの塊はどうするのさ?
● ナイフはどうするのさ?
2011/9/30 Smalltalk勉強会 49
最近、SPHでも流体以外のものを扱うのが流行中
● ● ● ● ● ● ● ● ● ● http://www.youtube.com/watch?v=BP6C8-UZWzc
弾体
2011/9/30 Smalltalk勉強会 50
例えば、弾体(Elastic Body)
● HoneyGingerの場合、三角形パッチを形成して、
弾性のある物体を表現する
● 三角形の辺の距離を記憶しておいて、
2011/9/30 Smalltalk勉強会 51
2011/9/30 Smalltalk勉強会 52
例えば、剛体(Rigid Body)
● HoneyGingerの場合、
円とか三角形など、幾何的な形状を置いて、
2011/9/30 Smalltalk勉強会 53
SPHSimulator butterBall
SPHSimualtor butterBallAtDie
2011/9/30 Smalltalk勉強会 54
2011/9/30 Smalltalk勉強会 55
● お話しする人その1:
シミュレーションをつくる人
● お話しする人その2:
2011/9/30 Smalltalk勉強会 56
2011/9/30 Smalltalk勉強会 57
2011/9/30 Smalltalk勉強会 58
アクション:
● 弾体系
● 流体系(ニュートン粘性、ストークス)
● 熱力系(ニュートン冷却)
● 積分系(加速度→速度, 速度→位置)
● 環境系(空間定義、局所アクション、発火条件付アクション)
● 通信系(状態データの同期)
2011/9/30 Smalltalk勉強会 59
これを適当な順番に並べると、
好きな法則の組み合わせでシミュレーションでき
2011/9/30 Smalltalk勉強会 60
ほんとうはこれで
2011/9/30 Smalltalk勉強会 61
つ
ぎ
に、
2011/9/30 Smalltalk勉強会 62
2011/9/30 Smalltalk勉強会 63
● 粒を見せる(その1)
2011/9/30 Smalltalk勉強会 64
● 粒を見せる(その2)
2011/9/30 Smalltalk勉強会 65
● 場を見せる(その1)
● 定点上の「流速」を見せる
2011/9/30 Smalltalk勉強会 66
● 場を見せる(その2)
● 格子上の「流速」を見せる
2011/9/30 Smalltalk勉強会 67
● 流体を見せる
● 点を頂点にしたドロネー三角形分割
2011/9/30 Smalltalk勉強会 68
● 三角形分割のようす
SPHSimulator impossibleRiverWireframe
2011/9/30 Smalltalk勉強会 69
ドロネー三角形分割
● できるだけ「尖った」三角形をつくらないように三角形に分割する
2011/9/30 Smalltalk勉強会 70
● 弾体、剛体を見せる
● 弾体、剛体をシミュレートする「アクション」が描画する
SPHSimulator rockAtDie
2011/9/30 Smalltalk勉強会 71
● 流れを感じさせる
● ニセHandMorphを流体に流させる
SPHSimulator mouseInCreek2
2011/9/30 Smalltalk勉強会 72
2011/9/30 Smalltalk勉強会 73
● 特定の粒をつかむ/投げる
● SPHParticleHand
2011/9/30 Smalltalk勉強会 74
● 周辺の粒をつかむ/投げる
● SPHParticleGripper
2011/9/30 Smalltalk勉強会 75
● マウスカーソル自体を粒にする
● SPHFakeHand
2011/9/30 Smalltalk勉強会 76
2011/9/30 Smalltalk勉強会 77
2011/9/30 Smalltalk勉強会 79
シミュレーション =
2011/9/30 Smalltalk勉強会 80
シミュレーション計算
● デスクトップとかサーバとか
人間との対話
2011/9/30 Smalltalk勉強会 81
2011/9/30 Smalltalk勉強会 82
2011/9/30 Smalltalk勉強会 83
共有レポジトリとのデータ同期を介した
ゆる〜〜〜〜い
2011/9/30 Smalltalk勉強会 84
MapReduceみたいに
2011/9/30 Smalltalk勉強会 85
動的で
自分ができることを
2011/9/30 Smalltalk勉強会 86
記憶(レポジトリ)
● HoneyGingerサーバ
計算(シミュレータ)
● SPHSimulator (アクションの組み合わせ)
人間とのメッセージング
2011/9/30 Smalltalk勉強会 87
(HoneyGingerServer port: 9800) startup. SPHSimulator bouncingBallsServer.
2011/9/30 Smalltalk勉強会 88
● 流体シミュレーション
● 計算速度とかより柔軟性です
● 計算だけじゃなくインタラクションも大事なんです
“This isn't magic - it's logic.”
“Simulation isn't computation – it's interaction!”
オブジェクト指向は計算モデルじゃないんだぜ、
今後の課題
● 計算を分散
● アクションの組み立てUI
今後の課題
● 計算を分散
– 更新の同期
● できるだけ非同期にやりたいなあ…
今後の課題
● アクションの組み立てUI
– タイル的なやつとか
今後の課題
● もっとSmalltalk臭く!
– もっとインタラクティブに
– さらにインタラクティブに