データオブジェクト

データオブジェクトは、外部のデータファイルをもとに表示されるオブジェクトで、Zindaiji4のもっとも主要な機能でもあります。
ボリュームデータ、粒子系データ、高さマップ(未実装) のデータを、時系列データ(連番ファイルによるもの)を含めて読んで表示することができます。
データオブジェクト
|
ボリューム | 流体やガスのようなxyzのメッシュにきったデータを表示します。現時点では、スカラー量に対応していて、ベクトル場には対応していません。
|
等値面 | ボリュームデータを元に等値面を作成します。
|
粒子系 | 複数オブジェクトの位置データをパーティクルとして表示します。点、ビルボード、球として表示できます。
|
流線 | 線の集合体を表示します。
流線の表示を想定していますが、現在はベクトル場を元に流線を策しえするような機能はなく、与えられたxyz座標の間を線で結んだ表示をするのみです。
|
高さマップ | 画像を高さデータとして利用した高さマップを表示します。
|
ボリューム
ボリュームデータ表示のサンプル。モディファイアによって球座標への変換をして表示することもできます。
ボリュームボックス
ボリュームデータは、箱の中に表示をするためにボリュームボックスと名前がついています。
以下、主なボリュームボックスに設定です。
内部データについて
現時点で、内部のデータは1バイト(8ビット)で保存、つまり0-255の段階で保存されます。
0-1の値が必要な場合には、255で割って0-1に焼きなおして利用されます。
この内部データは、0-255の数値でしかないために、色は持っていません。表示の際の色は、カラーカーブを参照して色付けされていることに注意してください。
品質
ボリュームデータは、薄くスライスされた板の集合体として奥から順番に表示をすることでレンダリングされます。
品質パラメーターは、その間隔と枚数を制御します。数値が大きいほど品質はよくなりますが、表示時間のコストがかかります。
品質が低すぎる場合には、縞状の模様が発生します。
適切な数値は、通常は64-2048程度になります。
品質の低い表示の例(16と32の場合)
品質を上げるとごく薄いスライスを多量に表示することになりますが、あまり薄いスライスを多量に表示すると、バッファーのビット深度が足りなくなり品質が悪くなります。
2つ目のパラメーターで、各スライスごとのサンプル数を上げることができます。
2つ目のパラメータが 1 の時と 8 の時の差。(第一のパラメータは96)
第二パラメータを上げることで少ないスライス数で滑らかに表現することができます。
バイアスした表示
場合によっては、品質の高い表示は一部にしか必要がないことがあります。
薄いガスの雲の中央部のみに濃い領域がある、というようなデータの場合などです。
レンダリングを早くするために、重要じゃない部分でのスライスの数を少なくすることができます。
この機能は、重要な部分を除いた周囲のスライス数を減らします。
重要な部分の指定として、データの中心化、カメラに近い側、を選べます。
カメラに近い側を重要としてバイアスをかけた場合。カメラ側の隅のみが滑らかに表示されています。
ファクターは、1から4までを指定することができ、最大でどれだけスライスを減らすかを指定します。
4を指定したときは、最大で1/4までスライスを減らします。(1のときはスライスを減らす処理が無効になります。)
閾値の値で、どれだけの範囲を重要として残すかを決めます。値が小さいほど、狭い領域のみが残るようになります。
Zstack
1スナップショット分のボリュームデータは、1つのファイルか、もしくは複数の連番画像ファイルとして表現されます。
このチェックがついていると、連番画像でボリュームがあらわされているものとして読み込みを行います。
ファイルパス
現状では、連番の画像化もしくは .df3 ファイル、または OpenVDB ファイルを読むことができます。
openVDBファイルの読み込みはまだ実験的です。
指定した名前(デフォルトで"density"のグリッドを一つ)、アクティブなデータのみ読み込みます。
OpenVDB のサンプルファイル
df3 ファイルはボリュームをz-y-xの順のループで書き出した簡単なバイナリーファイルです。
ファイル名を指定するフォーマットは、c言語のprintf や scanf で使うフォーマットになっています。たとえば連番の.df3ファイルの場合には data%04d.df3 のような形になります。
data0000.df3
data0001.df3
data0002.df3
...
zスタックされた画像ファイルの場合には、z方向と時間方向の2つの連番で表現されることになります。たとえば、imgT%04dZ%04d.png のような形です。
imgT0000Z0000.png
imgT0000Z0001.png
.....
imgT0001Z0000.png
imgT0001Z0001.png
.....
現状、連番の順番は決まっていて編集できません。T方向、Z方向の順番になります。
offset
連番が0から始まらない場合には、オフセットをここで設定します。
自動スケーリング
最初はボリュームボックスのサイズは1x1x1に設定されています。立方体のデータでなければ、手動で調整をしなければなりません。
このボタンを押すと、データのアスペクト比が1であると仮定して、データの解像度のサイズから自動でボックスの大きさを設定します。
例えば、データのサイズが 256x128x64 の場合には, 箱のサイズは 1 x 0.5 x 0.25 に設定されます。
リロード
データを再読み込みします。表示しているデータがテスト中のデータで何度も上書きで更新される、というような状況で便利に使えるはずです。
エクスポート
DF3 ファイルか連番画像ファイルを出力できるようになりました。
これにより、連番画像からDF3ファイルを作成したり、その逆をしたりすることができます。
Zindaij4が読んだ各スナップのデータそのままか、もしくは表示のためにスナップ間で補間したデータのどちらかを選んで出力できます。
等値面
等値面の作成例。
等値面の位置やスケールは、元になるボリュームデータとは別々に扱われます。ボリュームと同じ位置やスケールで表示するときなどは、親子関係を利用できます。

等値面
等値面は、すでにあるボリュームデータを指定して、そのデータを元に等値面を作成します。
リンク
対象のボリュームデータを選択します。
しきい値
等値面の対象の閾値を設定します。
最適化
単純に作成した等値面は、頂点データの重複等の無駄が含まれます。最適化を行うことでデータ量を削減し、表示速度を高速化できますが、最適化そのものに時間が必要なため毎フレーム変化するようなデータでは却って遅くなる場合があります。
VBOを使う
作成した等値面の形状をVBO化し、グラフィックボード内のメモリに保持された状態とします。状況により表示速度は大きく改善しますが、VBO化そのものに時間が必要なため毎フレーム変化するようなデータでは却って遅くなる場合があります。
粒子系
粒子データの表示の例

Particle
粒子系は、1ステップもしくは時間進化するアイテムの集合体です。粒子の表示にはx,y,zの位置とサイズの情報が必要です。サイズが与えられない場合には1と仮定します。以下が粒子系のメインのパラメーターになります。
粒子の分類
タイプの違う粒子は、それぞれのマテリアル設定にしたがって表示を行えます。通常は粒子ごとに与えられるタイプのデータを用いて分類を行います。
このタイプ分けは、LUAスクリプトを使って置き換えることができます。たとえば、粒子インデックス256以下をタイプ0として、残りの粒子をタイプ1として表示するスクリプトは次のようになります。
if (index < 256) then return 0 end
return 1
|
テキストエディタが画面上に出ている状態で、編集ボタンを押すと、テキストエディタに分類用のスクリプトをリンクして編集することができます。
ソート
ソートを行わない場合は、粒子はそのインデックス順に描画が行われます。半透明などが関係しない場合には、描画の順番は結果に影響しません。
粒子が半透明である場合には、粒子は画面奥から手前に描画されなくてはなりません。なぜなら、手前の粒子による光線の変化を知るのに奥からくる光の情報が先になければならないからです。

もしソートが行われなければ粒子の前後による隠蔽関係が破綻することになります。
このオプションによって、粒子を描画する順番を設定できます。Z-方向やカメラからの距離以外の選択肢は、特殊な描画をする際に使います。
カメラの正面方向だけを表示する通常の表示では、近似的な距離の評価で充分なので、Z方向のソートを行います。魚眼など広範囲の表示をする場合には、多少計算時間が余分にかかりますが、カメラからの距離を使ってソートをします。
ソートの実行は時間のかかる重い処理です。「距離計算のみ」では、粒子のカメラからの距離を計算しますが、実際にはソートを行いません。ソートは必要ないけれどもカメラからの距離情報が必要なモディファイアを使うときに選択します。
ソート頻度
カメラの位置や向きがほんの僅かしか変化していない場合、多くの場合ソートの必要がありません。頻度を1よりも小さくすると、ソートを行う条件を緩め、実行速度が向上します。ただしあまり値を下げすぎると、表示が乱れます。
深度情報書込
通常のレンダリングのプロセスでは、デプスバッファ上に奥行き情報が書き込まれ、それを用いて次のポリゴンが描画されるべきか、もしくはすでに描画されたポリゴンによって隠されているべきかを判定します。
このチェックボックスが外れると、デプスバッファへの書き込みがスキップされます。特殊な描画をする際に使います。
ファイルパス
ここで設定するファイルは、連番ファイルの最初のファイル、もしくは直接連番ファイルの命名規則を入力します。
命名規則を入力する際は、C言語のprintfやscanf構文と同じ規則を使います。連番フィルの例としては、data%04d.txt のようになります。
data0000.txt
data0001.txt
data0002.txt...
オフセット
上記のように %0xd の形で入力した場合は、連番ファイルの先頭は 0 を仮定します。0以外からスタートするような連番ファイルの場合は、ここでオフセット値を入力します。
連番データ
チェックをはずすと、ファイル名が連番になっている場合でも、動きのない1つのスナップショットのみのデータとして読み込みます。
影を落とす
シャドウボリュームによる影の計算を行う際に、影を落とすかどうか個別に設定します。
向きをランダムに
ビルボードによる表示の際に、すべての粒子がそろった向きに整列しないように、表示の向きをランダムに回転させます。

リロード
データを再読み込みします。表示しているデータがテスト中の一時ファイルであり頻繁に変更される、といった場合に便利です。
マテリアル

粒子系のマテリアル設定は、他のオブジェクトのマテリアル設定とだいぶ異なります。一番大きな違いは、複数のマテリアルを設定できることです。
粒子がタイプ情報を持っている場合には、タイプ0の粒子は material.0 の、タイプ1の粒子はmaterial.1 の設定で描画がされます。
詳細は粒子系のマテリアルのページを参照してください。
フォーマット


データを読み込む際のファイルフォーマットはある程度までの設定を行うことができます。編集は プロパティパネル内のフォーマットタブで行います。
流線
流線表示のサンプル。
流線の表示を前提として、多数の線の表示を行います。
ただし、速度場などのデータから流線を作成する機能はなく、すでに用意された頂点座標のデータ間を結び、グラデーションのついた線などを引くことになります。
線のデータ構造は、粒子データのものと似ています。各頂点にオブジェクトを表示するのではなく、先頭の頂点から順に一筆書きのように線分をつないでゆきます。
各頂点ごとに線分用のインデックスを持ち、インデックスが-1の線分は表示しないことで一筆書きではない複数の線を表現できます。
このインデックスは、描画順には影響せず、線の中に別のインデックスの線分が混じっていてもかまいません。このインデックスは、線の間引きや隠蔽といった作業をする際に使います。
注意する点としては、インデックス-1による非表示処理に影響を受けるのは、直前の頂点との間を結ぶ線分になります。
頂点0(index=0)
頂点1(index=0)
頂点2(index=-1)
頂点3(index=1)
のような場合には、書かれる線は
頂点0-----頂点1--x--頂点2----頂点3
となります。
流線
ファイルパス/オフセット
データとして読み込むファイル名です。連番に関しての名前ルールなどはボリュームや粒子と同様です。
連番
連番になっているデータファイルのうちの1つのみ読み込むような場合にはチェックをはずします。
マテリアル

流線のマテリアル設定は、他のオブジェクトのマテリアル設定と異なる部分があります。
詳細は流線のマテリアルのページを参照してください。
フォーマット

現在2種類のアスキー(テキスト)データを読むことができるだけです。
x y z u (index)
x y z u value1 (index)
という順で各行に頂点情報が並んでいるデータです。
インデックスは省略できます。その場合は、0からスタートして、-1のインデックスの頂点があるたびに1ずつ増えるインデックスが適用されます。
高さマップ
高さマップは、画像データから色に応じた高さを持つオブジェクトを作成します。
もっとも一般的な用途としては、画像フォーマットに描かれた地形データが考えられます。
高さマップ
ファイルパス/オフセット
データとして読み込むファイル名です。連番画像についての名前ルールなどはボリュームや粒子と同様です。
画像ファイルは、png, jpg, tiff, tga, bmp の読み込みが行えます。
ダイナミックレンジの大きなデータに関しては16bit png の読み込みにのみ対応しています。16bit png に関しては 8 bit 画像として読み込むわけではなく、16 bit の情報を維持して高さマップを作成することができます。
連番画像
画像データの場合、連番画像ではなく個別の画像に対して img001.png img002.png といったような名前をつけることも多いかと思われますが、その場合は誤って連番画像データの一部と解釈してしまいます。
このチェックをはずすことで、連番の一部ではなく1枚のみの使用する画像だと指定することができます。
台座
台座を追加して、ふちと底面を持つ形状としてオブジェクトを作成します。

チャンネル
高さデータとしては1つの情報があればよいのですが、画像データの場合には複数のチャンネルを持つ場合(R, G, B, Alpha)があります。
高さとして使用するチャネルを (R, G, B, luminocity, norm)から選ぶことができます。
luminocityを得る計算式としては、公式 sqrt( 0.299*R^2 + 0.587*G^2 + 0.114*B^2 ) を採用しています。
オプション
上書き描画、影を落とす、のオプションは、基本形状などのオプションと同様です。
戻る