DirectX 9版ソルバとDirectX 11版ソルバの違い

実は、このソフトボディ表現は、やや仕様を絞ってはいたが、PS3、Xbox 360版にも一部のステージに搭載されていた。Windows版のDirectX 9ランタイム版のソフトボディ表現は、丁度、このPS3、Xbox 360版と同等になっている。

PS3、Xbox 360版、DirectX 9版ソフトボディでも、ベルレ積分を使ったバネ物理シミュレーションを行うところまでは同じだが、Inner Springsの処理系は省略されている。

また、物理シミュレーションを1ステップずつ計算していくソルバの設計も、DirectX 9版ソフトボディではGauss-Seidal(GS:ガウスザイデル)法と呼ばれるソルバをピクセルシェーダーにて実装している。

ガウスザイデルソルバ

この手法では、3本のバネ拘束がつながっていて、全体的に伸びている状態だとすると、最初の一本のバネで、この両端の質点を動かして元の長さにする処理を行い、その結果を踏まえつつ、次のバネの質点処理に取りかかることになる。これは、いわば、計算の依存関係があることになり、並列処理には向かない。

そこで、PS3、Xbox 360版、DirectX 9版では、依存関係のないバネの接合の塊ごとにグループ分けして並列処理を行う工夫を行っている。これはバッチングと呼ばれるテクニックになり、PS3、Xbox360版、DirectX 9版ではこのバッチ数はリソース制約的な都合から8までに限定されている。

椰子の木のモデル

椰子の木に仕込まれたバネを、並列処理できるように8つのグループ分けを実践した

8つのグループ。これらは互いに依存関係がないため、同時にシミュレーション処理が施せる

動画
DirectX 9ランタイムのソフトボディ。木が倒れて、弾む枝葉の表現にソフトボディが使われている
(WMV形式 6秒 7.29MB)

対するDirectX 11版ランタイムでは、Inner Springsのバネのための処理系が増え、バッチ数が増加することが必然となるため、最大バッチ数の8に適合できない。そこでDircetCompute版のソルバを設計するにあたっては、並列性が高いヤコビ(Jacobi)ソルバを採用したという。

ヤコビソルバでは、一本ずつのバネの処理をする際に、そのバネの質点の位置を一度独立させた状態で計算を行い、後処理で統合する。この統合の際には、それぞれのバネ位置の平均値を次の状態の位置とする処理系を行う。

ヤコビソルバは計算の依存関係を回避出来るため、並列処理向きであり、さらに、依存関係を排除するためのバッチングの事前処理が不要という長所がある。ただし、依存関係を意図的に排除している副作用として、収束速度がガウスザイデルソルバよりも遅いという特性がある。

ヤコビソルバ

実際のDirectX 11ランタイムでのソフトボディを絡めたレンダリングパイプラインの流れをフロー図としたのが下図になる。スキニングなどの頂点シェーダ的な役割までをDirectComputeで行い、ベルレ積分をヤコビソルバで解き、DirectComputeでの計算結果をWave Particlesの時と同様の方法で頂点バッファへと変換し、グラフィックスパイプライへと流している。DirectX 9ランタイムでは、ソフトボディのシミュレーションはテクスチャ上で行われ、その結果は、頂点テクスチャリング(VTF:Vertex Texture Fetching)を活用して描画モデルに反映される。

Windows版ロストプラネット2におけるソフトボディ処理を行うヤコビソルバでは、頂点基準のリスト構造データでバネの接続構造が形成されており、隣接する頂点同士では、参照するバネが重複してて参照されることになる。こうしたデータを、ビデオメモリを読み出していっては処理が遅くなってしまうため、あらかじめ、DirectCopmute(ヤコビソルバ)で処理する単位のそうしたデータを、スレッド間で共有できる超高速な共有メモリにコピーしている。この共有メモリはDirectComputeの仕様として規定されているので、どのGPUのDirectComputeであっても利用が可能だ。共有メモリはGPUコア側のオンチップのメモリであり、レジスタファイル並に高速だ、一種のキャッシュとも言えるが、プログラム側があらかじめウォームアップするところが一般的なキャッシュシステムとの違いがある。

DirectX 11ランタイムでの処理の流れ

共有メモリの活用

なお、ソフトボディのシミュレーションは、描画する3Dモデルと、シミュレーションを行う3Dモデルとが一致していなくても良いように設計されており、シミュレーション3Dモデルの結果の描画3Dモデルへの反映は、重心座標系で計算している。

頂点バッファの更新

松宮氏は、このソフトボディ効果が分かりやすく見えるように、と、ボスキャラの全体の「柔らかさ」を強めにしたテスト映像を公開した。ぶるぶる感が過度に強調されているため、ソフトボディの効果が分かりやすくなっている。なお、製品版(リリース版)では、アーティストが、硬い部分と柔らかい部分が割れられており、より、実在の生物らしい質感へと調整がなされている。

動画
ソフトボディ効果を分かりやすく強調したテスト映像
(WMV形式 28秒 30.5MB)