

科学的可視化およびコンピュータグラフィックスにおいて、ボリュームレンダリングは、3D離散サンプリングデータセット(通常は3Dスカラー場)の2D投影を表示するために使用される一連の技術である。[ 1 ]
典型的な 3D データセットは、 CT、MRI、またはMicroCTスキャナによって取得された 2D スライス画像のグループです。[ 2 ]通常、これらは規則的なパターン (たとえば、深さ 1 ミリメートルごとに 1 つのスライス) で取得され、通常は規則的なパターンで規則的な数の画像ピクセルを持ちます。これは規則的な体積グリッドの例であり、各体積要素、つまりボクセルは、ボクセルの周囲の領域をサンプリングすることによって得られる単一の値で表されます。
3Dデータセットの2D投影をレンダリングするには、まずボリュームに対して空間内にカメラを定義する必要があります。また、各ボクセルの不透明度と色を定義する必要もあります。これは通常、 RGBA (赤、緑、青、アルファ)伝達関数を使用して定義され、各ボクセル値に対応するRGBA値を定義します。
例えば、ボリュームから等値面(等しい値を持つ面)を抽出してポリゴンメッシュとしてレンダリングするか、ボリュームをデータブロックとして直接レンダリングすることで、ボリュームを表示できます。マーチングキューブアルゴリズムは、ボリュームデータから等値面を抽出する一般的な手法です。ボリュームの直接レンダリングは計算負荷の高いタスクであり、いくつかの方法で実行できます。
ボリュームレンダリングのもう一つの方法は、レイマーチングと呼ばれる3Dコンピュータグラフィックスのレンダリング技術の一種で、光線を段階的に追跡し、各光線をより小さなセグメントに分割して、各間隔で関数をサンプリングするものです。

ボリュームレンダリングは、薄切断層撮影表示とは区別され、最大強度投影を含む 3D モデルの投影とも一般的に区別されます。[ 3 ]ただし、技術的には、すべてのボリュームレンダリングは2 次元ディスプレイで表示すると投影になるため、投影とボリュームレンダリングの区別はやや曖昧です。それにもかかわらず、ボリュームレンダリングモデルの典型は、例えば着色[ 4 ]とシェーディング[ 5 ]を組み合わせて、現実的で観察可能な表現を作成します。
直接ボリュームレンダラー[ 6 ] [ 7 ] [ 8 ]では、すべてのサンプル値を不透明度と色にマッピングする必要があります。これは、単純なランプ、区分的線形関数、または任意のテーブルである「伝達関数」を使用して行われます。RGBAカラーモデル(赤、緑、青、アルファ)値に変換されると、合成されたRGBA結果がフレームバッファの対応するピクセルに投影されます。この方法は、レンダリング技術によって異なります。
これらの技術を組み合わせることも可能です。例えば、せん断歪みの実装では、テクスチャリングハードウェアを使用して、オフスクリーンバッファに整列されたスライスを描画することができます。

ボリュームレイキャスティングの手法は、レンダリング方程式から直接導き出すことができます。[ 9 ]これは非常に高品質な結果をもたらし、通常は最高の画像品質を提供すると考えられています。ボリュームレイキャスティングは、オブジェクトベースの手法のように入力ボリュームデータからではなく、出力画像から計算が行われるため、画像ベースのボリュームレンダリング手法に分類されます。この手法では、目的の画像ピクセルごとにレイが生成されます。単純なカメラモデルを使用すると、レイはカメラの投影の中心(通常は視点)から始まり、カメラとレンダリングするボリュームの間に浮かぶ仮想画像平面上の画像ピクセルを通過します。時間を節約するために、レイはボリュームの境界でクリップされます。次に、ボリューム全体で一定間隔または適応間隔でレイがサンプリングされます。データは各サンプルポイントで補間され、伝達関数が適用されてRGBAサンプルが形成され、サンプルはレイの累積RGBAに合成され、レイがボリュームから出るまでこのプロセスが繰り返されます。 RGBAカラーはRGBカラーに変換され、対応する画像ピクセルに書き込まれます。この処理は画面上のすべてのピクセルに対して繰り返され、完成した画像が生成されます。
これは、品質を犠牲にして速度を上げる手法です。ここでは、リー・ウェストオーバーが言ったように、すべてのボリューム要素が雪玉のように、奥から手前の順に表示面に飛び散ります。これらの飛び散った要素は、特性(色と透明度)が通常の(ガウス)分布に従って直径方向に変化するディスクとしてレンダリングされます。アプリケーションに応じて、平らなディスクや他の種類の特性分布を持つディスクも使用されます。[ 10 ] [ 11 ]

ボリュームレンダリングのシアワープ方式は、キャメロンとアンドリルによって開発され、フィリップ・ラクルートとマルク・ルヴォイによって普及しました。[ 12 ]この手法では、ボリュームの最も近い面が、ボクセルからピクセルへの固定スケールを持つオフスクリーン画像データバッファと軸が揃うように、ビュー変換が変換されます。次に、ボリュームは、はるかに有利なメモリアライメントと固定スケーリングおよびブレンド係数を使用して、このバッファにレンダリングされます。ボリュームのすべてのスライスがレンダリングされると、バッファは目的の方向にワープされ、表示画像内でスケーリングされます。
この手法は、レイキャスティングに比べてサンプリング精度が低く、画質が劣る可能性があるという欠点はあるものの、ソフトウェア上では比較的高速です。軸にほぼ揃ったボリュームを作成するために、ボリュームの複数のコピーを保存するためのメモリオーバーヘッドが発生します。このオーバーヘッドは、ランレングス符号化を使用することで軽減できます。

多くの 3D グラフィックス システムでは、テクスチャ マッピングを使用して、画像またはテクスチャを幾何学的オブジェクトに適用します。汎用 PCグラフィックス カードはテクスチャリングが高速で、リアルタイムのインタラクション機能を備え、3D ボリュームのスライスを効率的にレンダリングできます。ワークステーションGPU はさらに高速で、医療画像処理、石油・ガス、その他の市場で使用される生産ボリュームの可視化の多くを支えています (2007 年)。以前は、シリコン グラフィックスInfiniteReality、HP Visualize FXグラフィックス アクセラレータなどのグラフィックス システムで専用の 3D テクスチャ マッピング システムが使用されていました。この技術は、ビル ヒバードとデイブ サンテックによって初めて説明されました。 [ 13 ]
これらのスライスは、ボリュームに沿わせてビューアに対して斜めにレンダリングするか、ビュー平面に沿わせてボリューム内の非沿わせスライスからサンプリングするかのいずれかを選択できます。後者の方法では、3Dテクスチャに対応したグラフィックスハードウェアが必要です。
ボリュームアライメントテクスチャリングは、妥当な品質の画像を生成します。スライス数が粗くなると画像品質は低下しますが、ボリュームを回転させると顕著な変化が見られることがよくあります。[ 14 ]
直接ボリュームレンダリングの極めて並列的な性質のため、GPUボリュームレンダリングが十分に高速になる前は、専用のボリュームレンダリングハードウェアが活発な研究テーマでした。最も広く引用された技術は、三菱電機研究所のハンスペーター・フィスターと科学者によって開発されたVolumeProリアルタイムレイキャスティングシステム[ 15 ]で、高いメモリ帯域幅と総当たり方式を使用してレイキャスティングアルゴリズムでレンダリングを行いました。この技術はTeraRecon社に譲渡され、2世代のASICが製造・販売されました。VP1000[16]は2002年に、 VP2000は2007年にリリースされました[ 17 ]。
ピクセルシェーダーは、ビデオメモリからランダムに読み書きでき、基本的な数学的および論理的計算を実行できます。これらのSIMDプロセッサは、ポリゴンのレンダリングや信号処理などの一般的な計算を実行するために使用されていました。最近のGPU世代では、ピクセルシェーダーはMIMDプロセッサ(独立して分岐できるようになった)として機能し、浮動小数点形式で最大1GBのテクスチャメモリを利用できるようになりました。このようなパワーにより、ボリュームレイキャスティングや断層撮影再構成など、並列実行可能なステップを持つほぼすべてのアルゴリズムを、驚異的な高速化で実行できます。プログラマブルピクセルシェーダーは、照明、影、反射、発光色などの特性の変化をシミュレートするために使用できます。このようなシミュレーションは、高レベルのシェーディング言語を使用して記述できます。
最適化の主な目的は、可能な限り多くのボリュームをスキップすることです。一般的な医療データセットは1GBにもなります。これを毎秒30フレームでレンダリングするには、非常に高速なメモリバスが必要です。ボクセルをスキップすることで、処理する必要のある情報量を減らすことができます。
ボリュームレンダリングシステムには、多くの場合、可視物質を含まないボリューム領域を識別するシステムが備わっています。この情報を使用して、これらの透明な領域のレンダリングを回避できます。[ 18 ]
これは、ボリュームを前面から背面へ順にレンダリングする場合に使用される手法です。ピクセルを通過する光線について、十分な密度を持つ物質に遭遇すると、それ以降のサンプルはピクセルに大きな影響を与えないため、無視することができます。
オクツリーやBSPツリーなどの階層構造を利用することは、ボリュームデータの圧縮とボリュームレイキャスティング処理の速度最適化の両方に非常に役立つ可能性がある。



画像セグメンテーションは、レンダリング前に興味のないボリュームの大部分を切り出すために使用できる手動または自動の手順であり、レイキャスティングやテクスチャブレンドによって実行する必要のある計算量を大幅に削減できます。この削減は、n 個の順次インデックス付きボクセルに対して O(n) から O(log n) までになることもあります。ボリュームセグメンテーションは、他のレイトレーシングアルゴリズムにも大きなパフォーマンス上の利点をもたらします。ボリュームセグメンテーションは、その後、関心のある構造を強調または露出するために使用できます。[ 19 ]
ボリューム内のあまり重要でない領域を粗い解像度で表現することで、データ入力のオーバーヘッドを削減できます。詳しく見てみると、これらの領域のデータは、メモリやディスクからの読み込み、または補間によって格納できます。粗い解像度のボリュームは、元の画像から2Dミップマップ画像を作成するのと同じ方法で、より小さなサイズにリサンプリングされます。これらの小さなボリュームは、ボリュームを新しい方向に回転させる際にも単独で使用されます。
事前統合ボリュームレンダリング[ 20 ]は、必要なデータの大部分を事前に計算することでサンプリングアーティファクトを低減できる手法です。特にハードウェアアクセラレーションアプリケーション[ 21 ] [ 22 ]では、パフォーマンスに大きな影響を与えることなく品質が向上するため、非常に有用です。他のほとんどの最適化とは異なり、この手法ではボクセルをスキップしません。むしろ、ボクセルの領域を正確に表示するために必要なサンプル数を削減します。この手法の考え方は、サンプル自体ではなく、サンプル間の間隔をレンダリングすることです。この技術は、例えば筋肉から骨への移行など、急速に変化する素材をはるかに少ない計算量で捉えることができます。
画像ベースのメッシュ生成は、3D画像データ(MRI、CT、工業用CT 、マイクロトモグラフィーなど)からコンピュータモデルを作成する自動化されたプロセスであり、CAD、CFD、FEAなどの計算解析および設計に使用されます。[ 23 ]
完全な表示ビューを実現するには、ピクセルごとに1つのボクセル(前面のボクセル)のみを表示すれば十分です(ただし、画像を滑らかにするために複数のボクセルを使用することもできます)。アニメーションが必要な場合は、表示する前面のボクセルをキャッシュし、カメラの移動に合わせてカメラに対する位置を再計算できます。表示ボクセルの間隔が広がりすぎてすべてのピクセルをカバーできなくなった場合は、レイキャスティングなどの方法で新しい前面ボクセルを見つけることができます。また、1つのピクセルに2つのボクセルがある場合は、前面のボクセルを保持できます。
