
PDF PDF版 [645KB]
ボリュームレンダリングで可視化を行おう
AVS Technical Report -Volume9,Number3 June,2004-
Contents
1. はじめに
流体解析などのシミュレーションのデータや、医療・工業でのCTスキャンのデータなどにボクセル形式のデータであるボリュームデータが広く使われています。
そのボリュームデータに対して、有効な可視化手法の一つにボリュームレンダリングがあります。
ポリゴン(形状)で表現を行う等値面や断面など可視化手法とは違い、ノードデータに直接、色情報と透明度をマッピングします。
そのためボリュームレンダリングは、データの全領域、全てのデータ値を表現するような可視化について、特に優れた効果を発揮します。
等値面のようなある1つの値について注目するのでも無く、断面表示のようにある領域を取り出して表示を行うのでも無く、全てのデータについて可視化を行えることがボリュームレンダリングの魅力です。
今回は「volume_render」を利用して、ボリュームレンダリングを行う方法を紹介します。
2. 「volume_render」の機能
volume_renderはフィールドデータを読み込み、ボリュームレンダリングを行うモジュールです。読み込みフィールドデータには次の条件がありますので、注意して下さい。
- 格子次元数が3(Dims 3)のUniform型のフィールドデータであること。
- スカラーデータ(veclen 1)であること。
- データ型がbyte型かshort型であること。
volume_renderは[Main]ライブラリの[Mappers]カテゴリ内にあります。
図1 volume_renderモジュール
2-1. 入力ポート
左側のポートから順にポートを紹介します。
| in_mesh (Mesh_Unif+Node_Data) | 上記の条件を満たした、ボリュームレンダリングを行うデータを入力します。 |
2-2. 出力ポート
| out_obj (DefaultObject) | ボリュームレンダリングの結果を出力します。 |
2-3. volume_renderパネル
図2がvolume_renderのコントロールパネルです。
実際のパラメーターの設定方法については、操作を紹介する際に合わせて説明します。
| Modes | |
|---|---|
| Surface: | サーフェースレンダリングの手法を指定します。 |
| Volume: | ボリュームレンダリングの手法を指定します。Volumeではソフト的に計算を行う方法と、OpenGLのグラフィックボードを使用する方法を選択することが可能です。手法の違いについては3トピックスで説明します。 |
| Properties | |
| Interpolation: | データ値の補完方法を指定します。 |
| Ray Algorithm: | ボリュームレンダリングの計算方法指定します。(今回はDirect Compositeで計算を行います) |
| Distance Normalize: | Ray AlgorithmがDistance Maxの際に使用します。 |
| Fat Ray: | 処理を高速化するため、ピクセルの粗いレンダリングを行います。 |
| SFP Absorption: SFP Emission: |
Ray AlgorithmがSFPの際に使用します。 |
| Datamap | |
| Datamap Minimum: | データマップの最大値を指定。 |
| Datamap Maximum: | データマップの最小値の指定。 |
| Range Control Point: | データマップを2分割するポイント指定。 |
| Current Range: | 分割されたデータマップの選択。 |
| Alpha Range model: | 透明度を線形/矩形で設定する。 |
| Minimum Alpha: | 選択データマップの最小値での透明度を設定する。 |
| Maximum Alpha: | 選択データマップでの最大値での透明度を設定する。 |
| Alternate Object | |
| 処理を高速化するため、オブジェクト移動中の描画をオフにする。 | |
2-4. volume_render操作方法
実際にvolume_renderを利用し、ボリュームレンダリングを行います。
データを読み込むための「Read_Filed」、データ領域を表示するための「bounds」、そして「volume_render」をインスタンスし下記のネットワークを作成して下さい。
「Read_Field」ではhydrogen.fldを読み込みます。
その後、コントロールパネルのハードウェアレンダリングアイコンをクリックしOFFにすることでボリュームレンダリングの結果が表示されます。
(Ray Traceモードでのボリュームレンダリングはソフトウェアレンダリング時のみ可能です)
| ハードウェアレンダリングアイコン (灰色状態でソフトウェアレンダリング) |
デフォルトの状態では、volume_renderコントロールパネル中のFat RayがONになっているため、粗いボリュームレンダリングの結果が表示されます。
高品質なボリュームレンダリングが必要な場合には、Fat RayをOFFにして下さい。
ただし、Fat rayがONの時より描画に時間がかかるため、マシンスペックと必要に応じて使い分けを行って下さい。

図3 volume_render ネットワーク
2-5. カラーマップの変更
volume_renderではカラーマップの設定が可視化結果に大きな影響を与えます。
他の可視化と同様にRGBの各色成分の変更が可能なことに加え、透明度(α値)の設定を組み合わせることで可視化結果が大きく変化します。
例えば透明度0を設定したデータ値部分は完全に透明なので可視化結果として表示されませんし、透明度1のデータ値部分は不透明な面のように表示されます。
0から1の間の透明度を設定されているデータ値はもちろん半透明で表示されます。
上記のようにボリュームレンダリングでは、カラーマップの設定が重要であり、カラーマップのRGBA成分の中で、特に透明度に当たるA(α)が可視化に大きく影響を与えます。
ボリュームレンダリングでカラーマップを設定する方法には、次の2つの方法があります。
- volume_renderコントロールパネルのDatamapEditor機能よりカラーマップ設定
- ColormapEditorモジュールを利用したカラーマップ設定
volume_renderコントロールパネルからの設定は、透明度のみの設定など制限が設けられています。
ここではより細かな設定が可能なColormapEditorを利用したカラーマップの設定方法を紹介します。
2-5-1. カラーマップの変更(ColormapEditorモジュールより)
まず、最初にデフォルトの状態で設定されているカラーマップを確認します。
MainライブラリDataIOカテゴリよりColormapEditorをインスタンスし、図7のようなネットワークを作成して下さい。
ColormapEditorパネル(図7)にvolume_renderのデフォルトのカラーマップが表示されます。

図6 ColormapEditor追加ネットワーク
カラーマップはRGB(またはHSV)の各色成分とαの透明度成分から成り立っています。
2-5で紹介したように、ボリュームレンダリングでは透明度の設定が重要になります。
ここではその透明度の変更を中心に、カラーマップの設定について話を進めていきます。
ColormapEditorでのカラーマップ情報の確認方法は図8を参照して下さい。
- データの最小値と最大値が横軸に設定されます。
- 上の段に透明度情報、下の段に色情報(カラーバー)が表示されます。
- 透明度は縦軸方向に上限1(不透明)下限0(透明)の折れ線グラフで示されます。
デフォルトの状態では透明度は0~127.5の範囲では0、127.5~255の範囲は1が設定されています。
このカラーマップでは127.5以下のデータは透明度が0なので可視化されず、127.5以上のデータがカラーテーブル情報で色付けされて可視化されます。
hydrogen.fldの場合にはちょうど127.5の値で等値面表示をしたような図6の可視化結果になります。
透明度の変更は、透明度を示す折れ線グラフの折れ線部分(control point)をマウス左ボタンでドラッグすることで行います。
新たなcotrol pointを追加する場合にはマウス右ボタンでクリックを行って下さい。
また、control pointの消去はshift+マウス右ボタンで行います。
透明度を変更することでhydorogenの可視化を様々に変化させることができます。
hydorogen.fldのボリュームレンダリングの結果を、カラーマップを変更して2つ紹介します。
カラーマップの違いによる可視化結果の変化を確認して下さい。
図9の可視化では0から255のデータに線形で増加していく透明度を設定しました。
全体的に低い値で不透明度を設定しているので、データ全てを半透明表示したような可視化になります。
図11は透明度の設定部分で山状になっている2つの点に不透明度を設定した可視化です。
不透明度を設定した2点で厚みのある半透明な等値面を描画したような可視化になります。
ExampleライブラリのVolumeRendShellsも同様のタイプの可視化ですので、参考にしてください。(Developer Editionのみ利用可能なサンプルになります)
カラーマップを設定により、可視化結果の印象は大きく変わってきます。
利用されるデータに適したカラーマップを作成することもボリュームレンダリングの醍醐味です。
3. ボリュームレンダリング事例紹介
ボリュームレンダリングは実験、解析、シミュレーションなど様々なデータの可視化に利用されています。
特に医療分野でのCTスキャンのデータや、流体解析での乱流データの可視化手法としては代表的な可視化手法の一つとしてボリュームレンダリングが利用されています。
(AVSサンプルデータlobster.fldもCTスキャンのデータを3次元に再構成したものです)
- 医療データのボリュームレンダリングサンプル
http://www-vizj.kgt.co.jp/contents/index_4.xml
実際の研究にボリュームレンダリングを適用されている事例を紹介しているサイトとしてVizJournalを紹介します。
ユーザ紹介中の次のトピックスでボリュームレンダリングが利用されていますので、是非ご覧になってください。
- ボリュームレンダリングによる3次元波動場の可視化
独立行政法人 防災科学技術研究所様 - 中性子で見る原子炉内水蒸気/水の("3D"+"2D+Time")可視化
日本原子力研究所様
4. トピックス「ボリュームレンダリングの様々な手法
AVS/Expressの「volume_render」には"Ray tracer"と"BTF texture"の2つのレンダリングモードが用意されています。
ここではトピックスとして、この2つのボリュームレンダリング手法の違いを説明し、その他に最新のボリュームレンダリング手法として、3Dtextureを利用したボリュームレンダリングについても紹介します。
4-1. レイキャスト
volume_renderコントロールパネル[Volume]プルダウンメニュー[Ray tracer]モードの手法です。
表示する画像の全ピクセルに対して、データ値(色と透明度)の視線方向にそった積分を行います。
確実な計算手法ですが、計算量が画像サイズやデータ量により急激に増加するので、大きな画像やデータに対しては処理が遅くなります。

図 13 レイキャストボリュームレンダリング
CPUで積分計算を行うレイキャストの手法では、大規模なデータに対しては計算量が増えてしまい高速化が困難でした。
そこで後述のOpenGLのテクスチャ機能を利用し、グラフィックボードの性能を利用し、高速なボリュームレンダリングを行う手法が使われてきています。
4-2. 2Dテクスチャ
volume_renderコントロールパネル[Volume]プルダウンメニュー[BTF texture]モードの手法です。(Back to Front Textureモード)
ボリュームデータを軸方向にスライスして2Dテクスチャを作成し、Back to Front の名前の通り奥から手前にブレンディング(重ね合わせ)することによってボリュームレンダリングを行います。ボリュームデータをスライスした2次元のデータにカラーマップを反映したイメージデータが2Dテクスチャになります。
このイメージデータを次々重ね合わせることでボリュームレンダリングを実現しています。
グラフィックボードには高速なテクスチャ処理能力が備わっているため、レイキャスト方式より高速なボリュームレンダリングが期待できます。

図 14 2D textureボリュームレンダリング
通常2Dテクスチャによるボリュームレンダリングでは、視点方向に最も正対する軸方向に沿って2Dテクスチャを作成します。
そのためこの手法では、視点方向によりスライス面を作成する軸方向が変化します。
その影響により、視点方向の変化に応じて、スライス面の再作成の発生し処理が遅くなることや、スライス面と視点方向の角度の変化によるサンプリング精度の変化が発生します。
マシンに搭載されているグラフィックボードがOpneGLテクスチャ機能に対応している場合には、コントロールパネル[Volume]プルダウンメニューを[BTF texture]変更することで、AVS/Expressでもグラフィックボードを利用したボリュームレンダリングが利用できます。
([BTF texture]はハードウェアレンダリング専用なのでレンダリングモードをハードウェアレンダリングモードに切り替える必要があります)
AVS/ExpressのBTF textureボリュームレンダリングには残念ながらシェーディング機能(陰影付け)が用意されていないため、Ray Tracerボリュームレンダリングとは違った可視化結果になります。
シェーディングが可能で高品質なRay tracerと、高速だがシェーディングが行えない
BTF textureの2つのボリュームレンダリングを使い分けてご利用下さい。

図 15 BTF textureモードへの切り替え
4-3. 3Dテクスチャ
2Dテクスチャでの視線方向によるサンプリング精度の変化を改善するために採用されている手法が、最後に紹介する3Dテクスチャを利用したボリュームレンダリングです。
一般的なテクスチャは2次元のイメージデータですが、3Dテクスチャでは3次元のボリューム
データをそのまま3次元のテクスチャとして利用します。
RGBAの情報を持つ3次元のテクスチャをロードし、視線方向に沿ったスライス面に対してテクスチャマッピングしボリュームレンダリングを行います。
スライス方向が視線方向に対して一定なため、視線方向によるサンプリング精度や処理速度の変化は発生しません。

図 16 3D textureボリュームレンダリング
また、サンプリングを行うスライス面について球面を利用することで、ボリュームレンダリングの精度を高める手法もVizGridの成果として実現されています。
球面のスライス面を利用することで、視点から等距離のデータを常にサンプリングすることが可能になります。
(平面でのサンプリングでは視野の端と中央で視点からスライス面の距離が変化します)
データと視点が近い場合に、平面サンプリングによる視点距離の誤差が大きくなるので、球面サンプリングは没入型の可視化などデータに接近してのボリュームレンダリングで特に有効と言われています。
上記の3Dtexture球面サンプリングを利用し、ボリュームレンダリングを行うモジュール「ShpericalVolume」を当社で開発しました。
ご興味のある方は是非、製品紹介ページをご覧下さい。(体験版のダウンロードも可能です)
5. おわりに
ボリュームレンダリングは幅広い分野の様々なデータの可視化に利用できます。
お手持ちのデータにもボリュームレンダリングを利用し、スライス面や等値面では実現できなかった、一味違った可視化に挑戦してください。
また、ボリュームレンダリングはカラーマップの設定が他の可視化以上に可視化結果に大きな影響を与えます。
カラーマップの設定は経験やテクニックがものを言う部分でもありますので、このテキストも参考にして、ぜひ皆様の可視化の腕を奮って下さい。
PDF PDF版 [645KB]
AVS Support Center, fns-avssup@cs.jp.fujitsu.com










