Springhead2ちょっとだけ
リリースされているのは知っていたんだけど、なかなか触る時間がなかったSpringhead2をちょっとだけ触ってみる。
思ったよりも? ドキュメントがしっかりしていて、難なくビルド成功。 http://seven77.ddo.jp/~springhead/include/html/
Springhead2と他のエンジンの違いはこちら http://seven77.ddo.jp/~springhead/include/html/pageIntroduction.html#secIntroChar
Springheadは,拘束条件をLCPとして定式化してガウスサイデル法を用いて解析解を近似的に求めています.ここまでは,2006年現在,もっとも一般的な物理シミュレーション手法です.接触判定・解析については,形状を凸多面体で表現し,GJKによる衝突判定と法線計算し, QuickHull法を用いて接触解析で高速に接触領域を計算して接触力計算を行います.この部分は,同じ方法を使っているものは少ないかもしれません.
Springhead(Springhead2)は,他のシミュレータにたいして,
- Mesh(凸多面体)が扱える.
- 任意(かなり広範囲)のバネダンパを安定にシミュレーションできる.
-
OpenSourceでありながら,分かりやすいAPIがある. の特徴を持ちます.
QuickHullが判りやすいJava2D版はここにあります。 http://www.jaist.ac.jp/~t-nakada/Quickhull/
長谷川さんいわく、Springhead1のときはSPIDARと触覚が出発点だったので、エンジン設計としては「ペナルティ法+自由度削減法」という位置づけになっています。触覚レンダリングは常識的には1KHz以上(20KHzという例もある)の更新速度で走らなければならないといわれています、ペナルティ法であってもΔtが非常に小さい(μ秒カウンタもある)ので、100Hz程度までの力覚インタラクションという意味では大きな問題にはなりません(タクタイルまで含むと問題発言かもしれないけど)。
しかしゲームなどのグラフィックスに使う場合、Δtはその30-60Hzといった大きさになってしまいます。ペナルティ法はシンプルで高速ですが、Δt時間内のめりこみ量によって反発力を計算する誤差が大きすぎて「発散(爆発)」が起こってしまいます。また見た目にもめりこみが発生することがありますので(物質の堅さ等にもよる)、もっと大きな時間分解能に対して、また関節の多い形状に対して、安定した解を求める必要でてきたといことが、過去の研究からわかってきたようです。
というかここの問答は勉強になります。 http://springhead.info/wiki/index.php?%CA%AA%CD%FD%A5%B7%A5%DF%A5%E5%A5%EC%A1%BC%A5%BF%A4%CB%A4%C4%A4%A4%A4%C6%A4%CE%BC%C1%CC%E4%A4%C8%C5%FA%A4%A8
よくある、接触判定が床と物体だけで拘束条件がないBrick破壊デモだけではなんともいえないですね…。最終的には人体やロボット、ピタゴラ装置などで大きな差が出てくると思います。