「ボリュームレンダリング」の版間の差分

編集の要約なし
6行目: 6行目:
[[コンピューター]]および[[グラフィックボード]]の高性能化により、[[ゲーム]]などの[[ポリゴン]]主体の[[3D]]においても、雲の表現などの古くから[[ビルボード]]という手抜き手法が使われていた部分を高画質化する手法として採用され始めている。
[[コンピューター]]および[[グラフィックボード]]の高性能化により、[[ゲーム]]などの[[ポリゴン]]主体の[[3D]]においても、雲の表現などの古くから[[ビルボード]]という手抜き手法が使われていた部分を高画質化する手法として採用され始めている。


== アルゴリズム ==
==アルゴリズム==
ボリュームレンダリングといっても様々な手法があるが、現在ではほぼレイキャスティングを用いたもの一色となっている。
ボリュームレンダリングといっても様々な手法があるが、現在ではほぼレイキャスティングを用いたもの一色となっている。


* [[バイナリ空間分割]]
*[[バイナリ空間分割]]
* [[マーチングキューブ法]]
*[[マーチングキューブ法]]
* [[レイキャスティング]]
*[[レイキャスティング]]


== レイキャスティング ==
==ボリュームレイキャスティング==
ボリュームレンダリングで主流となっているレイキャスティングは「[[ボクセル]]」と呼ばれる[[3次元]]の[[ビットマップ]]のような[[データ]]([[配列]])から2次元描画用の[[データ]]を抽出する処理をいう。
[[レイキャスティング]]は「[[ゲーム]]の当たり判定」などのにも使われる汎用的な[[アルゴリズム]]であり、ボリュームレンダリングだけのアルゴリズムではない。これを明確にするために「ボリュームレイキャスティング」と呼ばれることも多い。
 
[[レイキャスティング]]は「[[ボクセル]]」と呼ばれる[[3次元]]の[[ビットマップ]]のような[[データ]]([[配列]])から2次元描画用の[[データ]]を抽出する処理をいう。


この[[レイキャスティング]]で得られた[[データ]]([[配列]])をもとに、[[最大値]]や[[最小値]]、[[平均値]]、[[中央値]]、単純に[[加算]]などの様々な方法により加工することで最終的な映像(1つの[[ピクセル]])を取得する。
この[[レイキャスティング]]で得られた[[データ]]([[配列]])をもとに、[[最大値]]や[[最小値]]、[[平均値]]、[[中央値]]、単純に[[加算]]などの様々な方法により加工することで最終的な映像(1つの[[ピクセル]])を取得する。
20行目: 22行目:
なお、レイキャスティングで得た値を加工せず、即座に[[ピクセル]]に変換する手法が一般的であるため、ボリュームレンダリングとレイキャスティングを同一として語られることも多い。
なお、レイキャスティングで得た値を加工せず、即座に[[ピクセル]]に変換する手法が一般的であるため、ボリュームレンダリングとレイキャスティングを同一として語られることも多い。


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


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


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