読者です 読者をやめる 読者になる 読者になる

論文読み: Solid Simulation with Oriented Particles (SIGGRAPH 2011)

論文 SIGGRAPH 2011 CG 開発 Unity

今回は古い論文の紹介です。

2年前にこの手法を実装したことがあるのですが、そのときにキャプチャした動画もいくつか紹介します。

Matthias Müller and Nuttapong Chentanez
Solid Simulation with Oriented Particles
SIGGRAPH 2011

研究概要

Position-Based Dynamics の上で動く、ロバストで高速な変形可能物体の物理シミュレーション手法「Oriented Particles 法」を提案しています。

これは Shape Matching 法と呼ばれる手法の拡張になっていて、従来は三次元的な構造(ソリッド)しか扱うことができなかったのに対して、布などの二次元的な構造(シェル)やひもなどの一次元的な構造(ロッド)など、様々な構造を統一的に扱うことができるようになった点が特徴的です。

f:id:yuki-koyama:20150130131454p:plain

Position-Based Dynamics については以下を参照してください。


実装してみた

2年ほど前、ちょうど私が情報処理推進機構の未踏IT人材発掘・育成事業でのプロジェクトで物理エンジンを開発していたころ、実際にこの Oriented Particles 法を実装したことがあります。

以下がそのときにキャプチャした動画です。いずれも当時の普通の MacBook Air でリアルタイムに計算しています。C++OpenGL を用いて実装しています。

三次元的な構造 (ソリッド)

Shape Matching 法と同様、ソリッドな構造をシミュレーションできます。パーティクルのサイズを小さく設定した場合には Shape Matching 法とほぼ同等の挙動となります。

二次元的な構造 (シェル)

布のシミュレーションをしています。非伸縮制約 (inextensibility) をいれていないため、引っ張るとよく伸びます。非伸縮制約を入れた場合は、これが伸びの挙動を主に決定して、Oriented Particles 法による制約が曲げの挙動を主に決定することになります。

一次元的な構造 (ロッド)

ひものシミュレーションをしています。伸びや曲げについては良い具合にシミュレートできていますが、ねじったときの複雑な挙動は再現することができません。

Unity に移植してみた

当時急速に人気になりつつあった Unity に移植してみました。外部ライブラリとしてではなく、C# で直接書いています。

Unity 上で物理エンジンを実装しようとして試行錯誤している最中に書いた記事はこちらです。

ちなみにこの Unity 移植版を元に別の手法の研究開発を行い、その後学術論文として発表したりしました。

Yuki Koyama and Takeo Igarashi
View-Dependent Control of Elastic Rod Simulation for 3D Character Animation
SCA '13
http://www-ui.is.s.u-tokyo.ac.jp/~koyama/project/ViewDependentRodSimulation/index.html

またこの成果を「こだわり物理エンジン」という名称でパッケージにまとめたものが以下になります。

Web ページ:こだわり物理エンジン

その他:最近の研究動向と私見

Oriented Particles 法は 2011 年の夏に発表された研究です。それから3年半も経っていますから、当然リアルタイム物理シミュレーションの動向もだいぶ変わってきています。

ソリッドな弾性体をシミュレーションしたい場合

基本的な選択肢としては Shape Matching 法か Oriented Particles 法の2択になりそうです。
Oriented Particles 法の方が

  • データ構造の拡張が必要
  • 計算がほんの少しだけ重い

という小さなデメリットがある反面、

  • 極端な変形に対してもロバストに動く
  • 各パーティクルが回転情報を保持しているため、スキニングの際に利用できる

といったメリットがあります。特にゲーム等での利用を考えると2個目のメリットは大きそうです。

また Position-Based Dynamics の拡張として以下のような研究もありますが、Oriented Particles 法に比べて巨大な行列を保持しておく必要があったり、実行時速度が不十分だったりします。

布をシミュレーションしたい場合

Oriented Particles 法は使うべきではないと思います。

Oriented Particles 法は3行3列の行列の特異値分解 (SVD) または極分解 (polar decomposition) をパーティクルの数だけ毎フレーム行う必要があります。それに対し、特異値分解を必要としないより高速な布の表現手法が多数存在します。

Tae-Yong Kim, Nuttapong Chentanez, Matthias Müller
Long Range Attachments - A Method to Simulate Inextensible Clothing in Computer Games
SCA '12

ひもをシミュレーションしたい場合

これも、Oriented Particles 法は使うべきではないと思います。

再び、Oriented Particles 法は特異値分解を必要とするため、効率的ではありません。それに対し、特異値分解を必要とせず、さらにねじりに対する非線形なひもの振る舞いをモデル化できている手法が最近提案されました。

Nobuyuki Umetani, Ryan Schmidt, Jos Stam
Position-based Elastic Rods
SCA '14

Oriented Particles 法が役に立つシナリオ

複合的な構造

ソリッド・シェル・ロッドが組み合わさっているような物体をシミュレーションするときには Oriented Particles 法は最もシンプルで良い解決法だと思います。例えばこの記事の冒頭で掲載した動画ではタコをシミュレーションしていますが、胴体はソリッド、足の部分はロッドのような構造になっています。Oriented Particles 法ではソリッドもロッドも特に区別せず統一的に扱うことができます。

メッシュを用意するのが難しい場合

Oriented Particles 法ではパーティクル同士が形成しているネットワーク (パーティクルを頂点とするグラフ構造) を対象にシミュレーションを走らせることができる点も利点の一つです。通常のシミュレーションではメッシュ (三角形メッシュや四面体メッシュ) を用意する必要があるのに対して、グラフ構造は生成が簡単です (例えば各パーティクルをある一定の距離以下に存在するパーティクルと接続すると簡単にグラフ構造を作れる)。メッシュを用意するのが大変な状況においても Oriented Particles 法は役に立つといえます。なおこのような考え方を ``mesh-less'' だとか ``mesh-free'' と表現したりするようです。