「ボリュームレイキャスティング」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「'''ボリュームレイキャスティング'''(英語:volume ray casting)とは、ボリュームレンダリングアルゴリズムの一種で…」)
 
imported>Administrator
 
1行目: 1行目:
 
'''ボリュームレイキャスティング'''([[英語]]:volume ray casting)とは、[[ボリュームレンダリング]]の[[アルゴリズム]]の一種で、主要処理に[[レイキャスティング]]を使用するものをいう。
 
'''ボリュームレイキャスティング'''([[英語]]:volume ray casting)とは、[[ボリュームレンダリング]]の[[アルゴリズム]]の一種で、主要処理に[[レイキャスティング]]を使用するものをいう。
  
== 概要 ==
+
==概要==
 
[[レイキャスティング]]は「[[ゲーム]]の当たり判定」などのにも使われる汎用的な[[アルゴリズム]]である。これを[[ボリュームレンダリング]]に応用したものがボリュームレイキャスティングである。
 
[[レイキャスティング]]は「[[ゲーム]]の当たり判定」などのにも使われる汎用的な[[アルゴリズム]]である。これを[[ボリュームレンダリング]]に応用したものがボリュームレイキャスティングである。
  
8行目: 8行目:
 
この[[レイキャスティング]]で得られた[[データ]]([[配列]])をもとに、[[最大値]]や[[最小値]]、[[平均値]]、[[中央値]]、単純に[[加算]]など、様々な方法により加工することで最終的な映像(1つの[[ピクセル]])を取得する。この加工方法が重要であり「加工方法≒アルゴリズム名」となっている。
 
この[[レイキャスティング]]で得られた[[データ]]([[配列]])をもとに、[[最大値]]や[[最小値]]、[[平均値]]、[[中央値]]、単純に[[加算]]など、様々な方法により加工することで最終的な映像(1つの[[ピクセル]])を取得する。この加工方法が重要であり「加工方法≒アルゴリズム名」となっている。
  
* MIP (Maximum Intensity Projection) = 最大値
+
*MIP (Maximum Intensity Projection) = 最大値
* MinIP (Minimum Intensity Projection) = 最小値
+
*MinIP (Minimum Intensity Projection) = 最小値
* RaySum (Ray Summation) = 単純加算、CT値などは相対値なので足し合わせると勝手に平均値になる
+
*RaySum (Ray Summation) = 単純加算、CT値などは相対値なので足し合わせると勝手に平均値になる
* Surface Rendering = 特定範囲の値、かつ最初に出現したもの
+
*Surface Rendering = 特定範囲の値、かつ最初に出現したもの
* Volume Rendering = 特定範囲の値、かつ不透明度マップを掛けたもの
+
*Volume Rendering = 特定範囲の値、かつ不透明度マップを掛けたもの
  
 
これをひたすら繰り返す。すると最終的に1枚の画像になる。
 
これをひたすら繰り返す。すると最終的に1枚の画像になる。
39行目: 39行目:
 
このためボリュームレンダリングでは[[シェーダー]]の性能よりも[[メモリ]]の容量や速度が[[ボトルネック]]となることが多く、安物の[[オンボードGPU]]では厳しかったりする。なお、[[オンボードGPU]]でも[[PlayStation 4]]のように[[GDDR5]]と[[hUMA]]のような技術を組み合わせればボリュームレンダリングも大きく前進する可能性がある。
 
このためボリュームレンダリングでは[[シェーダー]]の性能よりも[[メモリ]]の容量や速度が[[ボトルネック]]となることが多く、安物の[[オンボードGPU]]では厳しかったりする。なお、[[オンボードGPU]]でも[[PlayStation 4]]のように[[GDDR5]]と[[hUMA]]のような技術を組み合わせればボリュームレンダリングも大きく前進する可能性がある。
  
== レイトレーシング ==
+
==レイトレーシング==
 
ボリュームレイキャスティングは「光が突き抜ける」というものである。
 
ボリュームレイキャスティングは「光が突き抜ける」というものである。
これを「光が反射する」という処理に置き換えると「レイトレーシング」となる。
+
これを「光が反射する」という処理に置き換えると「[[レイトレーシング]]」となる。
  
 
一見同じようなものに見えるが、「反射」と「反射時の光の拡散」で計算量は桁違いに増える。
 
一見同じようなものに見えるが、「反射」と「反射時の光の拡散」で計算量は桁違いに増える。
  
 
==関連項目==
 
==関連項目==
 +
 
*[[ポリゴン]]
 
*[[ポリゴン]]
 
*[[医用画像]]
 
*[[医用画像]]

2019年7月25日 (木) 04:56時点における最新版

ボリュームレイキャスティング英語:volume ray casting)とは、ボリュームレンダリングアルゴリズムの一種で、主要処理にレイキャスティングを使用するものをいう。

概要[編集 | ソースを編集]

レイキャスティングは「ゲームの当たり判定」などのにも使われる汎用的なアルゴリズムである。これをボリュームレンダリングに応用したものがボリュームレイキャスティングである。

レイキャスティングは「ボクセル」と呼ばれる3次元のビットマップのようなデータ配列)からデータを抽出する処理に使われる。まず視点位置と描画対象ピクセルのベクトル(レイを伸ばす角度、方向)を求める。これが「レイ」であり、このレイをまっすぐ伸ばし、ボクセルを貫通した位置にあるデータが抽出対象となる。

このレイキャスティングで得られたデータ配列)をもとに、最大値最小値平均値中央値、単純に加算など、様々な方法により加工することで最終的な映像(1つのピクセル)を取得する。この加工方法が重要であり「加工方法≒アルゴリズム名」となっている。

  • MIP (Maximum Intensity Projection) = 最大値
  • MinIP (Minimum Intensity Projection) = 最小値
  • RaySum (Ray Summation) = 単純加算、CT値などは相対値なので足し合わせると勝手に平均値になる
  • Surface Rendering = 特定範囲の値、かつ最初に出現したもの
  • Volume Rendering = 特定範囲の値、かつ不透明度マップを掛けたもの

これをひたすら繰り返す。すると最終的に1枚の画像になる。

Volume-raycasting.png

並列処理[編集 | ソースを編集]

ボリュームレイキャスティングではアプリの表示領域のピクセル単位でレイキャスティングを行う。たとえば縦512x横512の解像度の画像を生成しようと思った場合、「512x512=262144回」のレイキャスティングを行うことになる。ちなみに「より高画質に」という要望の場合には目的の解像度の2倍から16倍程度の解像度の画像を一旦生成し、目的の解像度に縮小するという手法が用いられる。 いわゆる「MSAA」だね。

話は逸れたが「512x512=262144回」は凄い数だ。

ただこの処理は一方的なデータの「取得」である。データの「変更」は伴わない。出力先の画像も1ピクセル毎に処理しているので同じメモリ番地に重複して書き込まれることもない。つまり排他制御も何も考えずに並列化できる。

昨今のマルチコアCPUが簡単に活かせる。また、GPUに搭載されるピクセルシェーダー宗教上の理由によりOpenGLの世界ではフラグメントシェーダーと呼ばれる)とも非常に相性がよく、近年の壮大なGPUではそこそこ高速に処理できる。なお、GPUで処理する方法は後述のメモリ消費量が問題になることが多いので注意すること。一般的にメインメモリと異なりVRAM仮想メモリをサポートしない。

メモリ消費量[編集 | ソースを編集]

ボリュームレンダリングでは3次元の点の集まりであるボクセルを扱う関係上、非常に多くのメモリを必要とする。

メモリ消費量
  • 512 * 512 * 512 * 2バイト = 256MB
  • 1024 * 1024 * 1024 * 2バイト = 2GB

上記は単純にボクセルを保持するために必要な最低限のメモリ容量であり、実際にはここから計算した値を確保しておくためのメモリなども必要になる。このような巨大なデータメインメモリからVRAMへの転送なども大きな負担となる。

ゲームなどに最適化されたグラフィックボードVRAM上に一度データを転送したらシーンが変わるまで使い回す前提となっていることが多いため、メインメモリVRAMの間で大量の転送を行うような用途ではシェーダーが遊んでしまうのである。

このためボリュームレンダリングではシェーダーの性能よりもメモリの容量や速度がボトルネックとなることが多く、安物のオンボードGPUでは厳しかったりする。なお、オンボードGPUでもPlayStation 4のようにGDDR5hUMAのような技術を組み合わせればボリュームレンダリングも大きく前進する可能性がある。

レイトレーシング[編集 | ソースを編集]

ボリュームレイキャスティングは「光が突き抜ける」というものである。 これを「光が反射する」という処理に置き換えると「レイトレーシング」となる。

一見同じようなものに見えるが、「反射」と「反射時の光の拡散」で計算量は桁違いに増える。

関連項目[編集 | ソースを編集]