粒子シミュレーション可視化ツール Zindaiji3開発の進展状況 武田隆顕@cfca
シミュレーションデータ可視化の2つの目的 自分の研究データを素早く見るための可視化 (同じ分野の専門家に見せるための可視化) レスポンスを速く 物理量を見やすくするため派手な色合い 演出は考えない 一般の人に理解して(興味をもって)もらう可視化 きれいで格好よく 後者に重きを置いた 一般公開用の映像作成
粒子(N体)データ用可視化ツール開発 自分の理想は… 普段は研究用の可視化ツール いざというときは華麗なレンダリング 普段隠れている設定を開いて調整 いざというときは華麗なレンダリング ■初代Zindaiji 扱える粒子数は~200万体 ■32bitアプリケーションの限界が見えてきた
Zindaiji3の開発 ■より大規模なデータの可視化用に新規開発 ■PC1台でいけるだけ 大規模なデータ可視化
ZINDAIJI 3 の機能向上点 ■64bit化でメモリの制限が大幅に緩和 2億5千万粒子(約100倍の強化) ■描画アルゴリズムの改善 同じ条件で大体倍の速度 ■待ち時間の大幅削減 マルチスレッド化 ■GUIの大幅改善 ■マルチプラットフォーム Windowx/Linux/MacOSX
Zindaiji3における描画アルゴリズム改善 設定(色や透明度) 設定(色や透明度) 設定(色や透明度) 粒子の位置情報 粒子の位置情報 位置情報をメモリ上でまとめる 描画 描画 まとめて描画 設定(色や透明度) 粒子の位置情報 粒子の位置情報 描画 描画 粒子の位置情報 設定(色や透明度) 描画 粒子の位置情報 描画 ■状況に応じた場合分けで 描画の高速化
GUI大幅改定 ■カメラワークなどの タイムラインによる編集 ■UNDO機能の充実(行った操作をスタック) Ctrl+Y Ctrl+Z キーフレームを作成 キーフレームを移動 値をOldからNewに変更 オブジェクトを作成 キーフレームを(逆に)移動 値をNewからOldに変更 オブジェクトを削除 キーフレームを削除 Ctrl+Z
待ち時間の大幅削減 シングルスレッドによる可視化 マルチスレッドでの可視化 TIME 読み込み 補間 描画 画像出力 読み込み 画像出力 事前読込 補間 描画 画像出力 事前読込 補間 描画 画像出力 事前読込 補間 描画
■主な描画手法 速 ■光点としての描画 ■ガス雲(SPH粒子)の描画 ■大きさを持った球の描画 遅 星団の運動など。ソートの必要が無い 手前のガスによる隠蔽があるためソートが必要 点より大きいので点と比べると遅い ■大きさを持った球の描画 デブリディスクや(単分子の)分子動力学など ポリゴン数が多くなる。 遅
■光点としての描画 ■最速はpixelサイズの点を描画するGL_POINTS命令 ただし、距離によって 見かけの密度が変化 図の引用 : マイクロソフト アカデミック ポータル: DirectX によるゲームプログラミング入門 : 第 6 章 実践ゲーム開発 結局カメラ方向を向いた 板(ビルボード)による描画を行う
■光点としての描画 ■石山さんの宇宙論的N体(のもっとも大きいハロー1つ分) 2億5千万粒子の時間進化データ メモリ使用量 x,y,zの情報を単精度で持つと 1億体で1.2GB使用 vx,vy,vz,ID,r,等含め2.5億で 12GBほど。 2ステップ分の情報と補間済 情報で~30GB使用 メモリを64GB積んだ PCでどうにか扱える 描画速度については 後半で取り扱う。
■星やガス雲(SPH)の描画 ソートして奥から描画 背後にあるものは隠れる 密度∝r-3 通過距離∝rなので 不透明度r∝r-2で描画 ビルボード表示 ソートして奥から描画 背後にあるものは隠れる 密度∝r-3 通過距離∝rなので 不透明度r∝r-2で描画 r=1 r=2 r=3
■星やガス雲(SPH)の描画 ■松井秀徳さんの 100万体強の銀河衝突データ(Binary)から作成 読み込みや画像圧縮を 並列処理 8コア中の25~35%程度 (2~3コア相当)を使用
■球としての描画 (田中秀和さん(北大低温研)による分子動力学によるダスト衝突) ■600万体のデータ(亀裂が走る様子) 読み込みや画像圧縮を 並列処理 8コア中の~50%程度 (~4コア相当)を使用
■表現力の向上 ■影の実装 ■影(シャドウボリューム)
シャドウボリューム法(1) ステンシルシャドウ法 影のポリゴンを使って、影の落ちるべき領域を判定して、 色違いでもう一度描画
+1 -1 -1 シャドウボリューム法(2) (1)透明な影ポリゴンを描画する。 ポリゴンを描画したところには +1 をマークする (2) 同じように裏面だけ描画する 描画したところには -1 をマークする -1 (3)プラスで残った場所が影になるので、 光の当たらない色で再度描画する。
■表現力の向上 ■影の有無による比較 ■初代Zindaijiでは光源1つ、影1つだけ実装していたが 7つまでの光源と影を同時に扱えるように
■表現力の向上 ■シェーダー言語の利用 左)通常の描画は ポリゴン頂点ごとに計算する。 (星状の切れ目が見える) といった表現も可能に Toonシェーディング 色の計算を、各ピクセル ごとに行う。 といった表現も可能に Phongシェーディング より少ないポリゴン数で綺麗に表示できる
■レスポンス速度向上 ■SPH表示時の間引き GUI操作の応答時間は ~0.1秒以内が望ましい 間引き表示時にそれを 補うように濃く表示 オリジナル 1/10 1/100
レンダリングの種類と描画時間(1) ■一秒当たりの 描画粒子数目安 描画タイプ GT240 GTX560 粒子数目安 GL_POINTS 2010年ごろ補助電源無し の中で速いやつ(推奨300W) 2011年ごろ補助電源あり 6pin x 2で速いやつ(推奨500W) 描画タイプ GT240 GTX560 粒子数目安 GL_POINTS 4千万 1億 ~10億 ビルボード 2000万 4000万 ~4億 SPH粒子と星 200万 ~2000万 球による表示 300万 ~3000万 影つきの表示 10万 ~100万 複数の影 5万 ~50万 注)シーンによって、 数値は相当変動します
レンダリングの種類と描画時間(2) ■粒子数の目安 10秒で1枚レンダリングできると、 一時間で360枚、一晩(10時間)で3600枚 = 2分 1/100に間引くと1/10秒でレスポンスするので許容範囲 描画タイプ GT240 GTX560 粒子数目安 GL_POINTS 4千万 1億 ~10億 ビルボード 2000万 4000万 ~4億 SPH粒子と星 200万 ~2000万 球による表示 300万 ~3000万 影つきの表示 10万 ~100万 複数の影 5万 ~50万 星等の集団は ~数億程度
レンダリングの種類と描画時間(3) SPHの場合は ~数千万程度 影も入れた デブリなどは ~100万程度 描画タイプ GT240 GTX560 粒子数目安 GL_POINTS 4千万 1億 ~10億 ビルボード 2000万 4000万 ~4億 SPH粒子と星 200万 ~2000万 球による表示 300万 ~3000万 影つきの表示 10万 ~100万 複数の影 5万 ~50万 SPHの場合は ~数千万程度 影も入れた デブリなどは ~100万程度
その他追加機能 ■ブーリアン演算 ■ある領域(四角や球) の粒子の表示をON/OFF 断面図の作成 (クラスターの結晶化)
現時点でさらにつけたい機能 ■タイムリマップ機能 シーンの時間とシミュレーションの時間を別に制御 (最初に初期状態を回して、 その後シミュレーションを時間を進め、 最後に静止したシミュレーションの中を移動…など) ■テクスチャーの利用 ■図表用に、座標の表示などの強化 ■Windows/Linux/Mac(但しMac版は32bit) http://th.nao.ac.jp/~takedatk/COMPUTER/ZINDAIJI3/Zindaiji3Top.html