Zindaiji 3

English

Zindaiji 3 は、天文学におけるN体計算などに代表される、大規模な粒子シミュレーションを可視化するためのアプリケーションです。 Zindaijiという名前は、国立天文台付近の地名にちなんでつけられています。 Zindaiji 3 の目標は…

となっています。現在、目標1へ向かった開発を進めています。^ ^);

Zindaijiシリーズの特徴

旧版と比べて強化点としては次のようなものがあります、もしくはそうなる予定です。

Zindaiji3はOpenGLとそのシェーダー機能を利用しています。速いグラフィックボードの付いたPCでの利用が推奨です。OpenGLのバージョンが1.5より以前の古いものだと機能しないと思われます。

更新履歴

2012/01/15 ver0.30 公開
2012/01/19 ver0.32 公開
2012/01/31 ver0.35 公開
2012/02/13 ver0.37 公開

2012/02/27 ver0.40 公開
2012/03/17 ver0.42 公開
2012/04/04 ver0.45 公開
2012/04/22 ver0.47 公開

2012/04/24 ver0.48 公開
2012/05/15 ver0.50 公開


ダウンロード

バージョン 0.50

Zindaiji3Win050.zip
Zindaiji3Linux050.zip
Zindaiji3MacOSX050.zip

バージョン 0.50 ソース

Zindaiji3SRC050.zip

インストール

圧縮ファイルを解凍して、全体を好きな場所に置きます。設定ファイルなどが実行ファイルの場所に書き込まれるので、自分が書き込みパーミッションの無い場所などには置かないでください。また、日本語や空白のあるパスは思わぬエラーの原因になる可能性があるので、避けてください。
レジストリーは弄らないので、削除するだけでアンインストールできます。

Linux版はwxWidget-gtkのインストールが必要です。wxWidet-gtkはUbuntu環境ではsynapticからインストールできます。

Mac OS X 版は、現在32bit対応しかしていません。また、Mac OS X 版は、./Zindaiji3Mac.app/Contents/MacOS/Zindaiji3Mac をターミナルから実行する必要があります。まだMac初心者なので、ダブルクリックで実行できるようにする方法わからない…、というか本当に他人の環境で動くか分かっていないという。
どうやら wxWidgets2.9にしないと Mac OS X 64bit に対応しないらしいので、そのうちアップグレードしないと…

開発初期段階につき、多くのバグが予想されます。そうした際にはブログなどで連絡ください。症状の再現性などがよければ改善できるかと思います。

プレビュー画面

操作

デフォルトで一番大きいパネルがプレビューパネルになっていて、可視化された画面を表示する場所になっています。最初の状態ではグリッドとカメラと光源、そしてピボット(回転の中心、青い十字)が表示されます。

視点の移動の基本は、ピボットを中心とした回転(trackball)になっていて、マウスの左ボタンに割り当てられています。

ズームは、マウスの中ボタンとマウスホィールに割り当てられています。 また、中ボタンがないマウスのために、Alt+マウス左ボタンが、マウスの中ボタンと同等の操作になるようになっています。

画面のパン(横移動)は、Shift+Ctrl+マウス左ボタンが割り当てられています。画面をパンすると、同時に回転の中心(ピボット)も動くことに注意してください。

パンすると、ピボットも動く。

アイテムの移動

プレビュー画面内で、アイテム(カメラと光源)を掴んで動かすことができます。
デフォルトでは、Shift+右マウスボタンで、アイテムを選択することができます。選択したアイテムは、Shift+左マウスボタンに割り振られています。
画面左下に、平行移動、回転、拡大縮小のボタンが用意されていますが、現時点では平行移動のみ実装されています。

アイテムが選択されているときには、ガイドの矢印が表示されます。Shift+左ボタンでそれらをドラッグすることで、X軸、Y軸、Z軸にそっての移動ができます。何もないところでドラッグをすると、視線と直行した面内での操作になります。



マウス操作は、設定ダイヤログを使って変更することができます。

視点

左上のプルダウンメニューで、視点の選択ができます。"Free"が上の操作法で自由に視点を操作できるモードです。 "Cam0"はカメラパスに従うモードで、時間を進めた時などに、自動的にカメラパスに従って視点が動きます。
その他の視点は、座標軸に沿った正投影の表示になります。

これらの視点は、ショートカットキーの0(Free) 及びに、1,3,7 と ctrl-1, ctrl-3, ctrl-7 に割り当てられています。


メインメニュー

ファイル

プロジェクトファイルの読み込み/保存をおこないます。プロジェクトファイルの拡張子は、.zjpなります。

データ読み込みダイヤログを開きます。

画面上に表示されている画像を保存します。複数のパネルが表示されているときには、左上の画像が保存されます。連番画像保存では。連番画像保存設定ダイヤログを開きます。

スナップショットの保存は、パネルに表示されている画面をキャプチャして保存をするので、画像のサイズは自動的に設定されます。 任意のサイズの画像(4096x4096まで)を保存するときは、連番画像保存設定ダイヤログを使ってください。

粒子データなどをエクスポートすることができます。現時点では粒子データのみをエクスポートします。この機能によって、アスキーデータから(読み込みなどの速い)バイナリーデータへの変換などをすることができます

粒子データのエクスポート時のフォーマット編集は、粒子データ出力ダイヤログで行います。

シーンを閉じます。

Zindaiji3を終了します。

エディット

アンドゥ、リドゥを行います。

現在の時間フレームをダイアログを使って数値で入力します。

現在の時間フレームは、タイムラインエディタにある入力窓からも変更できます。

メモリ上に展開されたデータの開放をします。

シーンの長さなどを設定するシーン設定ダイヤログを開きます。

マウス操作などの設定をする設定ダイヤログを開きます。

表示

プレビューパネルを最大4つまで表示します。


ダイアログ

ビューとカメラの設定ダイヤログを表示します。

光源設定ダイヤログを表示します。

カラーカーブエディターを表示します。


可視化のパラメータ

アトリビュート

このパネルは、それぞれの粒子の描画パラメーターを設定します。Attrib0-3は、粒子のType0-3にそれぞれ対応します。Zindaijiは4種類までの粒子を設定することができます。

Zindaijiは粒子を次のような手法で描画します。

板というのは、半透明のポリゴンの板をカメラの方向をむいて表示させるもので、ポリゴンにはガスの雲のようなテクスチャーが張ってあります。 多数の粒子を半透明な板として表示することで、擬似的に連続的なガスの表現もすることができるので、SPHシミュレーションなどの可視化に向いています。

品質のパラメータを変更すると、球で表示する際のポリゴン数が変わります。

アルファブレンドは、半透明な粒子を表示するときに、背後の色を(透明度に応じて)隠す描画法です。ガス雲が背後の星の光を隠すような表現に向いています。

加算モードは、粒子を描画するたびにその色をキャンバス上に加算するというもので、単純に密度を加算して表示するような場合や、星のような光り輝く粒子を表現するのに向いています。

また、右側のコンボボックスでは、レンダリング時に使用するシェーダーを変更できます。
「オリジナル」は、デフォルトのOpenGLのレンダリングを利用します。ハイライトの位置が近似的に計算されるので、魚眼レンダリングのときなどには破綻が生じます。

「グーロー」シェーディングは、オリジナルのレンダリングに似ていますが、多少違いがあります。ポリゴンの各頂点ごとに色を計算するので、ポリゴンの境界で星のような模様が見えることがあります。
「フォン」シェーディングでは、各ピクセルごとに色を計算するために、そうしたポリゴンの境界は目立たなくなります。


「トゥーン」シェーダーは、輪郭線付のイラスト的なレンダリングを行います。まだ実験的な実装なので、カラーカーブを用いない単色の表示にのみ対応しています。


粒子の持つ半径データを用いて球または板の表示をするか、それとは無関係にある大きさ(1)で表示をするかを設定します。この値に対して、さらに半径の調整で設定した値が掛け合わされた大きさで表示を行います。

アルファ値は、粒子の不透明度を決めます(0が完全に透明)。 固定値に設定すると、全ての粒子が"アルファの調整"で決めた値に設定されます。

もし"半径依存(逆2乗)"にすると、半径に依存したアルファ値になります。
これはSPHシミュレーションの可視化に向いています。なぜなら、SPH粒子の密度は R-3に比例し、一方光線が粒子を通過する際の距離は R に比例するために、光の吸収量や発光の量は、一次的には R-2 に比例するためです。 この場合は、不透明度は Max[Amax, (R/Rbase)2], として描画しています。ここで、Rbase と Amax の値は、基準/最大値の行で設定する値になります。

粒子の色 (板と点)を設定します。 ボタン左にあるグラフのアイコンをクリックすると、固定カラーとカラーカーブモードを変更します。 ボタンを押すと、固定カラーの選択ダイヤログかカラーカーブエディターが表示され、そこでカラーカーブの編集をすることができます。

粒子の色 (球)を設定します。 3つの色はそれぞれ環境(ambient)、散乱(diffuse)、反射(specular)に対応します。 光源の反対側で本来光の当たらない部分でも環境光の色で表示されることになります。(光が周辺で散乱して回り込んでいるという扱いになります。) 光源側では、さらに角度に応じて散乱色と反射色が環境色に足しあわされて表示されることになります。

これらの色もカラーカーブエディターで編集をすることができます。

表示オプション

このパネルでは表示の品質と速度のバランスに関係するパラメータを設定します。

粒子を間引いて表示します。間引いた分は、残りの粒子の半径や不透明度が大きくなるように表示し、見た目の印象が大きくは変わらないようにしてあります。

半透明の粒子を表示するときには、奥の物体の色に応じて手前の物体の見え方が変わるために、奥から手前に向かって順番に表示をしなければなりません。そのための計算を行うかどうかを設定します。

半透明を使わないとき、完全に加算のみを使って表示をする場合にはZソートをする必要がないので、高速化ができます。

数種類の粒子が混在している場合、OpenGLの描画のステータスを粒子ごとに更新するのにかなりの時間がかかります。
粒子の分類を、"粒子種0として表示", に設定すると全ての粒子を粒子種0として表示して、描画ステータスの更新のかなりの部分を省略して、描画を高速化することができます。特に粒子の種類分けがない場合には、"粒子種0として表示"を選択するようにしてください。

シャドウボリューム法を使って、影を計算することができます。球を表示している場合のみ有効です。
影を有効にすることによって、現実感を大きく向上させることができますが、レンダリングスピードはかなり遅くなります。

レンダリングスピードは、影領域を計算するのに使うポリゴンの数とその面積に大きく依存します。

長さパラメータを小さくすることでレンダリング速度を上げられますが、見たい構造のスケールよりも短くすると影が正しく表示されなくなります。
「影ポリゴンを表示」モードにすることで、影の計算用のポリゴンを明示的に表示することができるので、パラメータの調整を見ながら行うことができます。

個別の光源に関して影のオン/オフを設定するには、光源設定ダイヤログを使用します。

これらのパラメータで、影の計算用のポリゴンの品質と長さを設定できます。
レンダリング時間の観点から、長さのパラメータは表示が破綻しない限り小さい数にするべきです。

オーバーレイ表示

時間や、カラーカーブの情報をプレビュー画面上に表示することができます。表示の位置は、コンボボックスから選べます。 その右の4つのチェックボックスは、4種類のアトリビュートに対応しています。

カラーカーブの透明度は、市松模様の背景を使って表現されます。カラーカーブの背景は、黒単色を選ぶこともできます。("アルファ値を表示しない" を選択します)

また、カラーカーブ上の目盛表示も On/Off ができます。

*既知の問題* 目盛上の数字がはみ出して見えなくなる場合があるので、表示部分の修正の必要があります。

露光

Zindaiji3 は、16bit FBO を利用して描画をしているので、メモリー内ではモニター上に表示されている8bit画像よりも多くの情報を持っています。レベル補正とガンマ補正のパラメータによって、元の16bit画像をどのように8bit画像にマッピングするかを調整できます。
現時点では、画像保存時は8bit画像の保存のみが実装されています。

また、色相と彩度もこのパネル内で調整が行なえます。

カメラパス設定

ビューとカメラの設定

ビューの設定の中のTranslateとRotateは、プレビュー画面で今見ているビューの位置と、方向のオイラー角を示しています。
一方、カメラパス設定の中のTranslateとRotateは、カメラワーク中の現在のカメラの位置と角度を示しています。

カメラワークのカメラは、タイムラインエディタ上で設定をすることができます。また、プレビューの設定をCam0にすると、ビューの位置が自動的にカメラワークの設定を追随するようになります。

"Look Anchor" のチェックをすると、カメラは自動的にアンカーの方向を向くようになります。アンカーは初期には原点に配置されています。 このモードは、シミュレーション中の移動する現象を追いかけたいというような時に効果を発揮します。
ただし、アンカーの移動は手で調整しなければなりません。あらかじめ解析して得た位置をテキストファイルとして読み込む機能をつけるのはよい考えなので、いずれ実装します。


カメラワークの編集

左下の2つのボタンが、カメラワークの編集に重要な役目をもっています。
"Set Key [Pos]" のボタンを押すと、現在のプレビュー画面のビューの位置にキーフレームを設定します。 多くの場合、画面上でよい構図を探しながら、このボタンを使って適当な間隔キーフレームを配置することで、カメラワークの設定をすることができます。

"Set Key [Anc]" ボタンではアンカーに対して、現在の"pivot"の位置でキーフレームを打ちます。

タイムラインエディタ

スライダー

タイムライン上の赤い線が現在の時間フレームを表します。スライダーを使って時間フレームとワーキングエリアの範囲を設定できます。
メインのスライダーの左側のテキスト入力窓で、数字入力で変更することもできます。

緑色の箱は、既にメモリ上にデータが読み込まれているフレームを表します。

キーフレーム

時間依存するパラメータは、タイムライエディタで編集します。 キーフレームをタイムライン上に打つことで、その間の値は自動的に補間されます。

キーの挿入と除去は、右クリックメニュー、または画面左のチェックボックスによって行うことができます。

位置など多次元のパラメータは、x,y,zの3成分に対してバラバラにキーフレームを打って編集することができます。
バラバラに編集をするときには "リンク" ボタン を押してリンクモードを解除してください。

また、キー上でのダブルクリック、または右クリックメニューから呼び出すことのできるダイヤログによって、数値的にキーフレームの値を編集することができます。

補間のタイプについては、現在次のモードが実装されています。

STEP, LINEAR, HERMITE(AUTO), and HERMITE(SEMIAUTO).

HERMITE(AUTO) モードでは、キーフレーム間は3次関数で補間されます。キーフレームでの速度は、前後のキーフレームから自動的に計算されます。
HERMITE(SEMIAUTO) モードでは、「Ease」パラメータを設定できます、この値はそのキーフレームでの速度に掛け合わされます。
0に設定された時には、徐々に速度を落としながらその値に近づいてゆき、キーフレーム上でちょうど速度0になあります。
この機能によって、「イーズイン」「イーズアウト」といわれる動きの演出を行うことができます。

アニメーション


画面下のボタンによって時間をコントロールできます。
再生ボタンなどはテキストで書かれたボタンですが、見ただけでおおよその機能は想像できると思います。(いずれ、再生ボタンを三角形の画像で置き換えるなどします)

間隔の数値は、再生時にスキップするフレーム数を設定します。
たとえば間隔2の場合は 0, 2, 4, 6, .... のフレームを表示します。
これらは、重いデータの編集時などに効果を発揮するはずです。

また、補間数は再生時にフレーム間を何コマで補間するかを設定します。たとえば補間数5で全10タイムステップのデータから連番画像を作ると、全部で50枚の画像が出力されることになります。
タイムステップ間の補間は、データ読み込み時に
データ読み込みダイヤログで設定したルールに従って行われます。

プリフェッチの数値で、事前読み込みの範囲を設定します。 例えばこの値を3にすると、現在のフレームから3ステップ分だけ事前にデータの読み込みを行います。
この事前読み込みは、描画とは別のスレッドを使って行うために、僅かしかパフォーマンスを落としません。そのため、適切に設定したプリフェッチ機能によって、編集時やレンダリング時の待ち時間を大幅に減らすことができます。