(57)【特許請求の範囲】
【請求項１】
ボリュームレンダリングパイプラインにおいてサンプルのライティング調整係数を生成する装置であって、
サンプルの勾配絶対値ベクトルを二乗して、二乗勾配絶対値を生成する第１の論理演算装置と、
前記二乗勾配絶対値から勾配絶対値を生成する第２の論理演算装置と、
前記第１の論理演算装置に接続され、二乗勾配絶対値の所定数の上位ビットを切り捨てるシフトレジスタと、
調整パラメータを記憶する勾配絶対値調整レジスタと、
前記第２の論理演算装置と前記シフトレジスタとに接続されており、インデックスソース信号が真の場合に切り捨て二乗勾配絶対値を選択し、インデックスソース信号が偽の場合に勾配絶対値を選択する第１のマルチプレクサと、
インデックスによって照合を行って、不透明度、放射、拡散反射、および鏡面反射調整係数を生成するメモリテーブルと
を備えたことを特徴とする装置。
【請求項２】
所定の点を下回る拡散反射および鏡面反射調整係数をフィルタリング処理するハイパスフィルタ回路を更に備えることを特徴とする請求項１に記載の装置。
【請求項３】
前記テーブルと前記ハイパスフィルタとに接続され、ユーザが供給する制御パラメータに基づいて、前記不透明度、放射、拡散反射、および鏡面反射調整係数を選択的に調整する第２のマルチプレクサを更に備えることを特徴とする請求項２に記載の装置。
【請求項４】
有効勾配範囲の最小勾配および最大勾配を記憶する勾配絶対値範囲レジスタと、
前記二乗勾配絶対値と前記最大および最小勾配とを比較して、範囲有効信号を生成する比較器と
を更に備えることを特徴とする請求項１に記載の装置。
【請求項５】
前記勾配絶対値ベクトルは、ＧU、ＧV、およびＧW成分を有しており、
前記二乗勾配絶対値を決定するための前記成分の二乗を総和する手段を更に備えることを特徴とする請求項１に記載の装置。
【請求項６】
ボリュームレンダリングパイプラインにおいてサンプルのライティング調整係数を生成する方法であって、
ボリュームサンプルの勾配絶対値ベクトルを二乗して、二乗勾配絶対値を生成するステップと、
前記二乗勾配絶対値から勾配絶対値を生成するステップと、
前記二乗勾配絶対値の所定数の上位ビットを切り捨てるステップと、
調整パラメータを勾配絶対値調整レジスタに記憶するステップと、
インデックスソース信号が真の場合に前記切り捨て二乗勾配絶対値を選択し、インデックスソース信号が偽の場合に前記勾配絶対値を選択するステップと、
インデックスによって照合を行って、不透明度、放射、拡散反射、および鏡面反射調整係数を生成するステップと
を備えたことを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、広義には、ボリュームレンダリングに関するものであり、より詳細には、サンプルの勾配絶対値を用いてライティングの調整を行う調整装置及び調整方法に関するものである。
【０００２】
【従来の技術】
ボリュームレンダリング概説
ボリュームレンダリングは、３次元データを視覚化する必要があるコンピュータグラフィックス応用分野でしばしば使用されている。ボリュームデータは、物理的または医用オブジェクト、もしくは、大気、地球物理、または他の科学的モデルを走査することによって得られる情報でありうるが、データで表現されている一見してよく分からない現実の構造は、データを視覚化することによって理解しやすくなる。
【０００３】
ボリュームレンダリングでは、物理的オブジェクトおよびモデルの外側表面形状だけでなく内部構造も視覚化される。ボリュームレンダリングで使用される基本データ項目は、通常、ボクセルである。ボクセルとは、オブジェクトまたはモデルの特定三次元位置を表すデータ項目である。各ボクセルの座標（ｘ，ｙ，ｚ）により、ボクセルは表現オブジェクトまたはモデル内の各位置に配置される。
【０００４】
ボクセルは、オブジェクトまたはモデルの何らかの特定強度値を表す。任意のボリュームについて、強度値は、密度、組織タイプ、弾性、速度等々の指定するが少数の物理的パラメータでありうる。レンダリング時、ボクセル値は、２次元画像平面に投影して見ることのできる色および不透明度（ＲＧＢα）値に変換される。
【０００５】
レンダリングで最も頻繁に使用される手法の１つは、レイキャスティング法である。レイキャスティング法では、仮想光線のセットをボクセルのアレイに投射する。光線は、観察者の目すなわち画面平面を始点とする。その光線に沿った各ポイントに対して、ボクセル値のサンプリングが何度も実施される。サンプリングされた値を画素値に変換する種々の手法は公知である。あるいは、ボクセル値がＲＧＢαボクセルに直接に変換され、その後、光線に沿って再サンプリングされて画素値に累積される場合もある。いずれの場合においても、処理を後方から前方に進めてもよいし、前方から後方に進めてもよい。
【０００６】
レンダリングパイプライン
ボリュームレンダリングは、ソフトウェアで行うこともハードウェアで行うことも可能である。ハードウェア処理系によっては、ハードウェアが多段パイプラインとして構成されている。１９９８年１１月１２日付けで出願されたカプラ（Ｋａｐｌｅｒ）他による米国特許出願第０９／１９０，６４３「実時間ボリュームレンダリングシステムの中間値の高速保存と検索（Ｆａｓｔ  Ｓｔｏｒａｇｅａｎｄ  Ｒｅｔｒｉｅｖａｌ  ｏｆ  Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅｓ  ｉｎ  ａ  Ｒｅａｌ−Ｔｉｍｅ  Ｖｏｌｕｍｅ  Ｒｅｎｄｅｒｉｎｇ  Ｓｙｓｔｅｍ）」を参照されたい。
【０００７】
照射
ハイライト、反射、陰影を加えることにより、三次元物体を認識する人間の目の自然能力の１つに訴えて画像の現実感を増すための照射は、美術およびコンピュータグラフィクスの両分野において公知である。コンピュータグラフィクスでは、従来技術の照射手法が数多く知られているが、一般に、それぞれの光源に対する方向、面の法線ベクトル、観察者の位置など、複雑な計算が付随する。三次元オブジェクトのサーフェス（surface）を多数の小三角形に分けることにより三次元オブジェクトを描写するポリゴングラフィクスシステムでは、サーフェス上のある点を含む三角形の詳細から、その点における法線が容易に得られる。
【０００８】
すべてのグラフィックシステムにとっての課題は、当然のことながら、実時間走査を行えるくらい十分迅速にこれらの計算を処理することである。これらを効率的に実施する手法の１つは、ビューリーズ（Ｖｏｏｒｈｉｅｓ）等著「反射ベクトル陰影処理用ハードウェア（Ｒｅｆｌｅｃｔｉｏｎ  Ｖｅｃｔｏｒ  Ｓｈａｄｉｎｇ  Ｈａｒｄｗａｒｅ）」Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｅｄｉｎｇｓ，  Ａｎｎｕａｌ  Ｃｏｎｆｅｒｅｎｃｅ  Ｓｅｒｉｅｓ，ｐｐ．１６３−１６６，１９９４に記載されている。当該文献には、視線ベクトルと光源に関する計算を所定の方向集合について予め部分的に算出してルックアップテーブルに記憶するポリゴングラフィクスシステムが説明されている。レンダリング時、画像中の描写オブジェクトのサーフェス上の点に割り当てられる赤色、緑色、および青色の強度を調整する値を得るために、反射ベクトルを利用してルックアップテーブルに対して照合を行う。実時間で必要な計算は、反射ベクトル自体を求める計算と調整の適用に関する計算だけである。
【０００９】
ボリュームデータセットに定義済サーフェスが存在することは滅多にないので、ボリュームグラフィックに照射を適用することはかなり難しい。それよりむしろ、リーボイ（Ｌｅｖｏｙ）著「ボリュームデータに基づくサーフェス表示（Ｄｉｓｐｌａｙ  ｏｆ  Ｓｕｒｆａｃｅｓ  Ｆｒｏｍ  Ｖｏｌｕｍｅ  Ｄａｔａ）」ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ，Ｍａｙ  １９８８，ｐｐ．２９−３７で論じられているように、データ自体から可視サーフェスを推測しなくてはならない。一般的な手法は、ボリュームデータセット全体の勾配、すなわち位置に対するボクセル値の変化率とその方向を求めることである。勾配が強いポイントでは、面の法線方向を指す勾配から、異なる素材タイプ間のサーフェスすなわち境界を推測できる。また勾配の絶対値は、表面の鮮明度を示すその後、例えばドレビン（Ｄｒｅｂｉｎ）等著「ボリュームレンダリング（Ｖｏｌｕｍｅ  Ｒｅｎｄｅｒｉｎｇ）」Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ，  Ａｕｇｕｓｔ  １９８８，  ｐｐ．  ６５−７４に記載されているように、伝統的な照射手法を適用して、ボリュームの各ポイントにおける勾配の絶対値と方向との両方に基づいて色の強さとα値とを調節する。この方法によれば、高い勾配絶対値を呈する特徴部は表面として強調され、低い勾配絶対値を呈する特徴部は抑制される。
【００１０】
ターウィスシャヴァン・ヴァン・シェルティンガ等著「オンチップ反射率マップの設計（Ｄｅｓｉｇｎ  ｏｆ  Ｏｎ−Ｃｈｉｐ  Ｒｅｆｌｅｃｔａｎｃｅ  Ｍａｐ）」  Ｅｕｒｏｇｒａｐｈｉｃｓ  ９５  Ｗｏｒｋｓｈｏｐ  ｏｎ  ｇｒａｐｈｉｃｓ  Ｈａｒｄｗａｒｅ，ｐｐ．５１−５５，１９９５には、前述のビューリーズ等のボリュームレンダリング法の応用が記載されている。この手法によれば、光源への方向と観察者の目に基づいて鏡面反射および拡散反射強度を事前に計算する。その後、これらの強度を、反射率マップと呼ばれるルックアップテーブルに記憶する。そして、前述のテーブルに勾配ベクトルを照合してサンプル位置のＲＧＢα値を調整するための強さを読み取って、鏡面反射および拡散反射のハイライトを生成する。
【００１１】
しかしながら、前述の照射法は、オブジェクトの表面と雑音とを区別できないという欠点がある。有意味な照射が可能なのは、サンプルが表面サンプルまたは非表面サンプルとして明確に分類できる場合だけである。雑音の存在によって均質な物質内のボクセルに強い照射が割り当てられるため、先行照射は不適切である。ビューリーズもヴァン・シェルティンガも、パイプライン式の照射についてはいっさいの提案、教示、呈示を行っていない。また、前述の手法は、オブジェクトに対する視点が変化した場合に必ず反射率マップを再ローディングしなくてはならないという点で性能が犠牲になっている。また、ビューリーズもヴァン・シェルティンガも、視線方向変更時に鏡面反射マップを再ローディングする必要を無くす、勾配および視線ベクトルに基づいた進行中の鏡面反射ベクトルの計算を提案していない。
【００１２】
勾配絶対値の近似
過去において、勾配絶対値を求める力ずくの方法として、勾配ベクトルＧuvwの各勾配ベクトル成分（ｕ，ｖ，ｗ）の平方の合計値を求め、この合計値の平方根を得るというものがあった。この計算では、ハードウェアを極端に多用することがあり、そのため、しばしばソフトウェアが利用される。これは、従来の平方根計算を実行するのに必要な反復回数が数十ステップのオーダーになりうるからである。
【００１３】
そのような計算に必要なハードウェアおよびそれに割り当てられる時間は、１秒当たり５億以上のサンプリング速度でレンダリングを実行する必要がある実時間ボリュームレンダリングの必要条件に照らしてみると、あまりにも複雑で長い。勾配絶対値を導き出すための別の従来技術として、ルックアップテーブルを利用するものがあるが、妥当な精度レベルを達成するためには多数のゲートを要するという問題がある。
【００１４】
勾配絶対値を導き出した後、ユーザが、勾配絶対値を利用して照射効果やサンプルの不透明度を対話式に変更できるようにすることが望まれる。これにより、ユーザは特定の特徴を強調させたり、特定の特徴を削除したり、レンダリング後のオブジェクトに対して広範囲な変更を加えることができるようになる。
【００１５】
【発明が解決しようとする課題】
従来技術においては、以上のような問題点があるため、従来技術の欠陥を改善したボリュームデータの照射が望まれる。すなわち、従来のボリュームレンダリングにおいては、ライティングの調整を効率的且つ柔軟に実施することができないという問題点があった。
【００１６】
この発明は、かかる問題点を解決するためになされたものであり、ライティングの調整を効率的かつ柔軟に行うために、ボリュームレンダリングパイプラインにおけるサンプル用のライティング調整係数を得るライティングの調整装置及び調整方法を提供することを目的とする。
【００１７】
【課題を解決するための手段】
この係数を生成する装置は、以下の構成要素を含んでいる。第１の論理演算装置は、サンプルの勾配絶対値ベクトルを二乗して、二乗勾配絶対値を生成する。第２の論理演算装置は、この二乗勾配絶対値から勾配絶対値を生成する。第１の論理演算装置に結合されているシフトレジスタは、二乗勾配絶対値の所定数の上位ビットを切り捨てる。勾配絶対値調整レジスタは、調整パラメータを記憶する。第２の論理演算装置とシフトレジスタとに結合されている第１のマルチプレクサは、インデックスソース信号が真の場合に切り捨て二乗勾配絶対値を選択し、インデックスソース信号が偽の場合に勾配絶対値を選択し、メモリテーブルはインデックスによって照合され、不透明度、放射、拡散反射、および鏡面反射調整係数を与える。
【００１８】
本発明は、ボリュームレンダリングパイプラインのサンプルのためのライティング調整係数を提供する。この係数を生成する装置は、以下の構成要素を含んでいる。第１の論理演算装置は、サンプルの勾配絶対値ベクトルを二乗して、二乗勾配絶対値を生成する。
【００１９】
第２の論理演算装置は、この二乗勾配絶対値から勾配絶対値を生成する。第１の論理演算装置に結合されているシフトレジスタは、二乗勾配絶対値の所定数の上位ビットを切り捨てる。
【００２０】
勾配絶対値調整レジスタは、調整パラメータを記憶する。第２の論理演算装置とシフトレジスタとに結合されている第１のマルチプレクサは、インデックスソース信号が真の場合に切り捨て二乗勾配絶対値を選択し、インデックスソース信号が偽の場合に勾配絶対値を選択し、メモリテーブルはインデックスによって照合され、不透明度、放射、拡散反射、および鏡面反射調整係数を与える。
【００２１】
【発明の実施の形態】
図１に、本発明による照射光（トレース）ステージ２００を利用するパイプライン１００を示す。パイプラインへ入力されるのは、ボクセルメモリ１０１から読み出されたボクセル１０２であり、パイプラインから出力されるのは、ピクセルメモリ１０９に書き込まれるピクセル（画素）１０８である。
【００２２】
パイプライン１００の各段（各ステージ）は、特定の視点のボクセル１０２に補間１１０を施してサンプル１０３を生成する。補間中、ボクセル近傍を調べ、光線沿いのサンプルポイントに数値を割り当てる。再サンプリング関数は、一般に、線形補間、確率的補間、または最近傍補間などである。
【００２３】
サンプル１０３の勾配１０４の推算１２０が実行される。勾配は、面の法線の方向と絶対値を示す。次に、サンプル１０３が分類される。分類されたサンプルは、照射光（トレース）ステージ２００において、推算勾配１０４を利用して本発明により照射される。最後に、照射されたサンプル１０６がピクセル１０８に合成１４０される。別の実施形態において、補間ステージ、勾配推算ステージ、分類ステージの順序が異なっていてもよい。
【００２４】
図１のパイプラインのデータの流れにより、半導体すなわちハードウェア処理系においてかなりの並列処理を実現できる。ボクセルメモリ１０１から１つのデータグループが読み出される間に、以前に読み出されたデータグループが補間ステージ１１０で補間され、以前に読み出された勾配を持っているデータグループの推算と分類がステージ１２０で行われる、などである。パイプラインは、それぞれのサイクルで、決まった数のボクセルを読み出す。これらのボクセルは、１段ずつおよび１サイクルずつパイプラインを進む。したがって、個々のボクセルまたはサンプルのレンダリングに必要なステージ数および時間が大きくても、一度に多数のボクセルが処理される。
【００２５】
照射光（トレース）ステージ
図２に、本発明によるハードウェアレンダリングパイプラインの照射光（トレース）ステージ２００を示す。照射光（トレース）ステージ２００は、３つの主要装置、すなわち、勾配絶対値調整装置３００と、反射率マッピング装置８００と、ライティング装置１１００とを含んでいる。照射光（トレース）ステージ２００は、４つの論理演算装置（ＡＬＵ）すなわち乗算器（（×））２０１〜２０４と、マルチプレクサ（ＭＵＸ）も含んでいる。（なお、乗算器２０１〜２０４の表現方法として、図２においては、○の中に×が記載されている記号が記載されているが、本明細書においては、それを（×）として記載している。）
【００２６】
照射光（トレース）ステージ２００へのそれぞれの入力は、前段からの分類サンプル２０５、それに対応する対応勾配ベクトル（Ｇuvw）１０４、およびサンプリング点からの観測者の視線方向を表す視線ベクトル（Ｅuvw）８０１から構成されている。サンプルおよびその関連勾配ベクトルは、パイプラインの１クロックサイクルあたり１組の割合で受け入れられる。ボリュームレンダリングによって平行投影を行うシステムでは、視線ベクトルは常にボリュームを横切る。しかしながら、透視投影では、視線ベクトルをそれぞれの光線に合わせて調整しなくてはならない。
【００２７】
照射光（トレース）ステージ２００は、関連勾配ベクトル（Ｇuvw）１０４および以下に詳述する別の制御を利用して、分類サンプル２０５に、鏡面反射（ｓ）、拡散反射（ｄ）および放射（ｅ）照射を与える。本発明による照射光（トレース）ステージ２００は、パイプライン式に、パイプラインの１クロックサイクル当たり１組の割合でサンプルとベクトルとを処理する。すなわち、照射光（トレース）ステージ２００は一定数の処理ステップを含み、データは最初から最後まで一方向に段を流れる。ループも、フィードバックも、処理ステップ数の変動も存在しない。照射光（トレース）ステージ２００のサブユニットのそれぞれは、同様に、１個／１サイクルの速度で入力を受け入れて同じ速度で出力を供給するようにパイプライン式に構成されている。
【００２８】
勾配ベクトル１０４は、以下に説明されるように、調整装置３００および反射率マッピング装置８００に、入力として供給される。調整装置は、４つの勾配絶対値調整係数ＧＭＯＭ、ＧＭＩＭe、ＧＭＩＭd、およびＧＭＩＭsを生成する。ＧＭＯＭは、不透明度調整用の係数であり、その他の３つの係数は、それぞれ放射（ｅ）、拡散反射（ｄ）および鏡面反射（ｓ）照射の場合の色（ＲＧＢ）の強度である。調整は、ユーザの制御下で多数のいろいろな方法で実施できる。
【００２９】
ＧＭＯＭは、ｍｕｘ２１０を介して供給された分類サンプル２０５のα（不透明度）成分２０６の調整すなわち減衰（２０１）を実施する。照射光（トレース）ステージを完全にバイパスする場合には、ｍｕｘ２１０はＧUVWも受け取る。２０２においてＧＭＩＭeにｋeが乗じられる。ここでｋeは、ボリューム全体に対する定数である放射光の強度である。調整後のｋeをＭｋeで示す。２０３においてＧＭＩＭdにＩdが乗じられ、調整拡散反射強度ＭＩdが与えられる。２０４においてＧＭＩＭsにＩsが乗じられ、調整鏡面反射光強度ＭＩsが与えられる。ＩdおよびＩsの値は、反射率マッピング装置８００経由で供給される。Ｍｋe、ＭＩd、およびＭＩsは、図１２記載のように、ライティング装置１１００に供給される。
【００３０】
照射光（トレース）ステージ２００の主な出力は、Ｒｅｄ（赤）、Ｇｒｅｅｎ（緑）、Ｂｌｕｅ（青）の色成分およびα（Ａｌｐｈａ）成分を備えた照射サンプル１０６である。それ以外の２つの出力は、Ｇｍ有効範囲１０７と、勾配ベクトルと視線ベクトルとの内積（ＧUVW・ＥUVW）の信号１０８である。Ｇｍ有効範囲の値は、範囲レジスタで定義された範囲に対する算出二乗勾配絶対値の比較結果である。この信号は、パイプライン１００の合成ステージ１４０の下流に用いて、勾配絶対値に基づいて合成されたデータにサンプルを選択的に組み込むまたは同からサンプルを選択的に除外することによって、結果画像をさらに調整することができる。
【００３１】
内積の信号により、勾配が前向きであるか、後向きであるかが示される。この信号を合成ステージの下流に用いることにより、サンプルが前向きの表面か、後向きの表面か識別することもできる。この情報により、ボリュームデータを簡単に分割することが可能になる。入力と同様に出力も１照射サンプルパイプラインサイクルの速度で刻時される。
【００３２】
勾配の絶対値の調整
図３に、勾配絶対値調整装置３００を更に詳細に示す。この装置の目的は、勾配の絶対値を利用して、勾配をフィルタリング処理することである。フィルタリング処理により、表面が強調され、雑音が除去される。
【００３３】
装置３００は、勾配１０４自体の内積（ＧUVW・ＧUVW）を行って、勾配の絶対値の二乗｜Ｇ2｜を得る論理演算装置３１０と、図１３および１３を参照しながら更に詳細に説明される｜Ｇ2｜の平方根を求めるための装置６００とを含んでいる。スクエアリング回路３１０の出力は、図４記載の勾配絶対値範囲レジスタ４００からの範囲値とともに、比較器３２０に供給される。この範囲値には、最小および最大有効絶対値が含まれている。出力は、回路３３０（例えば、シフトレジスタ）によって切り捨てられ、その後、｜Ｇ｜とともにマルチプレクサ３４０に供給される。
【００３４】
勾配絶対値ルックアップテーブル（ＧＭＬＵＴ）３８０に照合するために、ｍｕｘ３４０の出力が利用される。ルックアップテーブルの入力項目は、０〜１間（０と１を含む）の小数値である。絶対値｜Ｇ｜は、ハイパスフィルタ（Ｈｉ−Ｐａｓｓ）フィルタ関数３５０にも供給される。特定の調整モードを選択する信号が、回線３６０を介してマルチプレクサ３７０に供給される。この信号は、図５記載の勾配絶対値調整レジスタ（ＧＭＭ）５００から送り出されたものである。レジスタ５００にビットとして記憶されるパラメータ値は、ユーザが提供できる。可能モードとして、鏡面反射、拡散反射、放射、不透明度、ハイパス拡散反射、およびハイパス鏡面反射などがある。
【００３５】
勾配絶対値調整レジスタ
図５に記載されているように、ＧＭＭ５００は、３２ビットとして格納されるフィールド５０１〜５０７を含む。ユーザが希望する調整は、種々のビット数によって正確に管理される。ＧＭＬＵＴ３８０と組み合わせて、グレーン（grain）、ベース（base）、上下限範囲、およびインデックスソースフィールド５０１〜５０４が使用される。ハイパスフィルタ３５０は、２つのハイパスフィールド５０５、５０６を使用する。フィールド５０５は、ハイパスフィルタ関数のステップ値を指定する。フィールド５０６は、鏡面反射光または拡散反射光の一方または両方を削除する。フィールド５０７の数値は、絶対値ルックアップテーブル３８０を利用するｍｕｘ３７０の複合調整モードを選択する。
【００３６】
言い換えると、ＧＭＭレジスタ５００の中には、２種類の調整関数（Ｈｉ−ＰａｓｓまたはＧＭＬＵＴ）の適用を制御して４通りの変更出力３９０を得る、全部で３２の制御ビットが存在している。ＧＭＯＭおよびＧＭＩＭeは、不透明度調整（ｍｏｄｕｌａｔｅＯｐａｃｉｔｙ）および放射調整（ｍｏｄｕｌａｔｅＥｍｉｓｓｉｖｅ）制御ビットの設定（０または１）に基づいて与えられるＧＭＬＵＴの出力または数値１．０を有する。これをＣプログラム言語で表現すると以下のようになる。
【００３７】
GMOM = modulateOpacity ? GMLUT[|G|] : 1.0
GMIMe = modulateEmissive ? GMLUT[|G|] : 1.0
【００３８】
ここで、演算子”？”は、指定された制御ビットがＧＭＭ５００に設定（０または１）されているかどうかを”尋ね”、それに応じて、”？”の後の２つの演算子のうちの、最初のものまたは２番目のものを選択する。ＧＭＩＭｄおよびＧＭＩＭｓは、次の４つの値のうちのいずれかを有する。
【００３９】
1.0, Hi-Pass(|G|), GMLUT[|G|], または、Hi-Pass(｜G｜)*GMLUT［|G|].
【００４０】
上に述べたように、２つの関数値を合成することができる。ＧＭＭ５００の制御ビットの設定に応じてＧＭＩＭdおよびＧＭＩＭsについてこれらの４つの可能値のいずれかを別個に選択することができる。
【００４１】
GMIMd =(modulateDiffuse ? GMLUT[|G|]:1.0)
＊(hiPassDiffuse ? Hi-Pass(|G|):1.0)
GMIMs=(modulateSpecular ? GMLUT[|G|]:1.0)
＊(hiPassSpecular ? Hi-Pass(|G|):1.0)
【００４２】
勾配絶対値調整演算
装置３００は、回線３６０上の選択信号と、分類サンプル２０５の勾配絶対値とにより、調整（減衰）係数ＧＭＯＭ、ＧＭＩＭe、ＧＭＩＭd、およびＧＭＩＭs３９０を決定する。この調整係数は、ライティングパラメータ（Ｉd、Ｉs、およびＫe）およびサンプルの不透明度に適用できる。
【００４３】
装置３１０において、次のように、勾配ベクトルの各成分の二乗の合計値を求めて勾配絶対値の二乗（｜Ｇ2｜）が計算される。
【００４４】
|G2|=(GU*GU)+(GV*GV)+(GW*GW)
【００４５】
勾配ベクトルの成分は、［−４０９５，…，＋４０９５］24の範囲内にある。この範囲だと、算出される勾配絶対値の二乗の範囲は、［０，…，５０，３０７，０７５］になる。Ｇｍ有効範囲信号１０７は次のように設定される。
【００４６】
GmRangeValid =(|G2| >= GradientMagnitudeRange.Min)
&&(|G2| <= GradientMagnitudeRange.Max).
【００４７】
ここで、図４に勾配絶対値範囲レジスタ４００を示す。”＆＆”は、Ｃプログラミング言語における論理積演算子の記号である。
【００４８】
調整装置３００によって出力される４つの調整係数は、ＧＭＯＭ、ＧＭＩＭe、ＧＭＩＭd、およびＧＭＩＭs３９０である。これらの出力は、［０．０，…，１．０］の範囲内にある。乗算論理を利用している図２から分かるように、ＧＭＯＭはサンプルの不透明度（α）成分を調整し、ＧＭＩＭeはｋe成分を調整し、ＧＭＩＭdはＩd成分、ＧＭＩＭsはＩs成分を調整し、したがって鏡面反射光が調整される。
【００４９】
この調整は、非表面のライティングに対する寄与を最小化または除去する、サンプリング時の誤りおよび／またはボリュームデータセットに固有の補間または雑音誤りによって存在することがある低勾配のサンプルのライティングに対する寄与を最小化または除去する、特定範囲の勾配を持ったサンプルのみに光を与える、およびサンプルが合成されないようにする（ＧＭＯＭ）といった、種々の理由から使用できる。例えば、調整係数ＧＭＯＭにより、すべてのサーフェス（surface）を削除することによって均質な領域だけの合成を可能にする、逆に言うと、サーフェス（surface）だけの合成を可能にすることができる。
【００５０】
利点としては、２つの調整関数、すなわち、勾配絶対値ルックアップテーブル（ＧＭＬＵＴ）３８０を利用する複合関数と、ハイパスフィルタ関数３５０、を装置３００によって与えられることである。
【００５１】
ハイパスフィルタ関数
ハイパスフィルタ関数は、近似勾配絶対値に対して機能する。この階段関数により、図５に記載のＧＭＭレジスタ５００のハイパススタート（ｈｉＰａｓｓＳｔａｒｔ）フィールド５０５によって定義されている勾配絶対値範囲のステップ値の両側に適用するハイパス調整係数０．０または１．０が生成される。次式に階段関数を表す。
【００５２】
hiPassOutput = (|G| >= hiPassStart) ? 1.0:0.0
【００５３】
図６にこの階段関数の出力例６００を示す。ｘ軸は、入力勾配の絶対値の範囲［０，…，２５５］の下端を示し、ｙ軸は、ハイパス出力の絶対値を示す。この例では、ステップ値ｈｉＰａｓｓＳｔａｒｔは９６に設定されている。従って、勾配絶対値９６未満のすべてのサンプルの場合は出力が０．０、それ以外のサンプルの場合は出力が１．０である。
【００５４】
勾配絶対値ルックアップテーブル
図３に記載されているように、ＧＭＬＵＴ３８０は入力として、｜Ｇ｜または｜Ｇ2｜の上位１３桁を採用する。マルチプレクサ３４０を介した選択は、ＧＭＭレジスタのインデックスソース（ｉｎｄｅｘＳｏｕｒｃｅ）フィールド５０４によって制御される。インデックスソース（ｉｎｄｅｘＳｏｕｒｃｅ）信号が真であれば、切捨て二乗絶対値が使用され、そうでない場合は、絶対値｜Ｇ｜が使用される。
【００５５】
｜Ｇ｜を使用することにより、選択された勾配絶対値範囲にわたって等値で分散されたＧＭＬＵＴテーブル入力項目を利用する線形関数がユーザに与えられる。
【００５６】
しかしながら、平方根近似は誤りを生じがちなので、｜Ｇ2｜を直接に使用した方が好都合であろう。｜Ｇ2｜の上位ビットを使用することにより、勾配絶対値範囲の下端で一緒に密接パックされているＧＭＬＵＴ入力項目を利用する非線形関数がもたらされる。ライティングの減衰のほとんどが勾配絶対値範囲の下端で行われるので、これは実際に望ましく目当てとされることである。
【００５７】
ＧＭＬＵＴは、入力項目１２８個（ｅｎｔｒｙ０，…，ｅｎｔｒｙｌ２７）のものとして編成されている。各入力項目は、長さ８ビットで、［０．０，…，１．０］の範囲の値を記憶する。ルックアップは、ＧＭＭレジスタ５００の、グレーン、ベース、上限範囲デフォルト（ｕｐｐｅｒＲａｎｇｅＤｅｆａｕｌｔ）および下限範囲デフォルト（ｌｏｗｅｒＲａｎｇｅＤｅｆａｕｌｔ）フィールド５０１〜５０４によって制御される。これらのフィールドにより、ユーザは、ルックアップテーブルのインデックス範囲１３ビットにどのように１２８個のテーブル入力項目を分散させるか指定できる。
【００５８】
ベースフィールド５０２は、インデックス範囲のどこでテーブルの最初の入力項目（ｅｎｔｒｙ０）をインデックスするか指定する。グレーンフィールド５０１は、ベース入力項目から開始して、どのくらいまでテーブル入力項目を広げるかを指定する。言い換えると、グレーンは、入力項目間の増分値の大きさである。インデックス範囲１３ビット未満に対応するようにテーブルをプログラミングする場合、上限範囲デフォルト（ｕｐｐｅｒＲａｎｇｅＤｅｆａｕｌｔ）および下限範囲デフォルト（ｌｏｗｅｒＲａｎｇｅＤｅｆａｕｌｔ）フィールド５０３、５０４で、上下範囲外領域（０または１であってもよい）のＧＭＬＵＴ出力値を指定する。
【００５９】
図７に、ｘ軸が範囲［０，…，４ｋ−ｌ］の勾配インデックスを示し、ｙ軸が範囲［０．０，…，１．０］のＧＭＬＵＴ出力値を示す、複合減衰関数７００の例を示す。この例では、ベースは１５３６、グレーンは２である。最近隣の２つのテーブル入力項目間が補間され、再び［０．０，…，１．０］の範囲に対応する８ビットを繰り返す小数が生成される。
【００６０】
反射マッピング
図８に記載されているように、反射率マッピング装置８００は、拡散反射率マップ８１０、鏡面反射マップ８２０を含んでいる。この装置は、視線ベクトル（ＥUVW）８０１と勾配ベクトル１０４とから反射ベクトル８０２を導き出すための反射ベクトル率回路８５０も含んでいる（図９および１１も参照）。ｍｕｘ８４０は、勾配ベクトルまたは算出反射ベクトル８０２の一方を鏡面反射率マップに直接に照合するように選択的に選択する。この装置への入力は、勾配と視線ベクトル１０４、８０１であり、出力は、拡散反射および鏡面反射強度（ＩdとＩs）８０３、８０４である。
【００６１】
反射率マッピング装置８００は、関連勾配ベクトル１０４およびユーザ指定の視線ベクトル（ＥUVW）８０１に基づいて、各サンプル２０５の鏡面および拡散反射強度（ＩsとＩd）を決定する。記載されているように、拡散反射マップ８１０に対してはサンプルの勾配ベクトル１０４が照合されるが、鏡面反射マップ８２０に対しては、一般に、図１０記載のバイパス（ｂｙｐａｓｓＲｅｆＶｅｃ）信号９０１に基づいて、勾配ベクトルまたは算出反射ベクトル８０２が照合される。
【００６２】
マップおよびインデックスベクトルは、いずれも置換されていない（ｕｎｐｅｒｍｕｔｅｄ）オブジェクト空間（Ｕ，Ｖ，Ｗ）空間において指定されたものであって、「物理的」すなわち「照射」空間に対するものではない。これの利点は、異なる視線方向のために反射率マップを計算しなおさなくて良いことである。しかしながら、異方性すなわち非直交のボリュームデータセットから推定される勾配は、正しい作業を行うために照射の計算に合った「物理的」空間に合わせて修正しなくてはならない。鏡面反射マップ８２０は、図１０に記載されているように、視線ベクトル（ＥｙｅＶｅｃｔｏｒ）レジスタ９００のバイパス（ｂｙｐａｓｓＲｅｆＶｅｃ）フィールド９０１のビットを真に設定することによって、鏡面反射マップ８２０が反射ベクトル８０２ではなく、勾配ベクトル１０４で直接に照合してもよい。レジスタ９００のその他のフィールド９０２〜９０４は、それぞれ、視線ベクトルの（Ｕ，Ｖ，Ｗ）成分を記憶する。
【００６３】
反射ベクトル
図１１に、目と反射ベクトルと勾配ベクトルとの間の関係を示す。視線ベクトル８０１は、ボリューム１０００の「サーフェス」上の点から目１００１までのベクトルと定義される。その座標は、フィールド９０２〜９０４によって、（Ｕ，Ｖ，Ｗ）オブジェクト空間に指定される。このベクトルは、長さ１に正規化されることに注意されたい。光源１００２から目１００１への反射は、勾配ベクトル１０４に依存している。
【００６４】
図９に記載されているように、反射率ベクトル回路８５０は、視線ベクトルレジスタ９００と勾配ベクトル１０４とによって指定される視線ベクトル８０１に基づいて反射ベクトル８０２を導き出す。勾配ベクトルは単位長のベクトルではない、すなわち、正規化されていない。回路８５０は、論理演算装置（スケーリング装置８５１、２つの内積発生器８５２、２つの乗算器８５３，および加算器８５４）を使用して、非正規化反射ベクトルＲｕを次式のように求める。
【００６５】
Ru=2*Gu*(Gu・E) - E(Gu・Gu)
【００６６】
ここで、Ｇｕは、非正規化勾配ベクトルであり、Ｅは反射ベクトルと視線ベクトルであり、符号・は、２つのベクトルの「内積」演算子である。反射率マップに照合される反射ベクトルにとって重要なのは絶対値ではなく、方向だけであることに注意されたい。
【００６７】
反射率マップ
上に述べたように、鏡面および拡散反射率マップは同じ構成を利用する。それぞれの反射率マップは、例えば１５３６個の入力項目を備えたテーブルとして構成される。これらの入力項目は３Ｄ仮想立方体の６面全体に分散される。すなわち、各面に２５６個の入力項目が存在する。各面は、６４個の入力項目から成る４つの象限を含んでいる。このマップに対して照合されるのは、ｍｕｘ８４０で選択される、正規化されていない勾配ベクトル、または、反射ベクトルである。繰り返すが、重要なのは絶対値ではなく方向である。
【００６８】
出力は、入ってくるベクトルの方向に基づいてマップの４つの入力項目から補間された値である。アクセスする立方体の面の選択は、最大ベクトル成分とその符合に基づいてなされる。例えば、（ｕ，ｖ，ｗ）空間におけるベクトルが（７５，０，０）の場合、立方体の右側の面（＋Ｕ）が選択される。それに対し、ベクトルが（−７５，０，０）の場合、立方体の左側の面が選択される。他の２つのベクトル成分の符合に基づいて、面の４半分が選択される。
【００６９】
最後に、結果強度値に対する補間のために、、４つの近傍テーブル入力項目のクラスタが選択される。この近傍は、立方体の面の中心からその面の外側縁部までのベクトルのたわみ角を示す２つの重みを計算することによって選択される。面の象限のそれぞれの方向に２の累乗個の入力項目が存在し、ベクトルの成分が２の累乗の値で表されているとすれば、これらの重みは、ベクトル成分のビットを単純に抽出することによって容易に導き出すことができる。
【００７０】
ライティング
図１２に、ライティング装置１１００を更に詳細に示す。この装置は、調整装置およびマッピング装置によって求めた信号を加算（（＋））または乗算（（×））する、複数の論理演算装置（ＡＬＵ）から構成されている。ライティング装置１１００は、拡散反射および鏡面反射係数（ｋd、ｋs）、調整放射、調整拡散反射、および調整鏡面反射強度（ＭＫe、ＭＩd、ＭＩs）、および鏡面反射色（Ｒs、Ｇs、Ｂs）１１０１を、分類ＲＧＢαサンプル２０５に適用する。
【００７１】
ＡＬＵによって実施される、３つのカラーチャネルそれぞれの照明方程式は、次のように示される。
【００７２】
Red = [((MId*kd)+Mke)*Rasample] + [(MIs*ks* (Rspecular*asample)]
Green =［((MId*kd)+Mke)*Gasample] + [(MIs*ks* (Gspecular*asample)]
Blue = [((MId*kd)+Mke)*Basample] + [(MIs*ks* (Bspecular*asample)]
【００７３】
勾配絶対値の平方根の近似
前述のように、勾配絶対値｜Ｇ｜は、｜Ｇ2｜の平方根を近似することによって導き出される。この近似法は、ニュートン−ラフソン（Ｎｅｗｔｏｎ−Ｒａｐｈｓｏｎ）近似法に基礎とするものである。一般に、ニュートン法では、入力数の平方根を求めるために多数の反復が行われる。前述より、入力は次の通りである。
【００７４】
|G2| = (GU*GU) + (GV*GV) + (GW*GW)
【００７５】
勾配絶対値を求める上で、平方根の精度はパイプライン式ハードウェア処理系のゲート数ほど重要ではない。したがって、この実施形態では、前述の方法の１ステップバージョンを使用する。
【００７６】
次に、従来技術で一般に反復非パイプライン式に使用される、平方根を近似するためのニュートン−ラフソン法について説明し、その後に、パイプラインの好適実現法と、従来の近似法を超えるその利点について詳しく述べる。
【００７７】
ニュートン−ラフソン法
ニュートン−ラフソン法は、特定の曲線（この場合は、平方根曲線）に沿った接線とその中点に基づいた反復アルゴリズムである。この方法は、次のように行われる。
【００７８】
最初に、入力数（ｎ）に基づいて、答のインテリジェント推定値（ｇ）を導き出す。
【００７９】
２．次に、この推定値で入力値を割った結果（ｄｉｖ）を求める。
div = n/g
【００８０】
３．次に、誤差を計算して、この推定値がどのくらい遠いか判断する。
error = |div-g|
ｇが正確な答えであれば、誤差がゼロになることを確認するのは簡単である。
【００８１】
４．算出誤差が大きすぎる場合、現時点の推定値（ｇ）とｄｉｖの間に引いた直線によって定められる接線に沿って中間点を計算することによって、次のように新しい推定値を推量する。
g=l/2*(g+div)
【００８２】
５．ｅｒｒｏｒが許容範囲内になるまでステップ２〜４を繰り返す（反復する）。
【００８３】
図１３に、入力数１６３の例についてニュートン−ラフソン法をグラフで示す。図１３で、ｘ軸は入力数を示し、ｙ軸は平方根を示す。曲線１２００は、平方根関数を示す。入力数（１６３）は、２つの２の累乗数１２８（２7）と２５６（２8）の間に位置する。したがって、下限値（１２８）の算定平方根を第１の推定値として選択する。これは、１１．３１３７である。推定答１１．３１３７で入力数（１６３）を割ると、１４．４０７３が得られる。これにより、誤差は３．０９３（１４．４０７３−１１．３１３７）である。次の推定値を以下のように計算する。
【００８４】
NewGuess = 1/2*(11.3137 + 14.4073) = 12.8605
【００８５】
このプロセスは、何らかの正確な結果が得られるまで続けられる。正確な答は、１２．７６７１４５である。
【００８６】
この方法は、除算と反復の両方を利用していることに注意されたい。除算機構は、回路機構において著しく高価であり、反復機構はパイプライン式アーキテクチャと調和しない。１／２を乗じる乗算は、２値数を単純に右に桁移動することによって実施できる。また、減算および可能補数演算（例えば、別の加算器）、およびそれぞれの反復に要する加算も存在する。
【００８７】
従来のハードウェア処理系
平方根を近似するためのニュートン−ラフソン法の従来技術ハードウェア処理系のほとんどは、非パイプライン式の反復処理系を使用している。これは、設計上、必要ゲート数を減少させるためである。一般的な設計をパイプライン式処理系に転向する場合、１回の反復について１度、除算器、加算器、および減算器を連続的なパイプライン段に再現しなくてはならない。また、パイプライン式処理系は多数のステップをサポートすることができず、最大推定回数と同じ回数だけ回路機構を再現しなくてはならない。このため、多数のゲートが必要になる。処理系の多くは、結果を得るために２０または３０回程度の反復を実行するが、これにより、莫大な数の遅延と回路をパイプライン式アーキテクチャに導入される。
【００８８】
処理系の一例として、シノプシス社（Ｓｙｎｏｐｓｙｓ  ｃｏｍｐａｎｙ）が、ニュートン−ラフソン法に基づいた同社のＤｅｓｉｇｎＷａｒｅライブラリに平方根回路（ＤＷ０２＿ｓｑｒｔ：  Ｃｏｍｂｉｎａｔｏｒｉａｌ  Ｓｑｕａｒｅ  Ｒｏｏｔ）を提供している（”ｗｗｗ．ｓｙｎｏｐｓｙｓ．ｃｏｍ．”参照）。これらは、約１０ナノ秒のサイクル時間に基づいた３００ｎｓの９０００のゲートまたは６００ｎｓの１１００のゲートという一般的な特性を備えた２つの可変部を有する、非パイプライン式装置である。これらは、言うまでもなく、パイプライン演算を排除して、３０〜６０回の反復のたびに同じ除算器、加算器、および減算回路を繰り返して使用している。
【００８９】
パイプライン式平方根演算
発明による好適な処理系は、ニュートン−ラフソン法に基づいたものであるが、パイプライン式である点で従来品と著しく異なっている。本発明の処理系では、反復を１回だけ利用して、両端を連結した事前定義「勾配」を利用して、曲線１２００と接線に沿った事前定義ポイントの平方根の事前定義予測値を推定する。別の要求事項として、ゲート数を最小限にするために、除算と乗算を利用せず、計算はすべて桁移動と加算だけで行う。
【００９０】
本発明は、２の累乗（２n）で表される数字の平方根が、２n/2であるという事実を利用したものである。そして、最初の近似は、単純な範囲判定によって行う。任意の入力について、最も近い２の累乗数を見つけ、その平方根を最初の推定値として使用する。ここで、範囲チェックを２の奇数累乗数（すなわち、２nのｎが奇数）に対して実施する場合、最初の推定値は、最大可能誤差を半分にした範囲の中間値となる。
【００９１】
図１４は、パイプライン式平方根近似装置１３００の好適処理系のブロック図である。当該装置１３００は、”範囲の選択及び推定（Ｓｅｌｅｃｔ  Ｒａｎｇｅ  ＆  Ｇｕｅｓｓ）”と表示されている組み合わせ論理ブロック１３１０、”入力を推定値で除算（Ｄｉｖｉｄｅ  Ｉｎｐｕｔ  ｂｙ  Ｇｕｅｓｓ）”と表示されている別の組み合わせ論理ブロック１３２０、加算器１３３０、およびシフタ１３４０を含んでいる。装置１３００は、入力１３０１として数字を取り入れ（例えば、｜Ｇ2｜）、出力１３０９として近似平方根を供給する。
【００９２】
基本的に、ブロック１３１０は、推定（ｇｕｅｓｓ）１３１１およびシフト（ｓｈｉｆｔ）１３１２を決定する。ｇｕｅｓｓの値は、入力以下の最も大きい２の奇数累乗数の、２の累乗数として表現される、最近似平方根である。この範囲試験は、単純なビット試験演算として実施できる。範囲試験は、再近似平方根が２５６（２8）である３２，７６８（ｈｅｘ  ０ｘ８０００、すなわち２15）で開始される。言い換えると、ｎが奇数であるので、平方根は、２(n+1)/2と「推定」される。対応する初期推定（ｇｕｅｓｓ）は２５６、シフト（ｓｈｉｆｔ）は８である。
【００９３】
ブロック１３２０は、入力（ｉｎｐｕｔ）を推定（ｇｕｅｓｓ）で除算する。推定（ｇｕｅｓｓ）が２の累乗数なので、除算は単純なシフト演算で実行できる。加算器１３３０が、推定（ｇｕｅｓｓ）を入力／推定（ｉｎｐｕｔ／ｇｕｅｓｓ）の結果に加算する。シフタ１３４０が、次式の２による最終除算を実施する。
【００９４】
output = (guess + (input / guess)) /2、または、
output = (2(n+1)/2 + (input/2(n+1)/2) /2.
【００９５】
適切な推定値を選択することによって、すなわち、ｎを奇数にすることによって、非常に正確な近似値が得られる。
【００９６】
推定（ｇｕｅｓｓ）は、常に２の累乗数であるので、除算は、入力（ｉｎｐｕｔ）の桁移動（ｓｈｉｆｔ）に単純化される。次に、ニュートン−ラフソン法により、加算器１３３０を使って、入力（ｉｎｐｕｔ）を推定（ｇｕｅｓｓ）で除算した結果に、推定（ｇｕｅｓｓ）を加算する。次に、この合計値を、シフタ１３４０において２で除算して入力の平方根の近傍近似を得る。
【００９７】
前述で使用したものと同じ例を使うと、入力（ｉｎｐｕｔ）が１６３の場合、ｉｎｐｕｔ＞＝０ｘ００８０すなわち１２８（２7）で、推定（ｇｕｅｓｓ）が１６（ｓｈｉｆｔ  ４）であり、ｏｕｔｐｕｔ＝（１６＋（１６３／１６））／２＝１３、すなわち、１６３の平方根を最も近い整数に丸めたもの、となる。
【００９８】
図１５は、正確な勾配絶対値１４０１と近似勾配１４０２の比較および当該近似法における誤差１４０３のグラフ１４００である。
【００９９】
この回路の実施に必要なゲート数はごく少数である。また、当該回路は、ループや反復を伴わないので、いずれかの論理を繰り返す必要なく、希望に応じたパイプ段数に論理を広げることができるので、パイプライン式設計に最適である。回路１３００の実際の処理系では８５０個のゲートを使用し、伝搬遅延は５ナノ秒であり、これは、前述のゲート数９０００の３００Ｎｓと比べて遜色が無い。
【０１００】
汎用関数近似法
精度向上のために、上に説明したニュートン−ラフソンの単一反復を、パイプライン式に一定数の追加反復に容易に拡張できることは、一見して明らかであろう。しかしながら、前述の方法は、２の累乗に関わるあらゆる計算に依存している。第２の後続の反復の場合にはその通りではない。第２の反復の場合、除算演算において、第１の反復の結果を使用する必要がある。第１の反復の結果が２の累乗数でないため、複合除算器回路を使用しなくてならず、これは、ゲートおよび遅延（delay）機構においてきわめて費用がかかる。
【０１０１】
しかしながら、当該方法は、２の累乗数でない固定数字集合による除算を伴う平方根関数の区分的線形近似によって、反復回数を増やさずによりよい近似値を提供するように改善できる。数字の集合は、決まったステップ数の少ない回数の桁送りと加算によって除算が実施できるように選択される。
【０１０２】
例えば、図１４の推定値範囲１３１０について考えてみる。可能推定値１２８と２５６の間の差が、所望の精度レベルに対して大きすぎると仮定する。実際、これら２つの間の推定値を選択し、かつ、入力／推定（ｉｎｐｕｔ／ｇｕｅｓｓ）の商を効率的に得られることが望ましい。１つの方法は、追加の加算器およびシフトで計算しやすい数字、入力／１２８（ｉｎｐｕｔ／１２８）と入力／２５６（ｉｎｐｕｔ／２５６）の平均値を取ることである。ｎを前述の入力数とする。このとき、平均値（ｎ／１２８）＋（ｎ／２５６））／２は、次式で与えられる。
【０１０３】
((n/128) + (n/256)) / 2 = (n/256 + 2n/256)/2 = 3n/512 = n/(512/3)
【０１０４】
すなわち、ｎを７ビットシフトした数字と、ｎを８ビットシフトした数字を加算して、その結果を１ビットシフトする。これは、ｎを５１２／３で除算したのと同じで、近似値で１７０．６６７、約１７１である。この除算は加算器と２回のシフトにより実施され、完全除算器回路よりもはるかに効率的である。
【０１０５】
その効果は、最初の”推定（ｇｕｅｓｓ）”を得た、入力の平方根のポイント数を２倍することによって、最初の推定（ｇｕｅｓｓ）の範囲の大きさを縮小することである。これにより、この修正型平方根シングルステップ近似法における、図１５記載の最大誤差が減少する。
【０１０６】
近似法の精度は、シングルステップで実施される加算器およびシフト演算の数を増加することによって、更に向上できることに注意されたい。例えば、次の３次近似法では、２つの加算器と３回のシフトが必要である。
【０１０７】
n/256= n >> 8
n/204  (n/256 + n/171) >> 1 = (n/256+((n/256 + n/128) >> 1)) >> 1
n/171  (n/256 + n/128) >> 1
n/146  (n/171 + n/128) >> 1 = (((n/256 + n/128) >> 1) + n/128) >> 1
n/128= n >> 7
【０１０８】
これを考える別の方法は、異なる桁送り値を別の方法で組み合わせることによって、平方根関数を表す曲線に沿って、勾配の異なる多数の接線が生成される点に注目することである。好適方法において、入力数を含む範囲から、始点と、この始点から次の範囲に適用される勾配接線とが選択される。
【０１０９】
一般に、平方根関数の範囲は次の所定の推定値を有するものとする。
【０１１０】
g0, g1, g2, …, gi, gi+1, …
【０１１１】
ここで、ｇiは、除算が、固定時間内で固定回路セットによって実施されるように選択される。その後、推定値と実際の平方根との間の誤差量を最小限にするように推定値の選択幅を予め設定しておいてもよい。具体的には、入力値ｎがｇi2とｇi+12との間にあるとき、これら２つの推定値に基づく近似における誤差は、それぞれ、１／２（ｎ／ｇi−ｇi）と１／２（ｎ／ｇi+1−ｎ／ｇi+1）になる。自分より小さい最適な推定値がｇiであり、自分より大きい最適な推定値がｇi+1である数値ｎは、２つの誤差が等しい値、すなわち次式で表される値である。
【０１１２】
１／２(n/gi-gi)=１／２(gi+1-n/gi+1)
【０１１３】
ｎについて解くと、ｎ＜ｇi＊ｇi+1の場合に、ｇiがより適切な推定値であり、そうでない場合には、ｇi+1がより適切な推定値であることが分かる。
【０１１４】
したがって、一連の推定値ｇ0，ｇ1，ｇ2，…，ｇi，ｇi+1について、図１４のブロック１３１０でｎの試験を行うための、一連の対応選択範囲ｇ0＊ｇ1，ｇ1＊ｇ2，ｇ2＊ｇ3，…，ｇi＊ｇi+1，…が存在する。従って、ブロック１３１１のように４の累乗数（２，８，３２，１２８，５１２，２Ｋ，８Ｋ，３２Ｋ）ずつ間隔を置いた大きな範囲に、２の奇数累乗数ずつ間隔をあけて推定値を置くのではなく、別の間隔、同一関数の別の距離をあけて配することができる。
【０１１５】
以上、平方根関数について具体的な説明を行ったが、前述の方法および装置を汎用化することにより、任意の線形または非線形関数を近似することができる。説明された関数は、関数を近似するに足る満足な連結接線に代表される。接線の範囲を画定する始点は、初期推定値および勾配とともに、テーブルとして格納できる。その後、図１４を参照しながら説明した論理と同様の単純な論理を使用して、最小数のゲートでパイプライン式にいずれかの精度まで任意の関数を近似することができる。
【０１１６】
以上のように、本発明は、図３に示すように、ボリュームレンダリングパイプラインにおいてサンプルのライティング調整係数を生成する装置であって、サンプルの勾配絶対値ベクトルを二乗して、二乗勾配絶対値を生成する第１の論理演算装置３１０と、二乗勾配絶対値から勾配絶対値を生成する第２の論理演算装置６００と、第１の論理演算装置に接続され、二乗勾配絶対値の所定数の上位ビットを切り捨てるシフトレジスタ３３０と、調整パラメータを記憶する勾配絶対値調整レジスタ５００と、第２の論理演算装置とシフトレジスタとに接続されており、インデックスソース信号が真の場合に切り捨て二乗勾配絶対値を選択し、インデックスソース信号が偽の場合に勾配絶対値を選択する第１のマルチプレクサ３４０と、インデックスによって照合を行って、不透明度、放射、拡散反射、および鏡面反射調整係数を生成するメモリテーブル３８０とを備えた装置であるため、効率的かつ柔軟にライティングの調整を行うことができる。
【０１１７】
本発明の精神および範囲内で、他のいろいろな適合態様や修正態様を作成できることを理解されたい。したがって、本発明の真の精神および範囲に属するそのような変更態様および修正態様のすべてを包含することが、添付請求項の目的である。
【０１１８】
【発明の効果】
本発明は、ボリュームレンダリングパイプラインにおいてサンプルのライティング調整係数を生成する装置であって、サンプルの勾配絶対値ベクトルを二乗して、二乗勾配絶対値を生成する第１の論理演算装置と、二乗勾配絶対値から勾配絶対値を生成する第２の論理演算装置と、第１の論理演算装置に接続され、二乗勾配絶対値の所定数の上位ビットを切り捨てるシフトレジスタと、調整パラメータを記憶する勾配絶対値調整レジスタと、第２の論理演算装置とシフトレジスタとに接続されており、インデックスソース信号が真の場合に切り捨て二乗勾配絶対値を選択し、インデックスソース信号が偽の場合に勾配絶対値を選択する第１のマルチプレクサと、インデックスによって照合を行って、不透明度、放射、拡散反射、および鏡面反射調整係数を生成するメモリテーブルとを備えた装置であるため、効率的かつ柔軟にライティングの調整を行うことができる。
【図面の簡単な説明】
【図１】  本発明におけるレンダリングパイプラインのブロック図である。
【図２】  本発明によるパイプラインの照射光（トレース）ステージのブロック図である。
【図３】  勾配絶対値調整装置のブロック図である。
【図４】  勾配絶対値範囲レジスタのブロック図である。
【図５】  勾配絶対値調整レジスタのブロック図である。
【図６】  ハイパスフィルタ関数のグラフを示す図である。
【図７】  減衰関数のブロック図である。
【図８】  反射率マッピング装置のブロック図である。
【図９】  反射ベクトルを計算するための回路のブロック図である。
【図１０】  視線ベクトルレジスタのブロック図である。
【図１１】  面の法線に関する視線ベクトルと反射ベクトルとの反射を示す図である。
【図１２】  照射光（トレース）ステージの照射装置のブロック図である。
【図１３】  ニュートン−ラフソン平方根近似のグラフを示す図である。
【図１４】  パイプライン式平方根近似装置のブロック図である。
【図１５】  近似結果を比較するグラフを示す図である。
【符合の説明】
１０１  ボクセルメモリ、１０２  ボクセル、１０３  サンプル、１０４  勾配、１０８  ピクセル、１１０  補間ステージ、２００  照射光（トレース）ステージ、３００  勾配絶対値調整装置、３２０  比較器、３４０  マルチプレクサ、３５０  フィルタ関数、３６０  回線、３７０  マルチプレクサ、５００  ＧＭＭレジスタ。
【図１】
0004435377.tif 000002
【図２】
0004435377.tif 000003
【図３】
0004435377.tif 000004
【図４】
0004435377.tif 000005
【図５】
0004435377.tif 000006
【図６】
0004435377.tif 000007
【図７】
0004435377.tif 000008
【図８】
0004435377.tif 000009
【図９】
0004435377.tif 000010
【図１０】
0004435377.tif 000011
【図１１】
0004435377.tif 000012
【図１２】
0004435377.tif 000013
【図１３】
0004435377.tif 000014
【図１４】
0004435377.tif 000015
【図１５】
0004435377.tif 000016