(57)【要約】【課題】ＮＵＲＢＳデータを用いた画像処理において、より高速かつ高品質にレンダリングすることが可能な曲面画像処理装置を提供する。【解決手段】本発明に係る曲面画像処理装置１００は、ＮＵＲＢＳデータを入力するデータ入力部１０１、ＮＵＲＢＳデータに座標変換を施す座標変換部１０２、各描画フレームのアニメーションデータを制御するアニメーション制御部１０３、ＮＵＲＢＳデータを有理ベジェデータに変換するデータ変換部１０４、有理ベジェ曲面パッチを細分割する曲面パッチ分割処理部１０５、分割後の曲面パッチの制御点に対する法線ベクトルの算出を行う法線計算部１０６、分割後の曲面パッチに透視変換を施す透視変換部１０７、及び曲面パッチに対しレンダリング処理を行うレンダリング処理部１０８を備える。【選択図】  図１
2004178576.tif 000002
【特許請求の範囲】
【請求項１】
３次元オブジェクトの形状データであるＮＵＲＢＳデータを用いて前記３次元オブジェクトを画面上に描画する曲面画像処理装置であって、
ＮＵＲＢＳ曲線及びＮＵＲＢＳ曲面を形成する前記ＮＵＲＢＳデータを、有理ベジェ曲線及び有理ベジェ曲面を形成する有理ベジェ制御点データにパラメータ変換するデータ変換手段と、
当該データ変換手段において変換された前記有理ベジェ制御点データから成る有理ベジェ曲面パッチを、複数の曲面パッチに細分割する曲面分割手段と、
前記曲面パッチを用いて前記３次元オブジェクトを描画する描画手段とを備える
ことを特徴とする曲面画像処理装置。
【請求項２】
前記曲面画像処理装置は、さらに、
前記ＮＵＲＢＳデータに座標変換を施し、前記３次元オブジェクトの視点情報を用いて視野座標系におけるＮＵＲＢＳデータに変換する座標変換手段を備える
ことを特徴とする請求項１記載の曲面画像処理装置。
【請求項３】
前記座標変換手段は、さらに、前記有理ベジェ制御点データに座標変換を施し、前記視点情報を用いて視野座標系における有理ベジェ制御点データに変換する
ことを特徴とする請求項２記載の曲面画像処理装置。
【請求項４】
前記ＮＵＲＢＳデータ及び前記有理ベジェ制御点データは、同次座標系で扱われる
ことを特徴とする請求項１記載の曲面画像処理装置。
【請求項５】
前記曲面分割手段は、前記有理ベジェ曲面パッチを形成する前記有理ベジェ制御点データに対し、射影空間におけるド・カステリョのアルゴリズムを用いて、
（２のｎ乗分の１）：（１−（２のｎ乗分の１））の比（但し、ｎは正整数）で内分する内分点を用いた線形補間を繰り返し適用し、新たな有理ベジェ制御点データを算出すると共に、当該新たな有理ベジェ制御点データを用いて前記有理ベジェ曲面パッチを分割する
ことを特徴とする請求項１記載の曲面画像処理装置。
【請求項６】
前記曲面分割手段は、１つのｎ次有理ベジェ曲線を形成する有理ベジェ制御点データから分割される２つのｎ次有理ベジェ曲線を形成する有理ベジェ制御点データを算出する分割処理部を少なくとも１つ以上備える
ことを特徴とする請求項１記載の曲面画像処理装置。
【請求項７】
前記ＮＵＲＢＳデータは制御点列とノットベクトルからなり、
前記データ変換手段は、
ノット挿入アルゴリズムを用いて前記ノットを前記ノットベクトルに挿入する演算を行うノット挿入部と、
当該ノット挿入部の演算により生じる制御点列に含まれる制御点の内から不要な制御点を削除する制御点トリミング部とを備える
ことを特徴とする請求項１記載の曲面画像処理装置。
【請求項８】
前記ノット挿入部は、前記ＮＵＲＢＳデータに含まれる初期ノットベクトル及び初期制御点列から、前記有理ベジエ制御点データを表す最終ノットベクトル及び最終制御点列へと変換する過程において、前記最終ノットベクトルの特定の位置にあるノットのインデックスを探索し、
前記制御点トリミング部は、探索された前記インデックスを用いて、前記最終ノットベクトルの特定の制御点を削除する
ことを特徴とする請求項７記載の曲面画像処理装置。
【請求項９】
前記制御点トリミング部は、前記ＮＵＲＢＳデータの次数が３であり、前記最終制御点列がＩを整数として(Q[0], Q[1], ... ,Q[I-1])であり、前記最終ノットベクトルが(u[0], u[1], ... , u[I+3])であり、前記ＮＵＲＢＳデータを描き始めるノットu[3]について、(u[j], ... , u[3], ..., u[k])の（ｋ−ｊ＋１）個のノットの値がu[3]に等しく多重度３以上で多重化されているとき、前記最終制御点列のうち(Q[0], Q[1], ... ,Q[k-4])の（ｋ−３）個の制御点を削除する
ことを特徴とする請求項７記載の曲面画像処理装置。
【請求項１０】
前記制御点トリミング部は、前記ＮＵＲＢＳデータの次数が３であり、前記最終制御点列がＩを整数として(Q[0], ... , Q[I-2], Q[I-1])であり、前記最終ノットベクトルが(u[0], ... , u[I+2], u[I+3])であり、前記ＮＵＲＢＳデータが描き終わるノットu[I]について、(u[j], ... , u[I], ..., u[k])の（ｋ−ｊ＋１）個のノットの値がu[I]に等しく多重度３以上で多重化されているとき、前記最終制御点列のうち(Q[j], ... , Q[I-2], Q[I-1])の（Ｉ−ｊ）個の制御点を削除する
ことを特徴とする請求項７記載の曲面画像処理装置。
【請求項１１】
前記制御点列を構成する各制御点は、重みを有し、
前記ノット挿入部は、前記制御点列を同次座標系において操作する
ことを特徴とする請求項７記載の曲面画像処理装置。
【請求項１２】
前記ノット挿入部は、前記ノットベクトルの特定の範囲にある各々の要素に対し、特定の多重度で多重化されるように、ノットを挿入する
ことを特徴とする請求項７記載の曲面画像処理装置。
【請求項１３】
前記曲面パッチはポリゴンデータであり、
前記描画手段は、複数の前記ポリゴンデータを画素データに変換して前記３次元オブジェクトを描画する
ことを特徴とする請求項１記載の曲面画像処理装置。
【請求項１４】
前記曲面分割手段は、さらに、
前記オブジェクトを構成する各曲面パッチの形状を定義する前記有理ベジェ制御点データを用いて透視変換することにより構成される２次元図形の符号付面積を算出する面積算出部と、
前記曲面パッチが前記オブジェクトの輪郭部であるシルエットエッジを形成する曲面パッチであるか否かを前記符号付面積の値に基づいて検出する検出部とを備える
ことを特徴とする請求項１記載の曲面画像処理装置。
【請求項１５】
前記曲面分割手段は、さらに、
前記検出部において前記シルエットエッジを形成する曲面パッチであるか否かを検出した結果と、前記面積算出部で算出される前記曲面パッチのスクリーン上での前記符号付面積の値とに応じて前記曲面パッチの細分割レベルを決定する細分割レベル決定部を備える
ことを特徴とする請求項１４記載の曲面画像処理装置。
【請求項１６】
前記細分割レベル決定部は、さらに、前記面積算出部で算出される符号付面積の最大値を特定し、特定された前記符号付面積の最大値に基づき前記シルエットエッジを形成する曲面パッチの前記細分割レベルを決定する
ことを特徴とする請求項１５記載の曲面画像処理装置。
【請求項１７】
前記面積算出部は、さらに、オブジェクトを構成する各曲面パッチの形状を定義する全ての制御点を透視変換することにより構成される各々の２次元図形の符号付面積を算出し、
前記細分割レベル決定部は、前記面積算出部で算出された前記曲面パッチの２次元図形の前記符号付面積の値の絶対値の和に基づき、前記シルエットエッジを形成する曲面パッチの前記細分割レベルを決定する
ことを特徴とする請求項１５記載の曲面画像処理装置。
【請求項１８】
前記細分割レベル決定部は、オブジェクトを構成する各曲面パッチを定義する第１軸及び第２軸に対してそれぞれ独立に細分割レベルを決定する
ことを特徴とする請求項１５記載の曲面画像処理装置。
【請求項１９】
前記面積算出部は、さらに、オブジェクトを構成する各曲面パッチの形状を定義する全ての制御点を透視変換することにより構成される２次元図形のうち、第１軸方向及び第二軸方向に隣接する前記２次元図形を参照し、参照された前記２次元図形の符号付面積をそれぞれ算出し、
前記細分割レベル決定部は、算出された第１軸方向に隣接する前記２次元図形の前記符号付面積の最大値と最小値の比に応じて、第１軸方向の細分割レベルを決定すると共に、算出された第２軸方向に隣接する前記２次元図形の前記符号付面積の最大値と最小値の比に応じて、第２軸方向の細分割レベルを決定する
ことを特徴とする請求項１８記載の曲面画像処理装置。
【請求項２０】
前記曲面分割手段は、さらに、
前記細分割レベル決定部においてオブジェクトを構成する各曲面パッチの細分割レベルを決定する前に、１レベル以上の細分割を実施する初期細分割部を備える
ことを特徴とする請求項１５記載の曲面画像処理装置。
【請求項２１】
前記細分割レベル決定部において決定される前記細分割レベルは、サブディビジョンアルゴリズムを用いてオブジェクトを構成する各曲面パッチを第１軸及び第２軸の方向に１回ずつ細分割する操作を１レベルとするか、もしくは前記第１軸又は前記第２軸いずれかの方向に１回細分割する操作を１レベルとし、前記細分割レベルは、前記細分割する操作の回数である
ことを特徴とする請求項１５記載の曲面画像処理装置。
【請求項２２】
前記面積算出部は、前記有利ベジェ制御点データのうち、パッチ上に存在する有理ベジェ制御点を透視変換することにより構成される２次元図形の符号付面積を算出し、
前記検出部は、当該符号付面積を用いてシルエットエッジを形成する曲面パッチであるか否かを検出する
ことを特徴とする請求項１４記載の曲面画像処理装置。
【請求項２３】
前記検出部は、さらに、第一曲面パッチについて算出された前記２次元図形の前記符号付面積の正負の符号と、前記第一曲面パッチに隣接する曲面パッチについて算出された前記２次元図形の前記符号付面積の正負の符号とを比較し、異符号であれば当該曲面パッチはシルエットエッジを形成する曲面パッチであると検出する
ことを特徴とする請求項１４記載の曲面画像処理装置。
【請求項２４】
前記検出部は、前記オブジェクトを構成する各曲面パッチの形状を定義する全ての制御点を透視変換することにより構成される２次元図形の符号付面積を指標として用いて、シルエットエッジを形成する曲面パッチであるか否かを判定する
ことを特徴とする請求項１４記載の曲面画像処理装置。
【請求項２５】
前記面積算出部は、さらに、オブジェクトを構成する各曲面パッチの形状を定義する全ての制御点を透視変換することにより構成される各々の２次元図形の符号付面積を算出した後、さらに、その正負の符号別の面積の総和を算出し、
前記検出部は、前記面積算出部で算出された前記正負の符号別の総和のどちらかが０となる場合であればシルエットエッジを形成する曲面パッチではないと検出する
ことを特徴とする請求項１４記載の曲面画像処理装置。
【請求項２６】
前記曲面分割手段は、さらに、
オブジェクトを構成する各曲面パッチの最大となる細分割レベルを予め決定する最大細分割レベル決定部を備える
ことを特徴とする請求項１４記載の曲面画像処理装置。
【請求項２７】
前記最大細分割レベル決定部は、オブジェクトを構成する各曲面パッチの形状を定義する制御点のうち、前記曲面パッチ上に存在する前記制御点によって張られる平面と前記曲面パッチ上に存在しない前記制御点の間の距離と、前記曲面パッチ上に存在する前記制御点を結んだ対角線の長さの比に応じて、前記各曲面パッチの最大となる細分割レベルを決定する
ことを特徴とする請求項２６記載の曲面画像処理装置。
【請求項２８】
前記最大細分割レベル決定部は、オブジェクトを構成する各曲面パッチの形状を定義する制御点のうち、前記曲面パッチ上に存在する前記制御点を結んだ線分の長さを算出し、前記曲面パッチ上に存在する前記制御点の間に存在する前記制御点について、隣接する前記制御点間の距離の和を算出し、算出された前記距離の和と前記線分の長さの比に応じて、前記各曲面パッチの前記最大細分割レベルを決定する
ことを特徴とする請求項２６記載の曲面画像処理装置。
【請求項２９】
前記オブジェクトを構成する前記曲面パッチは有理ベジェ曲面である
ことを特徴とする請求項１４から請求項２８のいずれか１項に記載の曲面画像処理装置。
【請求項３０】
前記曲面画像処理装置は、さらに、
前記有理ベジェ曲面の前記有理ベジェ制御点を用いて各制御点の法線を算出する法線算出手段を備え、
前記法線算出手段は、前記曲面パッチの四隅である第一制御点から第４制御点における法線算出の際に、４隅の制御点の１つを順に選択し、前記選択した制御点に対して隣接する二つの制御点を選択する選択部と、
前記選択した制御点と、前記隣接する２つの制御点との間の差分ベクトルをそれぞれ算出し、算出された２つの前記差分ベクトルの外積を算出し、正規化したものを、前記選択した制御点の法線として算出する算出部とを備え、前記曲面パッチの四隅の制御点全てに対して法線を算出する
ことを特徴とする請求項１記載の曲面画像処理装置。
【請求項３１】
前記選択部は、前記ベジエ曲面の四隅の第一制御点から第４制御点における法線算出の際に、前記選択した制御点に対して隣接する２つの制御点のうち少なくとも一つが前記選択した制御点と縮退して同じ座標となる場合においては、法線計算の対象となる選択した制御点あるいは前記２つの制御点に対して隣接し、且つ前記選択した制御点の座標と同じとならない二つの制御点を選択し、
前記算出部は、前記選択した制御点と、前記選択部において選択される２つの制御点との間の差分ベクトルをそれぞれ算出し、２つの前記差分ベクトルの外積を算出し、正規化したものを、前記選択した制御点の法線として算出する
ことを特徴とする請求項３０記載の曲面画像処理装置。
【請求項３２】
前記選択部は、前記ベジエ曲面の四隅の第一制御点から第４制御点における法線算出の際に、法線計算の対象となる前記選択した制御点に対して隣接している制御点が縮退している場合には、さらに当該制御点に隣接していて縮退していない制御点を選択する
ことを特徴とする請求項３０記載の曲面画像処理装置。
【請求項３３】
前記選択部は、前記算出部において算出される２つの差分ベクトルのなす角度が所定角度以下の場合においては、さらに他の制御点を選択する
ことを特徴とする請求項３０記載の曲面画像処理装置。
【請求項３４】
前記選択部は、法線計算の対象となる前記選択した制御点と所定距離以下の制御点を選択しない
ことを特徴とする請求項３０記載の曲面画像処理装置。
【請求項３５】
前記選択部は、前記ベジエ曲面の四隅の制御点における法線算出の際に、四隅の制御点の一つ（Ｐ００）に対して隣接する二つの制御点（Ｐ０１、Ｐ１０）を選択し、
前記算出部は、Ｐ００とＰ０１とＰ１０とが異なる場合には、前記選択した制御点（Ｐ００）に対して隣接する二つの制御点（Ｐ０１、Ｐ１０）と前記選択した制御点Ｐ００との間の差分ベクトルをそれぞれ算出し、２つの前記差分ベクトルの外積を算出し、正規化したものを、前記制御点の法線として算出し、
前記選択部は、前記選択した制御点Ｐ００とこれに隣接する二つの制御点Ｐ０１、Ｐ１０のうち少なくとも一つが同じ座標となる場合には、近傍の縮退していない制御点を選択し、
前記算出部は、前記選択した制御点と近傍の制御点との間の差分ベクトル、及び前記選択した制御点と前記二つの制御点Ｐ０１、Ｐ１０のうち縮退していない制御点との間の差分ベクトルを算出し、算出された２つの前記差分ベクトルの外積を算出し、正規化したものを、前記選択した制御点の法線として算出する
ことを特徴とする請求項３０記載の曲面画像処理装置。
【請求項３６】
３次元オブジェクトの形状データであるＮＵＲＢＳデータを用いて前記３次元オブジェクトを画面上に描画する曲面画像処理装置であって、
ＮＵＲＢＳ曲線及びＮＵＲＢＳ曲面から形成される前記ＮＵＲＢＳデータを、有理ベジェ曲線及び有理ベジェ曲面を形成する有理ベジェ制御点データにパラメータ変換するデータ変換手段と、
当該データ変換手段において変換された前記有理ベジェ制御点データから成る有理ベジェ曲面パッチを、複数の曲面パッチに細分割する曲面分割手段と、
前記曲面パッチを用いて前記３次元オブジェクトを描画する描画手段とを備え、
前記曲面分割手段は、さらに、
前記オブジェクトを構成する前記曲面パッチの形状を定義する前記有理ベジェ制御点データを用いて透視変換することにより構成される２次元図形の符号付面積を算出する面積算出部と、
前記曲面パッチが前記オブジェクトの輪郭部であるシルエットエッジを形成する曲面パッチであるか否かを前記符号付面積の値に基づいて検出する検出部と、
前記検出部において前記シルエットエッジを形成する曲面パッチであるか否かを検出した結果と、前記面積算出部で算出される前記曲面パッチのスクリーン上での前記符号付面積の値とに応じて前記曲面パッチの細分割レベルを決定する細分割レベル決定部とを備える
ことを特徴とする曲面画像処理装置。
【請求項３７】
前記検出部は、さらに、第一曲面パッチについて算出された前記２次元図形の前記符号付面積の正負の符号と、前記第一曲面パッチに隣接する曲面パッチについて算出された前記２次元図形の前記符号付面積の正負の符号とを比較し、異符号であれば当該曲面パッチはシルエットエッジを形成する曲面パッチであると検出する
ことを特徴とする請求項３６記載の曲面画像処理装置。
【請求項３８】
３次元オブジェクトの形状データであるＮＵＲＢＳデータを用いて前記３次元オブジェクトを画面上に描画する曲面画像処理方法であって、
ＮＵＲＢＳ曲線及びＮＵＲＢＳ曲面から形成される前記ＮＵＲＢＳデータを、有理ベジェ曲線及び有理ベジェ曲面を形成する有理ベジェ制御点データにパラメータ変換するデータ変換ステップと、
当該データ変換ステップにおいて変換された前記有理ベジェ制御点データから成る有理ベジェ曲面パッチを、複数の曲面パッチに細分割する曲面分割ステップと、
前記曲面パッチを用いて前記３次元オブジェクトを描画する描画ステップとを含む
ことを特徴とする曲面画像処理方法。
【請求項３９】
前記ＮＵＲＢＳデータは制御点列とノットベクトルからなり、
前記データ変換ステップにおいては、
ノット挿入アルゴリズムを用いて前記ノットベクトルを前記ノットベクトルに挿入する演算を行うノット挿入ステップと、
当該ノット挿入ステップにおける演算により生じる制御点列に含まれる制御点の内から不要な制御点を削除する制御点トリミングステップとを含む
ことを特徴とする請求項３８記載の曲面画像処理方法。
【請求項４０】
前記分割処理ステップには、さらに、
前記オブジェクトを構成する各曲面パッチの形状を定義する前記有理ベジェ制御点データを用いて透視変換することにより構成される２次元図形の符号付面積を算出する面積算出ステップと、
前記曲面パッチが前記オブジェクトの輪郭部であるシルエットエッジを形成する曲面パッチであるか否かを前記符号付面積の値に基づいて検出する検出ステップとを含む
ことを特徴とする請求項３８記載の曲面画像処理方法。
【請求項４１】
前記分割処理ステップには、さらに、
前記検出ステップにおいて前記シルエットエッジを形成する曲面パッチであるか否かを検出した結果と、前記面積算出ステップにおいて算出される前記曲面パッチのスクリーン上での前記符号付面積の値とに応じて前記曲面パッチの細分割レベルを決定する細分割レベル決定ステップを含む
ことを特徴とする請求項４０記載の曲面画像処理方法。
【請求項４２】
前記曲面画像処理方法には、さらに、
前記有理ベジェ曲面の前記有理ベジェ制御点を用いて各制御点の法線を算出する法線算出ステップを含み、
前記法線算出ステップには、前記曲面パッチの四隅である第一制御点から第４制御点における法線算出の際に、前記曲面パッチの４隅の制御点の１つを順に選択し、前記選択した制御点に対して隣接する二つの制御点を選択する選択ステップと、
前記選択した制御点と、前記隣接する２つの制御点との間の差分ベクトルをそれぞれ算出し、算出された２つの前記差分ベクトルの外積を算出し、正規化したものを、前記選択した制御点の法線として算出し、前記曲面パッチの４隅の制御点全てに対して法線を算出する算出ステップとを含み、前記曲面パッチの四隅の制御点全てに対して法線を算出する
ことを特徴とする請求項３８記載の曲面画像処理方法。
【請求項４３】
３次元オブジェクトの形状データであるＮＵＲＢＳデータを用いて前記３次元オブジェクトを画面上に描画する曲面画像処理装置に用いるプログラムであって、
ＮＵＲＢＳ曲線及びＮＵＲＢＳ曲面から形成される前記ＮＵＲＢＳデータを、有理ベジェ曲線及び有理ベジェ曲面を形成する有理ベジェ制御点データにパラメータ変換するデータ変換ステップと、
当該データ変換ステップにおいて変換された前記有理ベジェ制御点データから成る有理ベジェ曲面パッチを、複数の曲面パッチに細分割する曲面分割ステップと、
前記曲面パッチを用いて前記３次元オブジェクトを描画する描画ステップとを備える
ことを特徴とするプログラム。
【請求項４４】
前記ＮＵＲＢＳデータは制御点列とノットベクトルからなり、
前記データ変換ステップにおいては、
ノット挿入アルゴリズムを用いて前記ノットベクトルを前記ノットベクトルに挿入する演算を行うノット挿入ステップと、
当該ノット挿入ステップにおける演算により生じる制御点列に含まれる制御点の内から不要な制御点を削除する制御点トリミングステップとを含む
ことを特徴とする請求項４３記載のプログラム。
【請求項４５】
前記分割処理ステップには、さらに、
前記オブジェクトを構成する各曲面パッチの形状を定義する前記有理ベジェ制御点データを用いて透視変換することにより構成される２次元図形の符号付面積を算出する面積算出ステップと、
前記曲面パッチが前記オブジェクトの輪郭部であるシルエットエッジを形成する曲面パッチであるか否かを前記符号付面積の値に基づいて検出する検出ステップとを含む
ことを特徴とする請求項４３記載のプログラム。
【請求項４６】
前記分割処理ステップには、さらに、
前記検出ステップにおいて前記シルエットエッジを形成する曲面パッチであるか否かを検出した結果と、前記面積算出ステップにおいて算出される前記曲面パッチのスクリーン上での前記符号付面積の値とに応じて前記曲面パッチの細分割レベルを決定する細分割レベル決定ステップを含む
ことを特徴とする請求項４５記載のプログラム。
【請求項４７】
前記プログラムには、さらに、
前記有理ベジェ曲面の前記有理ベジェ制御点を用いて各制御点の法線を算出する法線算出ステップを含み、
前記法線算出ステップには、前記曲面パッチの四隅である第一制御点から第４制御点における法線算出の際に、前記曲面パッチの４隅の制御点の１つを順に選択し、前記選択した制御点に対して隣接する二つの制御点を選択する選択ステップと、
前記選択した制御点と、前記隣接する２つの制御点との間の差分ベクトルをそれぞれ算出し、算出された２つの前記差分ベクトルの外積を算出し、正規化したものを、前記選択した制御点の法線として算出し、前記曲面パッチの４隅の制御点全てに対して法線を算出する算出ステップとを含み、前記曲面パッチの四隅の制御点全てに対して法線を算出する
ことを特徴とする請求項４３記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、三次元コンピュータ・グラフィックスの分野において、不均一有理Ｂ−スプライン（ＮＵＲＢＳ：Ｎｏｎ  Ｕｎｉｆｏｒｍ  Ｒａｔｉｏｎａｌ  Ｂ−Ｓｐｌｉｎｅ）関数で記述される図形情報を用いて、３次元オブジェクトを描画する曲面画像処理装置及びその方法に関するものである。
【背景技術】
【０００２】
近年の画像処理分野では著しいコンピュータの性能向上に伴い、複雑な形状を表現できる自由曲面を扱うＣＡＧＤ（Ｃｏｍｐｕｔｅｒ  Ａｉｄｅｄ  Ｇｅｏｍｅｔｒｉｃ  Ｄｅｓｉｇｎ）システムや幾何学的モデリングシステムが増えている。自由曲面を作成するための表現方法はいくつか存在するが、中でも、ＮＵＲＢＳ曲線やＮＵＲＢＳ曲面は、数少ない制御点で滑らかな曲面を表現できるという利点がある。さらに制御点の他にも、重み、ノットといった形状を操作するためのパラメータが多く、局所的に形状を変化させることが可能であり、また、円弧や直線、放物線等の円錐曲線も統一的に表現できる、といった優れた表現能力を持つため、ＮＵＲＢＳデータで製作された画像モデルのレンダリング技術が求められている。
【０００３】
以下、このＮＵＲＢＳデータを用いたレンダリング技術における問題点を４つ（Ａ）〜（Ｄ）に分けて、各問題点についての説明を順番に行う。
まず最初に、（Ａ）として、ＮＵＲＢＳデータを用いて曲面画像を生成する処理全体における背景技術についての説明を行う。
図３（ａ）及び（ｂ）はＮＵＲＢＳ曲線及びＮＵＲＢＳ曲面例を示す図である。ＮＵＲＢＳ曲線３１は、パラメータｕを媒介変数としたパラメトリック曲線であり、その曲線形状は、複数の制御点列３２と、各制御点における重みｗと、パラメータｕの変化に伴う各制御点の影響力の変化を表すノットの列であるノットベクトルによって操作される。また、ＮＵＲＢＳデータの各制御点３２はＮＵＲＢＳ曲線３１上の点とは限らない。
【０００４】
ＮＵＲＢＳ曲面３３はパラメータｕ、ｖを媒介変数としたパラメトリック曲面であり、その曲面形状は、ＮＵＲＢＳ曲線３１と同様、３４で代表される制御点列と、重みと、ノットの列であるノットベクトルによって操作される。
一般的にＮＵＲＢＳ曲面Ｓ（ｕ、ｖ）は（数１）で表される。
【０００５】
【数１】
2004178576.tif 000003
（数１）においてｗは重み、Ｑは制御点を示している。また、（数１）において関数ＢはＢスプライン基底関数と呼ばれ、このＢスプライン基底関数をｄｅ Ｂｏｏｒ−Ｃｏｘの漸化式で表現すると、（数２）、（数３）のようになる。
【０００６】
【数２】
2004178576.tif 000004
【０００７】
【数３】
2004178576.tif 000005
（数２）、（数３）において、ｋは次数、ｔはパラメータ、ｔiはノットを示している。
従来、ＮＵＲＢＳデータの画像処理において、これらの数式に関する演算量は非常に多く、リアルタイム性を求められる画像処理システムでは表現できるＮＵＲＢＳデータ量が限られてしまうという問題点を有している。さらに、ＮＵＲＢＳデータを用いた画像処理をハードウェア化する場合に回路規模が大きくなり、小型化の妨げとなっている。
【０００８】
そこで、３次のＮＵＲＢＳ曲面という条件のもとで、演算量を削減するために前処理の段階で次の処理を行う曲面画像処理装置が開示されている（例えば、特許文献１参照）。
この曲面画像処理装置においては、（数２）、（数３）の漸化式を再帰的に計算せずに、一般３次式に展開し、ノットベクトルを代入することでＢスプライン基底関数を求めるための係数マトリックス（４×４）を算出する。これらの係数マトリックスは、ＮＵＲＢＳ曲面を定義する全ての制御点列に対して算出しておく。一方、リアルタイム処理では、パラメータｕ、ｖを変化させながら、制御点データと係数マトリックスを用いてＮＵＲＢＳ曲面上の各点を計算するようにしている。
【０００９】
また、この曲面画像処理装置では、更に演算処理を高速化するため、係数マトリックスと各パラメータｕ、ｖの差分Δｕ、Δｖを要素とするマトリックスを乗算して得られる差分マトリックスを導入し、リアルタイム処理では、パラメータｕ、ｖを変化させながら、制御点データと差分マトリックスとノットベクトルを用いてＮＵＲＢＳ曲面上の各点を再帰的に計算する。
【００１０】
次に、（Ｂ）として、ＮＵＲＢＳ曲面を用いてポリゴン分割する場合の背景技術についての説明を行う。
最初に、ベジエ（Ｂｅｚｉｅｒ）曲面やＢ−スプライン（Ｂ−Ｓｐｌｉｎｅ）曲面等のパラメットリック曲面について一般的な定義を述べておく。自由曲面の種類としては、ベジエ（Ｂｅｚｉｅｒ）曲面やＢ−スプライン（Ｂ−Ｓｐｌｉｎｅ）曲面等いくつかの種類があるが、より一般的な自由曲面の表現形式としてＮＵＲＢＳ曲面が広く用いられている。パラメトリック曲面は３次元空間において、２つの媒介変数（ｕ，ｖ）により曲面上の点（ｘ，ｙ，ｚ）が連続的に定義される。
【００１１】
すなわち、１組の媒介変数（ｕ，ｖ）に対して、１つの３次元座標（ｘ，ｙ，ｚ）が求められる。これらの関係を数学的に記述するために、重みを持った制御点と基底関数が用いられる。制御点はパラメトリック曲面の位置と形状の骨格を決めるために必要な３次元座標であり、その重みは制御点が曲面にどれだけの影響を及ぼすか、或いは端的に言えば、曲面が制御点にどれだけ引っ張られるかを示すパラメータである。制御点の３次元座標とその重みは、媒介変数ｕ、ｖそれぞれの方向に対応して離散的なインデックスｉ、ｊを持つ２次元配列で記述される。基底関数は、これらの制御点列とパラメトリック曲面の詳細な形状を対応づける関数である。
【００１２】
ここで、制御点の３次元座標を<Q[i][j]> = (qx[i][j]，qy[i][j]，qz[i][j])、制御点の重みをqw[i][j]とし、ｕ方向の基底関数をB[n][i](u)、ｖ方向の基底関数をB[m][i](v)とすると、ある媒介変数の組（ｕ，ｖ）に対する曲面上の点の座標<P> = (px, py, pz)は次式で表される。尚、以下では記号<>はベクトルを表すものとする。
<P> = (ΣΣ B[n][i](u) * B[m][j](v) * qw[i][j] * <Q[i][j]>)
/ (ΣΣ B[n][i](u) * B[m][j](v) * qw[i][j])
すなわち、
px = (ΣΣ B[n][i](u) * B[m][j](v) * qw[i][j] * qx[i][j])
/ (ΣΣ B[n][i](u) * B[m][j](v) * qw[i][j])
py = (ΣΣ B[n][i](u) * B[m][j](v) * qw[i][j] * qy[i][j])
/ (ΣΣ B[n][i](u) * B[m][j](v) * qw[i][j])
pz = (ΣΣ B[n][i](u) * B[m][j](v) * qw[i][j] * qz[i][j])
/ (ΣΣ B[n][i](u) * B[m][j](v) * qw[i][j])
但し、i = 0, 1, 2, ... , (I-1)、j = 0, 1, 2, ... , (J-1)とし、記号Σはこの範囲のｉ及びｊについて和をとることを示す。ここでＩはｕ方向の制御点数、Ｊはｖ方向の制御点数である。またｎ及びｍは、ｕ方向及びｖ方向の基底関数の次数である。
【００１３】
パラメトリック曲面としてＮＵＲＢＳ曲面を考えると、基底関数は媒介変数と次数（又は階数）の他に、ノットベクトルを用いて定義される。
このノットベクトルとは、媒介変数の取り得る値を、曲面の形状を特徴づけるような、ある間隔を持って小さい方から順に並べたものである。媒介変数ｕ，ｖそれぞれの方向に対し、異なる次数と異なるノットベクトルを用いて異なる基底関数を定義することができる。ＮＵＲＢＳ曲面の基底関数B[n][i](u)及びB[m][j](v)は、ｕ方向のノットベクトル(u[0], u[1], ... , u[I+n+1])及びｖ方向のノットベクトル(v[0], v[1], ... , v[J+m+1])を用いて、以下のＣｏｘ−ｄｅＢｏｏｒの漸化式で表される。すなわちｕ方向について、
B[n][i](u) = [(u - u[i]) / (u[i+n] - u[i])] * B[n-1][i](u)
+ [(u[i+n+1] - u) / (u[i+n+1] - u[i+1])] * B[n-1][i+1](u)
である。但し、上式において次数ｎは０でない。上式は漸化式であるから、例えばｎ＝３の基底関数は、ｎ＝２の基底関数により求められる。これを繰り返すとｎ＝０の基底関数が必要になるが、ｎ＝０のときの基底関数B[0][i](u)は、ｕの範囲が(u[i], u[i+1])の間にあるときに限り値１をとり、それ以外では値０をとるものとする。また、ノットベクトルの要素はインデックスが増すごとに値が等しいか単調増加であり、前記の漸化式中の分数で表される係数部分は、分母が０となる場合は０と定義される。ちなみに前記の漸化式は、次数の代わりに階数を用いて表現しても良い。階数は次数ｎに１を加えた値である。また、ｖ方向についても同様に、以下の基底関数が定義される。
【００１４】
B[m][j](v) = [(v - v[j]) / (v[j+m] - v[j])] * B[m-1][j](v)
+ [(v[j+m+1] - v) / (v[j+m+1] - v[j+1])] * B[m-1][j+1](v)
さて、ＮＵＲＢＳ曲面をポリゴンに分割するとき、上に示したような漸化式に必要なパラメータを代入し、曲面上の３次元座標<P> = (px, py, pz)を求める必要がある。
【００１５】
以下では説明を簡単にするために、ＮＵＲＢＳ曲面ではなく、まずＮＵＲＢＳ曲線を用いて説明を行う。図１９において、ＮＵＲＢＳ曲線１９０１は、次数ｎ＝３で、４つの制御点からなる制御点列(Q[0]，Q[1]，Q[2]，Q[3])と、要素数８のノットベクトル(u[0], u[1], ... , u[7])により定義されている。このＮＵＲＢＳ曲線１９０１を描くための媒介変数はｕのみであり、２次元座標<P> = (px, py)は次のように表される。
【００１６】
<P> = (Σ B[n][i](u) * qw[i] * <Q[i]>)
/ (Σ B[n][i](u) * qw[i])
px = (Σ B[n][i](u) * qw[i] * qx[i])
/ (Σ B[n][i](u) * qw[i])
py = (Σ B[n][i](u) * qw[i] * qy[i])
/ (Σ B[n][i](u) * qw[i])
図１９及び上式では視覚的に分かりやすい２次元空間でＮＵＲＢＳ曲線を定義しているが、Ｚ座標pzも定義して３次元空間におけるＮＵＲＢＳ曲線であってもよい。ちなみに、ノットベクトルの要素数と次数及び制御点数との関係は、次数ｎ、制御点数Ｉとすると、ノットベクトルの要素数（Ｉ＋ｎ＋１）で求めることができる。図１９の場合、４＋３＋１＝８である。また図１９において、ＮＵＲＢＳ曲線１９０１が描かれるノットベクトルの有効範囲は(u[3], u[4])の範囲である。このように、次数ｎ＝３のＮＵＲＢＳ曲線を描くためには少なくとも４つの制御点が必要となる。次数ｎ＝３を一定にして、制御点を１つ増やすと、ノットベクトルの要素も１つ増え、ＮＵＲＢＳ曲線が描かれるノットベクトルの有効範囲は(u[3], u[5])と拡大していく。この様子を図２０に示す。尚、図１９及び図２０からも分かるように、一般的にＮＵＲＢＳ曲線は制御点を通過しない。但し、後述するように、ノットベクトルの並びが有理ベジエ曲線を表すような場合には、制御点を端点に持つようになる。
【００１７】
次に、図１９に示されたＮＵＲＢＳ曲線を２つの線分に近似することを考える。そのためには、例えば図２１のように、ＮＵＲＢＳ曲線上に両端と中間点の３点をとり、直線で結べば良い。媒介変数ｕの値としては、ノットベクトルの有効範囲が(u[3], u[4])であるから、例えばu[3]及びu[4]と、その中間値である (u[3] + u[4]) / 2 をそれぞれ上式に代入し、ＮＵＲＢＳ曲線上の点の位置座標を求めることができる。図２０に示されたＮＵＲＢＳ曲線２００１を２つの線分に分割する場合には、ノットベクトルの有効範囲が(u[3], u[5])であるから、媒介変数ｕの値として例えばu[3]、u[4]、u[5]をとることができる。もちろん、ＮＵＲＢＳ曲線の制御点数や、分割する線分の数はこの例に限らず、自由に設定することができる。
【００１８】
前記を踏まえて、３次元空間におけるＮＵＲＢＳ曲面を平面ポリゴンに分割することを考える。図２２に最も単純なＮＵＲＢＳ曲面２２０１を示す。図２２において、ｕ方向及びｖ方向の次数はともにｎ＝ｍ＝３であり、ｕ方向及びｖ方向の制御点数はともにＩ＝Ｊ＝４個、すなわち４×４＝１６個である。ノットベクトルはｕ方向、ｖ方向にそれぞれ(u[0], u[1], ... , u[7])，(v[0], v[1], ... , v[7])であり、ノットベクトルの要素数はｕ方向、ｖ方向ともに（Ｉ＋ｎ＋１）＝（Ｊ＋ｍ＋１）＝８である。ＮＵＲＢＳ曲面２２０１が描かれるノットベクトルの有効範囲は(u[3]，u[4])及び(v[3]，v[4])の範囲である。従って、例えばｕの値としてu[3]及びu[4]とその中間点である (u[3] + u[4]) / 2 を、ｖの値としてv[3]及びv[4]とその中間点である (v[3] + v[4]) / 2 をとり、合計９個の曲面上の点を求めることができる。これら９個の曲面上の点を用いて４つの四角形ポリゴンに分割することが可能である。もちろん８つの三角形ポリゴンに分割しても良い。また、ＮＵＲＢＳ曲面の制御点数や、分割するポリゴンの数はこの例に限らず、自由に設定してもよい（例えば、特許文献２参照）。
【００１９】
次に、（Ｃ）として、ベジェ曲面等のパラメトリック曲面を細分割して微小なポリゴンとして扱う場合における背景技術についての説明を行う。
現在、パラメトリックな曲面を含む３次元オブジェクトを２次元の画像表示装置に表示する方法として、オブジェクトを多数の微小な平面ポリゴンの集合体に近似してレンダリングする方法が一般的に用いられている。
【００２０】
そして、ＮＵＲＢＳ曲面やベジェ曲面等のパラメトリック曲面の形式で滑らかに表現されたオブジェクトは、３次元画像を三角形等の多角形ポリゴンの集合で表現するオブジェクトと比較してデータ量が少なく、近年急速に発達しているネットワークを利用した伝送等とも親和性が高いものとなる。
パラメトリック曲面をポリゴンに分割する一般的な方法としては、定義されたパラメトリック曲面の方程式において媒介変数の値を一定の間隔を持って離散的に変化させることによりパラメットリック曲面上の点を直接求め、これらの点を隣接するものどうし複数組み合わせて平面的なポリゴンを生成するという方法が用いられる。このような処理を一般的にテッセレーションと言う。
【００２１】
代表的なパラメトリック曲面である４階（３次）の有理ベジェ曲面の例を図３０に示す。４階（３次）の有理ベジェ曲面は、以下の［数４］の形式で表される。
【００２２】
【数４】
2004178576.tif 000006
パラメトリック曲面は、ｕ、ｖ２個の独立したパラメータを用いて表現される。但し、０＜＝ｕ＜＝１、０＜＝ｖ＜＝１である。Ｑij（ｉ＝０，．．．，３、ｊ＝０，．．．，３）はベジェ曲面の形状を定義する制御点であり、４階（３次）の場合は４×４＝１６点存在する。制御点のうち、Ｑ00、Ｑ30、Ｑ03、Ｑ33は曲面上に存在するが、それ以外は曲面上に存在しない。各制御点は、Ｘ、Ｙ、Ｚ成分に加えて、ウェイトに相当するＷ成分を含んでいる。従って、曲面上の任意の点Ｐは、Ｐ（Ｘ（ｕ，ｖ）／Ｗ（ｕ，ｖ）、Ｙ（ｕ，ｖ）／Ｗ（ｕ，ｖ）、Ｚ（ｕ，ｖ）／Ｗ（ｕ，ｖ））で表される。また、ベジェ曲面には凸包性があり、曲面は制御点によって張られる多面体に完全に包含されることが知られている。
【００２３】
オブジェクトは、上述したパラメトリック曲面の集合で表現される。以降では、オブジェクトを構成するパラメトリック曲面をパッチと称して説明を行う。オブジェクトを高精彩に描画するためには、各パッチを細かい多数のポリゴンで近似して表現すれば良い。しかし、処理するポリゴン数が増大すると、そのための計算負荷が非常に大きくなってしまう。そこで、ポリゴンの生成量をできる限り抑制しつつ、高精彩な描画が可能な方法の確立が求められる。
【００２４】
そのために、従来の技術では曲面パッチを左曲面パッチと右曲面パッチに分割するごとに、分割された各々のパッチの平坦度を算出し、平坦度が許容値以上の場合には再び当該パッチを分割する。そして、全ての細分割パッチの平坦度が許容値内に収まるまで処理を繰り返す方法が提示されている（例えば、特許文献３参照）。
また、図４９に示すように、制御点の端点を結んでエッジを生成し、エッジの中点からポリゴンの表面を表現する曲面上の中点へのベクトルを算出し、これを弦の偏移ベクトルとする。そして、弦の偏移ベクトルを透視変換した時のスクリーン上におけるベクトル長に応じて、解像度の量を決定する方法もある（例えば、特許文献４参照）。
【００２５】
次に、（Ｄ）として、細分割された曲面パッチをなす各制御点の法線計算についての背景技術について説明を行う。
ＮＵＲＢＳ曲面を用いてノット挿入を行いパラメータ変換されたベジエ曲面は、（ｎ＋１）×（ｎ＋１）個の制御点が与えられると、双ｎ次のベジエ曲面を構成する。ここでは単にｎ次のベジエ曲面と呼ぶ。そして、三次元コンピュータ・グラフィックスの分野においては、曲面の制御のしやすさから三次のベジエ曲面が多用される（例えば、非特許文献４参照）。
【００２６】
三次のベジエ曲面は、一般に下記に示す（数５）にて表される。（数５）におけるＰｉｊは、制御点の座標であり、Ｊｉ、Ｋｊは（数６）、（数７）にて表されるＢｅｒｎｓｔｅｉｎ関数である。Ｐ（ｕ，ｖ）は、特定のｕ、ｖ（０≦ｕ，ｖ≦１）における自由曲面上の頂点座標を表す。
【００２７】
【数５】
2004178576.tif 000007
【００２８】
【数６】
2004178576.tif 000008
【００２９】
【数７】
2004178576.tif 000009
ベジエ曲面は、（数５）及び（数６）の式を用いて、直接描画されることもある。この場合、曲面と他の曲面や投影面と交差する辺の計算に反復法等が用いられ、計算時間が多大となる。
【００３０】
一方、このような直接描画方法よりも早く描画させるため、Ｐ（ｕ，ｖ）を特定のパラメータの組（ｕ，ｖ）において評価することで自由曲面上の点を算出して、これら点を結んでできる多角形の集合で近似して描画するテッセレーション方法が用いられる（例えば、特許文献５参照）。
或いは、他の描画方法として、隣接する制御点間に対して座標を平均することで新たな制御点を発生させるという処理を繰り返す、いわゆる細分割法と呼ばれる方法により多角形で近似して描画されることもある（例えば、特許文献６参照）。
【００３１】
そして、三次元コンピュータ・グラフィックスの分野においては、物体の形状の品質ばかりでなく、色彩、陰影付け等の処理も画質を決める重要な要素である。各曲面における陰影付けは、物体の法線が用いられ、法線を正確に算出することが重要となる。
【特許文献１】特開２００１−２１８９７７号公報（第７−２３頁）
【特許文献２】特開平３―２０１０７３号公報
【特許文献３】特開平１１−００７５４４号公報（第１１−１４頁）
【特許文献４】特開２００１−５２１９４号公報（第５頁）
【特許文献５】特開２００１−３３１８１２号公報
【特許文献６】特開平１１−７５４４号公報
【非特許文献１】Prautzsh,H.,"A Short Proof of the Oslo Algorithm," Comp. Aid. Geom.Des., Vol.1, pp.95-96, 1984
【非特許文献２】Bohm, W.,"Inserting New Knots into B-spline Curves" Comp. Aid. Des.,Vol.12, pp.199-201, 1980
【非特許文献３】Gerald E.Farin 著,原孝成ら訳,共立出版,  "ＮＵＲＢＳ  射影幾何学から実務まで", PP119-122
【非特許文献４】「コンピュータ  グラフィックス第２版」、川合慧監訳、凸版印刷株式会社総合研究所画像情報センター訳、日刊工業新聞社
【発明の開示】
【発明が解決しようとする課題】
【００３２】
しかしながら、曲面画像処理装置全体の計算手順である（Ａ）で扱う背景技術においては、従来の曲面画像処理装置では、前処理の段階で各係数マトリックスを算出するため、ＮＵＲＢＳデータ以外のデータ量が増大してしまうという問題点を有している。
また、入力データは３次のＮＵＲＢＳ曲面に限定されるという問題を有していた。さらに、差分マトリックスを用いた場合、各パラメータｕ、ｖの増分は一定値（Δｕ、Δｖ）に限定されてしまうという問題を有している。またさらに、厳密にＮＵＲＢＳ曲面を表現しようとすると、係数マトリックスを有理化する必要があるため、算出したＮＵＲＢＳ曲面上の各点を除算する必要があり除算による演算量が増加してしまうという問題を有している。
【００３３】
次に、上述の（Ｂ）におけるＮＵＲＢＳ曲面を描画する場合には、ＮＵＲＢＳ曲面上の点を直接求めることによりポリゴン分割を行っていた。しかしながら、この方法ではＮＵＲＢＳ曲面上の点の座標を計算するために、前述したＣｏｘ−ｄｅＢｏｏｒの漸化式で表される基底関数を求める必要があり、非常に多くの演算量を必要とするという課題がある。
【００３４】
また、従来、以上のようなパラメトリック曲面の直接的なポリゴン分割、すなわちテッセレーション処理はＣＰＵが演算を行う。しかしながら、対象となる３次元オブジェクトをより細かくリアルに表現するためには、必然的に曲面を近似するためのポリゴン分割数を大きくする必要があり、ＣＰＵにかかる負荷はますます大きくなる。また、パラメトリック曲面をポリゴンに分割する回路（テッセレータ）をハードワイヤードで構成する場合においても、曲面上の点を求めるための演算回路の規模が大きくなるという課題がある。
【００３５】
そこで、これらの課題を解決するために、本発明においては、ＮＵＲＢＳ曲面上の点を直接求めるのではなく、ＮＵＲＢＳ曲面を、比較的単純な有理ベジエ曲面に等価変換してから、その有理ベジエ曲面上の点を直接求めることによりポリゴン分割を行う。というのも、有理ベジエ曲面は、サブディビジョン法を適用することにより、曲面上の制御点を容易に求めることができるためである。尚、Ｂスプライン曲線をノット挿入によって区分有理ベジェ曲線に変換する方法には、ＯｓｌｏアルゴリズムやＢｏｈｍによる方法がある（例えば、非特許文献１、又は非特許文献２参照）。
【００３６】
そこでまず、ＮＵＲＢＳ曲面を有理ベジエ曲面に等価変換する際に生じる課題について述べると、ＮＵＲＢＳ曲面を有理ベジエ曲面に等価変換するためには、ノット挿入という方法を用いることができる。以下に、ノット挿入アルゴリズムを用いた曲面変換方法を詳細に説明する。
【００３７】
まずは説明を容易にするため、ＮＵＲＢＳ曲線を有理ベジエ曲線に変換する方法について説明する。ＮＵＲＢＳ曲線におけるノット挿入については、以下のアルゴリズムが知られている。すなわち、次数がｎ、制御点列が(Q[0], Q[1], ... , Q[I-1])であり（制御点数Ｉ）、初期のノットベクトルが(u[0], u[1], ... , u[I+n])であるとき（ノットベクトルの要素数Ｉ＋ｎ＋１）、ノットu[k]とu[k+1]の間に新しいノット〜uを１つ挿入すると（ノット挿入位置ｋ）、新しい制御点列(Q'[0], Q'[1], ... , Q'[I])は次式で表される。
【００３８】
<Q'[i]> = (1 - a[i]) * <Q[i-1]> + a[i] * <Q[i]>
但し、上式においてｉは０でない。ｉ＝０の場合は以下で表される。
<Q'[0]> = a[0] * <Q[0]>
ここで、上式に含まれる係数配列a[i]は次式で表される。
a[i] = 1  （ｉがｋ−ｎ以下のとき）
a[i] = 0  （ｉがｋ＋１以上のとき）
a[i] = (〜u - u[i]) / (u[i+n] - u[i])  （ｉがそれ以外のとき）
例えば、初期の制御点列を(Q[0], Q[1], Q[2], Q[3])、初期のノットベクトルを(u[0], u[1], ... , u[7])とし、ノットu[3]とu[4]の間に、値がu[3]に等しい新しいノット〜uを１つ挿入するとき、新しい制御点列(Q'[0], Q'[1], ... , Q'[4])は以下のようになる。すなわち、ノットの挿入位置はｋ＝３であるから、係数配列は
a[0] = 1
a[1] = (〜u - u[1]) / (u[4] - u[1]) = (u[3] - u[1]) / (u[4] - u[1])
a[2] = (〜u - u[2]) / (u[5] - u[2]) = (u[3] - u[2]) / (u[5] - u[2])
a[3] = (〜u - u[3]) / (u[6] - u[3]) = 0
a[4] = 0
であって、これらを用いて
<Q'[0]> = a[0] * <Q[0]> = <Q[0]>
<Q'[1]> = (1 - a[1]) * <Q[0]> + a[1] * <Q[1]>
<Q'[2]> = (1 - a[2]) * <Q[1]> + a[2] * <Q[2]>
<Q'[3]> = (1 - a[3]) * <Q[2]> + a[3] * <Q[3]> = <Q[2]>
<Q'[4]> = (1 - a[4]) * <Q[3]> + a[4] * <Q[4]> = <Q[3]>
となる。これは、初期の制御点<Q[1]>が消え、新しい位置<Q'[1]>及び<Q'[2]>に制御点が生成されたことを示す。
【００３９】
ところで、実際には制御点は重みを持っている。この場合は、制御点の位置座標を同次座標に変換してから上式に代入する必要がある。すなわち、制御点が２次元座標<Q[i]> = (qx[i], qy[i])と表され、重みがqw[i]のとき、同次座標は位置座標に重みを乗算して、<Q[i]> = (qw[i]*qx[i], qw[i]*qy[i], qw[i])となる。また、制御点座標が３次元座標<Q[i]> = (qx[i], qy[i], qz[i])と表されるとき、同次座標は<Q[i]> = (qw[i]*qx[i], qw[i]*qy[i], qw[i]*qz[i], qw[i])となる。このように、同次座標に変換された制御点を用いて上述のノット挿入を行うと、最終的な制御点列も同次座標になるので、通常座標に戻すために重みで除算する必要がある。
【００４０】
しかしながら、ノット挿入アルゴリズムを用いてＮＵＲＢＳ曲線を有理ベジエ曲線に等価変換する際、捨てるべき不要な制御点が生じ、さらに捨てる制御点の数自体が初期ノットベクトルの並び方によって変化するという問題がある。従って、ノット挿入によりＮＵＲＢＳ曲線を単に有理ベジエ曲線に変換するのみでは、捨てるべき制御点の位置と数が明確でなく、後の細分割処理が困難となるという課題が生じる。
【００４１】
そして、図１９のようなＮＵＲＢＳ曲線を有理ベジエ曲線に変換した際に不要な制御点が生じることの具体例を以下に説明する。
不要な制御点が生じる第一例として、図１９のＮＵＲＢＳ曲線１９０１は、次数ｎ＝３であり、制御点列(Q[0], Q[1], Q[2], Q[3])及びノットベクトル(u[0], u[1], ... , u[7])で定義されている。すなわち、制御点数は４であり、ノットベクトルの要素数は８である。但し、全ての異なるインデックスｉ、ｊ（ｉ＜ｊ）に対してu[i]＜u[j]であると仮定する。ここで、図２３のように、初期のノットベクトル(u[0], u[1], ... , u[7])に、１つずつノットを挿入していき、最終的なノットベクトルが(u'[0], u'[1], u'[2], ...)となったとする。ここで以下の関係を満たせば、生成された最終的なＮＵＲＢＳ曲線は、形状を変えずに１つの有理ベジエ曲線に等価変換される。
【００４２】
u[0] = u'[0]
u[1] = u'[1]
u[2] = u'[2]
u[3] = u'[3] = u'[4] = u'[5]
u[4] = u'[6] = u'[7] = u'[8]
u[5] = u'[9]
u[6] = u'[10]
u[7] = u'[11]
すなわち、ＮＵＲＢＳ曲線の初期のノットベクトルの有効範囲が(u[3], u[4])であるから、この範囲内のノットu[3]及びu[4]が、それぞれ多重度３となるように（次数ｎ＝３に等しくなるように）ノットを挿入していき、最終的なノットベクトル(u'[0], u'[1], u'[2], ... , u'[11])を得る。この例では、新たなノットが４つ挿入されたことになる。従って、最終的な制御点数も４増加して８となって、最終的な制御点列は(Q'[0], Q'[1], ... , Q'[7])となる。このようなノットの並び方で定義されるＮＵＲＢＳ曲線は、有理ベジエ曲線と等価であり、元のＮＵＲＢＳ曲線と形状が完全に一致することが知られている。ここで、「ノット挿入後の最終的な制御点数」は８であるが、「有理ベジエ曲線を定義する制御点数」は４であるので、最終的な制御点列のうち有理ベジエ曲線を表すのに４つの制御点が不要であることが分かる。
【００４３】
また、不要な制御点が生じる第二の例として、初期のノットベクトルが１つ増えて(u[0], u[1], ... , u[8])である場合を考える。但し、全ての異なるインデックスｉ、ｊ（ｉ＜ｊ）に対してu[i]＜u[j]であると仮定する。有理ベジエ曲線を得るためには、上の例と同様に、ノット挿入後の最終的なノットベクトル(u'[0], u'[1], u'[2], ...)を以下のようにすればよい。
【００４４】
u[0] = u'[0]
u[1] = u'[1]
u[2] = u'[2]
u[3] = u'[3] = u'[4] = u'[5]
u[4] = u'[6] = u'[7] = u'[8]
u[5] = u'[9] = u'[10] = u'[11]
u[6] = u'[12]
u[7] = u'[13]
u[8] = u'[14]
すなわち、ＮＵＲＢＳ曲線の初期のノットベクトルの有効範囲が(u[3], u[5])であるから、この範囲内のノットu[3]、u[4]及びu[5]が、それぞれ多重度３となるように（次数ｎ＝３に等しくなるように）ノットを挿入していき、最終的なノットベクトル(u'[0], u'[1], u'[2], ... , u'[14])を得る。すなわち、「ノット挿入後の最終的な制御点数」はノットベクトルの要素数１５より４小さい１１である。この場合、元のＮＵＲＢＳ曲線は連続する２つの有理ベジエ曲線に分割される。但し、この２つの有理ベジエ曲線は接続部で制御点を１つ共有しているので、「有理ベジエ曲線を定義する制御点数」は４×２−１＝７である。従って、ここでも４つの制御点が不要であることが分かる。
【００４５】
しかし、初期のノットベクトルの値の並び方によっては、捨てるべき不要な制御点数が常に４であるとは限らない。すなわち、捨てるべき不要な制御点数は初期のノットベクトルによって変化する。このようなことが起こるのは、初期のノットベクトルの要素の中に、値の等しいノットが含まれている場合である。
【００４６】
すなわち、不要な制御点が生じる第三の例として、異なるインデックスｉ、ｊ（ｉ＜ｊ）に対して、u[i]＝u[j]となるノットが含まれている場合である。例えば、上の例において、初期のノットベクトル(u[0], u[1], ... , u[8])のうち、u[2]＝u[3]の関係にある場合を考えると、ノット挿入して最終的に生成されたＮＵＲＢＳ曲線が、連続した２つの有理ベジエ曲線に等価変換されるには、以下の関係が満たされる必要がある。
【００４７】
u[0] = u'[0]
u[1] = u'[1]
u[2] = u[3] = u'[2] = u'[3] = u'[4]
u[4] = u'[5] = u'[6] = u'[7]
u[5] = u'[8] = u'[9] = u'[10]
u[6] = u'[11]
u[7] = u'[12]
u[8] = u'[13]
すなわち、ＮＵＲＢＳ曲線の初期のノットベクトルの有効範囲が(u[3], u[5])であり、かつu[2]＝u[3]であるから、u[3]についてはu[2]も含めて多重度３となるように、u[4]及びu[5]についてもそれぞれ多重度３となるようにノットを挿入していき、最終的なノットベクトル(u'[0], u'[1], u'[2], ... , u'[13])を得る。ここで、「ノット挿入後の最終的な制御点数」は１４−４＝１０であるが、「有理ベジエ曲線を定義する制御点数」は４×２−１＝７であるので、この例では３つの制御点が不要であることが分かる。
【００４８】
このような、不要な制御点の発生に関しては、ＮＵＲＢＳ曲面を有理ベジエ曲面に等価変換する場合に関しても全く同様に起こる。
不要な制御点が生じる第四の例としてＮＵＲＢＳ曲面の場合を説明するが、ＮＵＲＢＳ曲面の場合は、制御点が２次元配列で定義されており、基底関数のパラメータである次数及びノットベクトルが、それぞれｕ方向及びｖ方向に定義されている。従って、ｕ方向及びｖ方向それぞれについてノット挿入を行うことでＮＵＲＢＳ曲面を有理ベジエ曲面に等価変換することが可能である。
【００４９】
例えば、ＮＵＲＢＳ曲面の制御点Q[i][j]の数が５×５＝２５個であり、ｕ方向及びｖ方向の次数をｍ＝ｎ＝３とし、ｕ方向の初期ノットベクトルを(u[0], u[1], ... , u[8])、ｖ方向の初期ノットベクトルを(v[0], v[1], ... , v[8])とする。また、ｕ方向のノットベクトルについては、全ての異なるインデックスｉ、ｊ（ｉ＜ｊ）に対してu[i]＜u[j]が成り立つとし、ｖ方向のノットベクトルについては、v[2]＝v[3]であり、それ以外はv[i]＜v[j]が成り立つと仮定する。ノット挿入後の最終的なｕ方向及びｖ方向のノットベクトルを、それぞれ(u'[0], u'[1], u'[2], ...)及び(v'[0], v'[1], v'[2], ...)とすると、これまでの類推から有理ベジエ曲面に等価変換されるためには以下の関係を満たすことが必要である。
【００５０】
u[0] = u'[0]
u[1] = u'[1]
u[2] = u'[2]
u[3] = u'[3] = u'[4] = u'[5]
u[4] = u'[6] = u'[7] = u'[8]
u[5] = u'[9] = u'[10] = u'[11]
u[6] = u'[12]
u[7] = u'[13]
u[8] = u'[14]
v[0] = v'[0]
v[1] = v'[1]
v[2] = v[3] = v'[2] = v'[3] = v'[4]
v[4] = v'[5] = v'[6] = v'[7]
v[5] = v'[8] = v'[9] = v'[10]
v[6] = v'[11]
v[7] = v'[12]
v[8] = v'[13]
従って、「ノット挿入後の最終的な制御点数」は、ｕ方向に１１個、ｖ方向に１０個であるので１１×１０＝１１０個である。一方、「有理ベジエ曲面が定義される制御点数」は、ｕ方向に７個、ｖ方向に７個であるので、７×７＝４９個である。従って、捨てるべき不要な制御点は１１０−４９＝６１個となる。
【００５１】
以上のように、ＮＵＲＢＳ曲面を有理ベジエ曲面に変換する際、ノット挿入の過程において不要な制御点が発生するという課題がある。
また、初期ノットベクトルの並び方、特に初期ノットベクトルの有効範囲におけるノットの多重度によっては、この不要な制御点数が変化するため、これらの規則を一般化する必要がある。
【００５２】
さらに、ノット挿入により最終的に有理ベジエ曲面に変換された制御点データは、後段のサブディビジョン法によるポリゴン分割処理ブロックへと転送されるが、サブディビジョン処理において必要な制御点は「有理ベジエ曲面が定義される制御点」だけでよく、「有理ベジエ曲面が定義されない制御点」は不要である。従って、予め「ノット挿入後の最終的な制御点」から「有理ベジエ曲面が定義されない制御点」を除いて、データ量を減らす必要がある。
【００５３】
次に、（Ｃ）に示す細分割処理における、例えば特許文献３においては、曲面パッチを細分割するごとに平坦度を算出する必要があるため、曲面画像処理装置において平坦度の計算負荷が非常に大きくなるという問題がある。
また、上述した特許文献４においては、弦の偏移ベクトルはオブジェクトのシルエットエッジを形成するパッチ（以降、シルエットエッジ形成パッチと称して説明を行う）を検出する指標としては利用することができない。
【００５４】
次に、（Ｄ）におけるベジェ曲面をなす各制御点の法線計算においては、前記の非特許文献４の方法では、曲面上の点は（ｕ，ｖ）等のパラメータを直接与えて曲面上の頂点を算出し、その途中で得られた中間点を用いて、生成した曲面上の点の法線を算出している。そして、曲面パッチの各制御点における法線計算は、四隅の点やその隣接する制御点が一致する場合には、その一致を判断して計算を回避すると記されているが、どのように回避するか等の具体的方法が示されていない。
【００５５】
また、上述の特許文献３の方法では、曲面上の法線を算出するのに、一般式を用いており計算時間が多大となるという問題が生じる。また、クーンズのパッチを用いており、法線は近似計算である。
さらに、上述した特許文献５、又は特許文献６の方法では、最終的に画像生成する際に、曲面上にのる制御点のみを用いる場合には、不用となる制御点に対しても、法線の計算が途中で行われ、演算量が増加するという問題が生じる。
【００５６】
本発明は前記問題点に鑑み、図形情報としてＮＵＲＢＳデータを用いた画像処理において、より高速かつ高品質にレンダリングすることが可能な曲面画像処理装置を提供することを第一の目的とする。
また、本発明は、ＮＵＲＢＳデータを用いてノット挿入により有理ベジエデータに変換した後に、サブディビジョン法によりポリゴン分割を行う演算手順においても、より効率的に画像処理における演算量を低減できる曲面画像処理装置を提供することを第二の目的とする。
【００５７】
さらに、本発明は、サブディビジョン法により曲面のポリゴン分割を行う場合においても、より効率的に曲面の分割処理を行い演算処理を軽減することが可能な曲面画像処理装置を提供することを第三の目的とする。
またさらに、本発明は、ベジェ曲面等の曲面上にのる制御点の情報を用いて法線計算を行う場合においても、頂点となる曲面の四隅の制御点の法線計算に適した方法で、効率的に正しい法線を算出できる曲面画像処理装置を提供することを第四の目的とする。
【課題を解決するための手段】
【００５８】
前記課題を解決するために、本発明に係る曲面画像処理装置は、［請求項１］。
従って、ＮＵＲＢＳデータのままでは演算量が大きく細分割することはできないが、ＮＵＲＢＳデータをベジェデータにパラメータ変換するデータ変換部を備えることにより、曲面画像処理装置における３次元オブジェクトの描画処理における演算量を効率的に軽減することができ、より短時間で高精度の描画処理を行うことができる。
【００５９】
また、本発明に係る曲面画像処理装置は、［請求項７］、より好ましくは［請求項８］。
従って、ＮＵＲＢＳデータのベジェデータへのパラメータ変換処理において生じる不要な制御点を適切に削除してから細分割処理を行うこととなるために、余分な演算を減らして効率的な３次元オブジェクトの描画処理を行うことが可能となる。
【００６０】
さらに、本発明に係る曲面画像処理装置は、［請求項１４］、また［請求項１５］。
従って、細分割手段により細分割された有理ベジェ曲面の輪郭部となるシルエットエッジを検出して、シルエットエッジをなす曲面パッチの細分割レベルを高くすると共に、シルエットエッジとならない曲面パッチの細分割レベルを低くすることにより、従来までの余分な細分割演算を省略すると共に、エッジ部を高レベルに細分割することにより、より高精度に描画処理を行うことができる。また、細分割レベルの決定において、符号付面積の値を用いることで、より効果的に曲面パッチの細分割を行うことができる。
【００６１】
またさらに、本発明に係る曲面画像処理装置は、［請求項３０］、より好ましくは［請求項３１］。
従って、細分割処理後の曲面パッチの制御点の法線の計算において、他の制御点に縮退しているような制御点は法線ベクトルの計算においては選択されないため、より正確に有理ベジェ曲面をなす各制御点の法線の計算を行うことができ、３次元オブジェクトの輝度等の描画処理をより高精度に行うことが可能となる。
【００６２】
尚、本発明は、上述のような曲面画像処理装置として実現できるのみではなく、この曲面画像処理装置が備える手段をステップとする曲面画像処理方法、当該曲面画像処理方法をコンピュータ等で実現させるプログラムとして実現したり、当該プログラムをＤＶＤ、ＣＤ−ＲＯＭ等の記録媒体や通信ネットワーク等の伝送媒体を介して流通させることができるのは言うまでもない。
【発明の効果】
【００６３】
以上のように、本発明に係る曲面画像処理装置は、ＮＵＲＢＳデータを有理ベジェ曲面及び曲線を形成する有理ベジェ制御点データへ変換するデータ変換部と、前記データ変換部により変換された有理ベジェ制御点データから成る有理ベジェ曲面パッチを細分割する曲面パッチ分割処理部とを設けることにより、ＮＵＲＢＳ曲面を直接演算してレンダリングする場合に比べ、制御点データ以外のデータを増大することなく、比較的少ない演算量によってレンダリング処理を行うことが可能となる。また、有理ベジェ曲面パッチの細分割後の有理ベジェ制御点データに対して視野変換を行う必要がないため、座標変換に関する全体の演算量を削減することができ、滑らかで高画質なＮＵＲＢＳ曲面を、リアルタイムにレンダリングすることが可能な高性能な曲面画像処理装置を構成することができる。
【００６４】
また、ＮＵＲＢＳデータ及び有理ベジェ制御点データを同次座標系で扱うことにより、レンダリング処理前の射影変換と透視変換とを一括して行えるため、射影変換に伴う重みによる除算を省略することができ、高速にＮＵＲＢＳ曲面をレンダリングすることが可能となる。
そして、本発明に係る曲面画像処理装置によれば、ＮＵＲＢＳ制御点データを有理ベジェ制御点データに変換する際に生じる不要な制御点を制御点トリミング部により削除することができる。従って、ＮＵＲＢＳ曲面から有理ベジエ曲面へ変換する際、不要なデータが発生しないので、後段の曲面パッチ分割処理部におけるサブディビジョンによるポリゴン分割を効率よく行うことができる。
【００６５】
また、本発明に係る曲面画像処理装置は、ＮＵＲＢＳ曲面形式で表現されたオブジェクトを、細分割アルゴリズムを用いてポリゴン近似する場合に、スクリーン上におけるパッチの符号付面積の値に応じて、細分割レベルを適応的に制御することができる細分割レベル決定手段を備える。従って、曲面パッチの無駄なポリゴン分割を抑制できる。
さらに、画面に表示されるオブジェクトのシルエットエッジを形成するパッチであるか否かを判定するシルエットエッジ検出部を備えるために、シルエットエッジ部の細分割を適切に行うと共に、シルエットエッジ部以外の曲面パッチの細分割における計算量を軽減させて、細分割における必要な計算負荷を最小限に抑えて、無駄なポリゴン分割を抑制しつつ、エッジ部分の滑らかなオブジェクトを生成することが可能である。
【００６６】
そして、本発明に係る曲面画像処理装置は、細分割手段で細分割された後のポリゴンデータの制御点における法線計算において、隣接する制御点から適切な制御点を選択する選択部を備える。
従って、ベジエ曲面の四隅の制御点に対して、隣接する制御点が法線の計算対象の制御点と縮退して同じとなる場合ににおいても、適切な制御点を選択して法線を算出することができる。これら計算は、ベクトルの差の計算と外積を用いるだけで効率的に正確に行うことができる。
【００６７】
以上のことから、本発明に係る曲面画像処理装置は、ＮＵＲＢＳデータを用いた自由曲面をより効率的且つ高精度に描画することができ、その実用価値は極めて高いと言える。
【発明を実施するための最良の形態】
【００６８】
以下、本発明に係る曲面画像処理装置について、図面を用いて説明する。尚、下記の実施の形態１から３まではＮＵＲＢＳデータを用いて曲面画像を生成する処理全体に特徴を有する曲面画像処理装置１００についての説明を行う。
【００６９】
（実施の形態１）
図１は実施の形態１における曲面画像処理装置１００の機能ブロック図を示している。
この曲面画像処理装置１００は、ＮＵＲＢＳデータを入力するデータ入力部１０１、ＮＵＲＢＳデータに座標変換を施す座標変換部１０２、各描画フレームのアニメーションデータを制御するアニメーション制御部１０３、ＮＵＲＢＳデータを有理ベジェデータに変換するデータ変換部１０４、有理ベジェ曲面パッチを細分割する曲面パッチ分割処理部１０５、分割後の曲面パッチの制御点に対する法線ベクトルの算出を行う法線計算部１０６、分割後の曲面パッチに透視変換を施す透視変換部１０７、及び曲面パッチに対しレンダリング処理を行うレンダリング処理部１０８を備える。
【００７０】
尚、本発明に係る曲面画像処理装置１００は、図１に構成に限定されるものではなく、座標変換部１０２、データ変換部１０４、及び曲面パッチ分割処理部１０５を備えればよく、その他の処理部は任意の構成要素とすることができる。
はじめに、本発明の実施の形態１に係る曲面画像処理装置１００におけるＮＵＲＢＳデータ及び有理ベジェ制御点データとその扱い方について説明する。
【００７１】
ＮＵＲＢＳ曲線及びＮＵＲＢＳ曲面を形成するＮＵＲＢＳデータは、ＮＵＲＢＳ制御点、各制御点における重み、及びノットベクトルの３要素から成る。有理ベジェ曲線及び有理ベジェ曲面を形成する有理ベジェ制御点データは、有理ベジェ制御点及び各制御点における重みの２要素から成る。
一般的に、３次元のユークリッド空間における通常座標系を用いると、ＮＵＲＢＳデータ及び有理ベジェ制御点データにおける任意の制御点と重みは、Ｐ（ｘ、ｙ、ｚ）とｗの組みで表される。
【００７２】
一方、重み成分ｗを１つの座標とみなした座標系は同次座標系と呼ばれ、Ｐ（Ｘ、Ｙ、Ｚ、ｗ）と表すことができる。同次座標系によって表現される空間は射影空間と呼ばれる。３次元ユークリッド空間における点Ｐ（ｘ、ｙ、ｚ）を射影空間におけるＰ（Ｘ、Ｙ、Ｚ、ｗ）で表現した場合、両者の間には下記の（数８）の関係が成立する。
【００７３】
【数８】
2004178576.tif 000010
本実施の形態１では以降、ＮＵＲＢＳデータ及び有理ベジェ制御点データについては、制御点と重みを一括して制御点データと呼び、射影空間における同次座標系を用いてＰ（Ｘ、Ｙ、Ｚ、ｗ）という形式で扱うこととする。
【００７４】
以上のように構成された曲面画像処理装置１００について、図２を用いてその動作を説明する。図２は、本実施の形態１における曲面画像処理装置１００の全体処理の流れを示すフローチャートである。
最初に、データ入力部１０１はＮＵＲＢＳデータを座標変換部１０２に入力する（Ｓ２０１）。
【００７５】
次に、アニメーション制御部１０３は、現フレームにおけるアニメーションデータを算出する。ここで、アニメーションデータは、例えば現フレームの経過時刻情報を表す時間情報と、カメラの位置情報を含む視点と、カメラの方向情報を含む視線と、光源の種類や位置、強度情報を含む光源情報等から成る（Ｓ２０２）。
そして、座標変換部１０２においては、アニメーション制御部１０３から入力されるアニメーションデータの視点、視線の情報を用いて、ＮＵＲＢＳデータに対し、モデリング変換、視野変換、３次元空間におけるクリッピング処理を行い、視野座標系におけるＮＵＲＢＳデータを算出する（Ｓ２０３）。
【００７６】
次に、データ変換部１０４は、ＮＵＲＢＳデータを形成する各ＮＵＲＢＳ曲線に対し、ノットを挿入することによって、セグメントから成る区分有理ベジェ曲線に変換する（Ｓ  ２０４）。尚、この区分有理ベジェ曲面の説明は後述する。また、Ｂスプライン曲線をノット挿入によって区分有理ベジェ曲線に変換する方法には、上述した非特許文献１、又は非特許文献２に示すように、ＯｓｌｏアルゴリズムやＢｏｈｍによる方法がある。
【００７７】
そして、曲面パッチ分割処理部１０５は、ＮＵＲＢＳデータから複数の有理ベジェ曲面パッチを算出して、区分有理ベジェ曲面の細分割処理を行う（Ｓ２０５）。この分割処理は、本実施の形態１においては、ド・カステリョのアルゴリズムを用いて分割する。
次に、曲面パッチ分割処理部１０５は、曲面パッチの細分割の結果、各曲面パッチが充分な平坦度を有しているか否かを、現在の視点から有理ベジェ曲面パッチまでの距離を用いて判断し、再度分割処理が必要な場合には再度有理ベジェパッチの分割処理を行い（Ｓ２０６でＮ）、一方、全ての有理ベジェ曲面パッチが充分に細分割された場合においては（Ｓ２０６でＹ）、透視変換部１０７は、各有理ベジェ曲面パッチを制御点データを頂点としたポリゴンデータに近似して変換する（Ｓ２０７）。
【００７８】
そして、法線計算部１０６は、細分割された各ポリゴンデータの制御点の法線ベクトルを算出して（Ｓ２０８）、透視変換部１０７において３次元の座標をスクリーン上の２次元の座標に変換する透視変換が行われ（Ｓ２０９）、次に、レンダリング処理部１０８において各ポリゴンデータの配置、描画が行われて３次元オブジェクトの描画処理が完了する（Ｓ２１０）。
【００７９】
尚、全てのステップにおける処理は、描画フレームごとに繰り返し実行され、全ての描画フレームのレンダリングが完了すると一連の処理を終了する。
ところで、ＮＵＲＢＳ曲面は、非一様（Ｎｏｎ  Ｕｎｉｆｏｒｍ）な有理（Ｒａｔｉｏｎａｌ）Ｂスプライン曲線の集合によって形成される。たとえば図３（ｂ）において、ＮＵＲＢＳ曲面３３は、パラメータｕ、ｖを媒介変数とした２方向のＮＵＲＢＳ曲線の集合から成る。
【００８０】
また、図４（ａ）及び（ｂ）は３次の有理ベジェ曲線及び有理ベジェ曲面の例を示す図である。図４（ａ）において、３次の有理ベジェ曲線４１の形状は、複数の制御点データ４２によって操作される。一般に、最小の構成要素を持つ有理ベジェ曲線はセグメントと呼ばれ、ｎ次のセグメントは（ｎ＋１）個の制御点データによって形成され、特に１番目と（ｎ＋１）番目の制御点データは曲線上の点であり端点と呼ばれる。例えば、３次のセグメントは４つの制御点データから成り、１番目と４番目の制御点データが端点である。さらに、セグメントをつなげた曲線は区分有理ベジェ曲線と呼ばれる。
【００８１】
図４（ａ）において、Ｐ０、Ｐ１、Ｐ２は端点であり、Ｐ０Ｐ１、Ｐ１Ｐ２の区間はセグメントである。この様に、端点を連続して与えることにより、滑らかな区分有理ベジェ曲線を表現できる。また、３次の有理ベジェ曲線４１はＮＵＲＢＳ曲線と同様、パラメータｕを媒介変数としたパラメトリック曲線であり、（数９）で与えられる。
【００８２】
【数９】
2004178576.tif 000011
（数９）においてＰ０、Ｐ１、Ｐ２、Ｐ３は制御点データを表す。この有理ベジェ曲線を用いた演算はＮＵＲＢＳ曲線の演算に比べて単純であり、比較的小規模な回路でハードウェア化が可能である。
【００８３】
図４（ｂ）において、有理ベジェ曲面パッチ４３はパラメータｕ、ｖを媒介変数としたパラメトリック曲面であり、その曲面形状は、有理ベジェ曲線４１と同様、４４で代表される制御点データによって操作される。一般に、パラメータｕ、ｖの２方向のセグメントの集合によって有理ベジェ曲面パッチを定義できる。ｎ次の有理ベジェ曲面パッチの制御点データは、（ｎ＋１）×（ｎ＋１）個であり、パッチの４隅の点が端点、すなわち曲面上の点となる。図４においてＲ０、Ｒ１、Ｒ２、Ｒ３は端点であり、３次の有理ベジェ曲面パッチ４３上の点である。
【００８４】
以上のことから、言い換えればＳ２０４では、ＮＵＲＢＳデータから複数の有理ベジェ曲面パッチが算出される。尚、ＮＵＲＢＳデータを定義するパラメータｕ、ｖと、Ｓ２０４の変換によって算出される３次の有理ベジェ曲面パッチを定義するパラメータｕ、ｖとは、必ずしも一致するとは限らない。
次に、曲面パッチ分割処理部１０５において、ド・カステリョのアルゴリズムを用いて有理ベジェ曲面パッチを分割する方法について説明する。
【００８５】
図５は３次元ユークリッド空間における３次の有理ベジェ曲線５１のセグメント例である。図５において、Ｂ１、Ｂ２、Ｂ３、Ｂ４は有理ベジェセグメント５１を形成する制御点であり、Ｂ１、Ｂ４は端点である。ここで、制御点Ｂ１、Ｂ２、Ｂ３、Ｂ４における重みをそれぞれｗ１、ｗ２、ｗ３、ｗ４とする。
一般的に、３次元ユークリッド空間において、有理ド・カステリョのアルゴリズムを用いると、１つのセグメント５１は、各制御点を結ぶ直線Ｂ１Ｂ２、Ｂ２Ｂ３、Ｂ３Ｂ４を、０＜ｔ＜１、ｉ＝１、２、３、４について、ｗi+1＊ｔ：ｗi＊（１−ｔ）の比率で内分する点をＣ１、Ｃ２、Ｃ３とし、それぞれにおける重みｗ'i＝ｗi＊（１−ｔ）＋ｗi+1＊ｔとし、
更に、直線Ｃ１Ｃ２、Ｃ２Ｃ３を、ｉ＝１、２、３について、
ｗ'i+1＊ｔ：ｗ'i＊（１−ｔ）の比率で内分する点をＤ１、Ｄ２とし、それぞれにおける重みｗ"i＝ｗ'i＊（１−ｔ）＋ｗ'i+1＊ｔとし、
更に、ｉ＝１、２について、直線Ｄ１Ｄ２を、
ｗ"i+1＊ｔ：ｗ"i＊（１−ｔ）の比率で内分する点をＢ５とし、
Ｗ５＝ｗ"i＊（１−ｔ）＋ｗ"i+1＊ｔとした場合、
Ｂ５はセグメント５１上の点となり、算出されたｗ５はＢ５における重みとなることが知られている。ここでＢ１、Ｃ１、Ｄ１、Ｂ５はセグメントＢ１Ｂ５の制御点であり、Ｂ５、Ｄ２、Ｃ３、Ｂ４はセグメントＢ５Ｂ４の制御点である。
【００８６】
本実施の形態のステップ４４では、制御点データを同次座標系で扱うため、例えば非特許文献３に示される射影空間におけるド・カステリョのアルゴリズムを用いる。また本実施の形態では、ｔ＝１／２を適用する。
図６は射影空間における３次のセグメントに、ド・カステリョのアルゴリズムを用いた例である。図６において、Ｂ１、Ｂ２、Ｂ３、Ｂ４はセグメント６１を形成する制御点データであり、Ｂ１、Ｂ４は端点となる。
【００８７】
ステップ２０５において、セグメント６１に対し、直線Ｂ１Ｂ２、Ｂ２Ｂ３、Ｂ３Ｂ４を１／２：（１−１／２）に内分する点（すなわち中点）を、Ｃ１、Ｃ２、Ｃ３とし、更に、直線Ｃ１Ｃ２、Ｃ２Ｃ３の中点を、Ｄ１、Ｄ２とし、更に、直線Ｄ１Ｄ２の中点をＢ５とすると、Ｂ５はセグメント６１上の点となる。
その結果、セグメント６１はＢ１Ｂ５と、Ｂ５Ｂ４の２つのセグメントに分割される。新たに作成されたセグメントＢ１Ｂ５の制御点は、Ｂ１、Ｃ１、Ｄ１、Ｂ５であり、セグメントＢ５Ｂ４の制御点は、Ｂ５、Ｄ２、Ｃ３、Ｂ４である。
【００８８】
このように、本実施の形態１に係る曲面パッチ分割処理部１０５においては、同次座標系を用いて射影空間におけるド・カステリョのアルゴリズムにｔ＝１／２を適用することにより、分割処理に要する演算は、乗算及び除算を必要とせずシフト演算と和算だけで良いため、分割処理を大幅に高速化できる。
図７は、３次の有理ベジェ曲面パッチ７１を１６個の制御点データを用いて表した参考図である。図７においてＰ１、Ｐ２、Ｐ３、Ｐ４は端点であり、各端点は曲面パッチ上の点である。
【００８９】
図８は、図７の有理ベジェ曲面パッチ７１を形成するパラメータｕ方向のセグメントに対し、ステップ２０５の処理を適用して分割を行った結果の有利ベジェ曲面パッチの参考図である。
ステップ２０５によって、とくにセグメントＰ３Ｐ４を分割してえられた点Ｐ６と、セグメントＰ１Ｐ２を分割してえられた点Ｐ５は、有理ベジェ曲面パッチ７１上の点となる。すなわち、有理ベジェ曲面パッチ７１は、Ｐ１、Ｐ５、Ｐ６、Ｐ３を端点とする有理ベジェ曲面パッチ８１と、Ｐ５、Ｐ２、Ｐ４、Ｐ６を端点とする有理ベジェ曲面パッチ８２の２つに分割される。
【００９０】
図９は、図８の有理ベジェ曲面パッチ８１及び８２に対し、更に、パラメータｖ方向のセグメントに対し、ステップ２０５の処理を適用して分割を行った結果の有利ベジェ曲面パッチの参考図である。
ここでは、新たに有理ベジェ曲面パッチ上の点Ｐ７、Ｐ８、Ｐ９が算出され、有理ベジェ曲面パッチ８１は、Ｐ７、Ｐ９、Ｐ６、Ｐ３を端点とする有理ベジェ曲面パッチ９１と、Ｐ１、Ｐ５、Ｐ９、Ｐ７を端点とする有理ベジェ曲面パッチ９２とに分割され、有理ベジェ曲面パッチ８２は、Ｐ９、Ｐ８、Ｐ４、Ｐ６を端点とする有理ベジェ曲面パッチ９３と、Ｐ５、Ｐ２、Ｐ８、Ｐ９を端点とする有理ベジェ曲面パッチ９４とに分割される。
【００９１】
図９における４つの曲面パッチがポリゴンデータに変換された例を図１０に示す。曲面パッチ９１、９２、９３、９４は、曲面上の制御点データを頂点とした合計８個のポリゴンデータに変換される。
ところで、これらのポリゴンデータの頂点は射影空間における点であるため、レンダリングを行うためには、３次元ユークリッド空間における点に変換する必要がある。
【００９２】
一般的に、射影空間で定義された座標から３次元ユークリッド空間で定義された座標への変換を射影変換と呼ぶ。また、３次元ユークリッド空間で定義された座標から２次元スクリーン座標への変換を透視変換と呼ぶ。（数４）より、射影空間における同次座標Ｐ（ｗｘ、ｗｙ、ｗｚ、ｗ）を３次元ユークリッド空間における通常座標Ｐ（ｘ、ｙ、ｚ）に射影変換するための式は、（数１０）で与えられる。
【００９３】
【数１０】
2004178576.tif 000012
一方、ポリゴンデータの頂点は既に座標変換部１０２によって視野座標に変換済みのため、視点は原点であり、視線はＺ軸である。従って、３次元ユークリッド空間におけるポリゴンデータの頂点をスクリーン座標系に透視変換するための式は（数１１）で与えられる。
【００９４】
【数１１】
2004178576.tif 000013
（数１１）において、Ｐ＝（ｘ、ｙ、ｚ）はポリゴンデータの任意の頂点、Ｒは視点からスクリーンまでの距離、Ｓｏ＝（ｘｏ、ｙｏ）はスクリーン座標の原点、Ｐｓ＝（ｘｓ、ｙｓ）は透視変換後のスクリーン座標におけるポリゴンデータの頂点を表す。
【００９５】
ステップ２０９では、この様に（数１２）を用いて、ステップ２０８で得られたポリゴンデータの各頂点に対する射影変換と透視変換を一括して行う（Ｓ２０９）。
【００９６】
【数１２】
2004178576.tif 000014
従って、本実施の形態では、射影変換に伴う重みによる除算を省略することができる。さらにステップ２１０では、現在の光源情報を用いてポリゴンデータにシェーディング処理やテクスチャマッピング処理等のレンダリング処理を行った後、次のフレームの描画処理のために、ステップ２０２に戻る。
【００９７】
以上のように、本発明の実施の形態１によれば、データ変換部１０４及び曲面パッチ分割処理部１０５を設け、ステップ２０４によってＮＵＲＢＳデータを有理ベジェ制御点データに変換した後、ステップ２０５で有理ベジェ曲面パッチを分割することにより、ＮＵＲＢＳ曲面を直接演算してレンダリングする場合に比べ、制御点データ以外のデータを増大することなく、比較的少ない演算量によってＮＵＲＢＳ曲面をレンダリングすることが可能となる。
【００９８】
また、座標変換部１０２においては、ＮＵＲＢＳデータを予め視野座標系に変換するため、有理ベジェ曲面パッチの細分割後の有理ベジェ制御点データに対して視野変換を行う必要がなくなり、座標変換に関する全体の演算量を削減することができる。
さらに、ＮＵＲＢＳデータ及び有理ベジェ制御点データの制御点と重みを制御点データとして同次座標系で扱うことにより、透視変換部１０７におけるレンダリング処理前の射影変換と透視変換とを一括して行えるため、射影変換に伴う重みによる除算を省略することができ、高速にＮＵＲＢＳ曲面をレンダリングすることが可能となる。
【００９９】
またさらに、充分なポリゴンへの近似結果を得るため、曲面パッチ分割処理部１０５において、有理ベジェ曲面パッチの細分割を繰り返す場合でも、細分割に要する演算は、シフト演算と積加算のみで実現できるため、処理負担を軽減して、本発明に係る曲面画像処理装置１００においては、滑らかで高画質なＮＵＲＢＳ曲面のレンダリング結果を、高速に得ることができる。
【０１００】
尚、実施の形態１において、座標変換部１０２による視野座標変換は、データ入力部１０１から入力されたＮＵＲＢＳデータに対して行ったが、予め視野座標変換を行わずに、曲面パッチ分割処理部１０５で得られる分割後の有理ベジェ曲面パッチを形成する有理ベジェ制御点データに対して、視野座標変換を行ってもよい。
【０１０１】
（実施の形態２）
以下、本発明の実施の形態２について、図面を用いて説明する。
本実施の形態２における曲面画像処理装置１００の機能ブロック図は、上述した実施の形態１と同様であり、アニメーション制御部１０３において算出されるアニメーションデータは座標変換部１０２及びデータ変換部１０４に入力されることを特徴とする。
最初に、図１１を用いて本実施の形態２の曲面画像処理装置１００の動作を説明する。本実施の形態２では、本発明の実施の形態１と同様に、ＮＵＲＢＳデータ及び有理ベジェ制御点データについては、制御点と重みを一括して制御点データと呼び、射影空間における同次座標系を用いて扱う。
【０１０２】
図１１は、本実施の形態２における曲面画像処理装置１００の具体的な処理の流れを表した図である。
最初に、データ入力部１０１はＮＵＲＢＳ制御点、各制御点における重み、ノットベクトルから成るＮＵＲＢＳデータをデータ変換部１０４に入力する（Ｓ１１０１）。
次に、データ変換部１０４は、データ入力部１０１から入力されたＮＵＲＢＳデータを形成する各ＮＵＲＢＳ曲線に対し、ノットを挿入することによって、セグメントから成る区分有理ベジェ曲線に変換する（Ｓ１１０２）。
【０１０３】
そして、アニメーション制御部１０３は、現フレームにおけるアニメーションデータを算出する（Ｓ１１０３）。
また、座標変換部１０２は、アニメーション制御部１０３から得られた現フレームのアニメーションデータの視点、視線の情報を用いて、データ変換部１０１で算出された各セグメントを形成する有理ベジェ制御点データに対し、モデリング変換、視野変換、３次元空間におけるクリッピング処理を行い、視野座標系におけるセグメントを形成する有理ベジェ制御点データを算出する（Ｓ１１０４）。
【０１０４】
次に、曲面パッチ分割処理部１０５は、ステップ１１０４で得られた視野座標系におけるセグメントから成る有理ベジェ曲面パッチに対し、射影空間におけるド・カステリョのアルゴリズムにｔ＝１／２を適用して計算を行うことにより、有理ベジェ曲面パッチを分割する（Ｓ１１０５）。
そして、曲面パッチ分割処理部１０５は、現在の分割結果が充分かどうかを、現在の視点から有理ベジェ曲面パッチまでの距離を用いて判断し、再度分割処理が必要な場合にはステップ１１０５に戻る（Ｓ１１０６でＮ）。
【０１０５】
全ての有理ベジェ曲面パッチが充分に細分割された場合においては（Ｓ１１０６でＹ）、透視変換部１０７は細分割後の各有理ベジェ曲面パッチの制御点データを頂点としたポリゴンデータに変換して（Ｓ１１０７）、法線計算部１０６において各ポリゴンデータの制御点の法線ベクトルが計算される（Ｓ１１０８）。
そして、透視変換部１０７は、得られたポリゴンデータの各頂点に対する射影変換と透視変換を一括して行い（Ｓ１１０９）、また、レンダリング処理部１０８は、現在の光源情報を用いてポリゴンデータにシェーディング処理やテクスチャマッピング処理等のレンダリング処理（Ｓ１１１０）を行った後、次のフレームの描画処理のために、ステップ１１０１に戻る。尚、ステップ１１０２までの処理は、前処理として１度だけ実行され、ステップ１１０３からステップ１１１０までの処理は描画フレームごとに繰り返し実行される。
【０１０６】
以上のように、本実施の形態２に係る曲面画像処理装置１００によれば、データ変換部１０４、座標変換部１０２及び曲面パッチ分割処理部１０５を設け、予め前処理として、データ変換部１０４においてＮＵＲＢＳデータを有理ベジェ制御点データに変換しておくことにより、ＮＵＲＢＳオブジェクトの形状が時刻によって変化しない、すなわち形状変形アニメーションを行わない場合には、フレーム毎の描画処理では、ステップ１１０３以降の処理を実行すればよく、描画フレーム毎に行う処理における演算量を大幅に削減することができる。すなわち、滑らかで高画質なＮＵＲＢＳ曲面をベジェ曲面に変換してから細分割し、リアルタイムにレンダリングすることが可能な高性能な曲面画像処理装置１００を構成することができる。
【０１０７】
尚、本実施の形態２において、形状変形アニメーションを行わない場合を前提としたが、形状変形アニメーションを行う場合でも、前処理としてステップ１１０２において、全てのキーフレームデータ（全ての時刻におけるＮＵＲＢＳデータ）に対して有理ベジェ制御点データへの変換を行っておけば、同じ効果を得ることができる。
また、本実施の形態２においては、座標変換部１０２による視野座標変換は、データ変換部１０４によって得られた有理ベジェ制御点データに対して行ったが、予め視野座標変換を行わずに、曲面パッチ分割処理部１０５で得られる分割後の有理ベジェ曲面パッチを形成する有理ベジェ制御点データに対して視野座標変換を行ってもよい。
【０１０８】
（実施の形態３）
以下、本実施の形態３の曲面画像処理装置１００について説明する。尚、本実施の形態３における曲面画像処理装置１００の機能ブロック図は上述した実施の形態１と同様となるため、その詳細な説明を省略する。
【０１０９】
図１２は、本実施の形態３に係る曲面パッチ分割処理部１０５のブロック構成図である。曲面パッチ分割処理部１０５は、セグメント分配部１２０１、及び少なくとも１つ以上のセグメント分割部１２０２を備える。
次に、曲面画像処理装置１００の曲面パッチ分割処理部１０５の構成とその動作について説明する。
【０１１０】
セグメント分割部１２０２は、パラメータｕ、又はパラメータｖを媒介変数とした３次のセグメントを形成する４つの制御点データを入力とし、これらの４つの制御点データに対し、射影空間におけるド・カステリョのアルゴリズムにｔ＝１／２を適用することにより、分割した２つの３次のセグメントを形成する７つの制御点データを出力する。例えば、図５におけるセグメント５１を形成する４つの制御点データＢ１、Ｂ２、Ｂ３、Ｂ４を、セグメント分割部１２０２に入力すると、２つのセグメントＢ１Ｂ５及びＢ５Ｂ４を形成する７つの制御点データＢ１、Ｃ１、Ｄ１、Ｂ５、Ｄ２、Ｃ３、Ｂ４が出力される。
【０１１１】
ここで、データ変換部１０４から得られた有理ベジェ曲面パッチ７１内において、パラメータｕ方向の４つのセグメントに対する処理は、どのような順序で行っても良いし、同時に処理を行っても良い。また、パラメータｕ方向の分割処理終了後の有理ベジェ曲面パッチ８１又は８２内において、パラメータｖ方向の７つのセグメントに対する処理は、どのような順序で行っても良いし、同時に処理を行っても良い。また、有理ベジェ曲面パッチ８１と８２を一例とする異なる有理ベジェ曲面パッチ間においては、パラメータｕ及びｖ方向のセグメントに対する処理は、どのような順序で行っても良いし、同時に処理を行っても良い。
【０１１２】
次に、セグメント分配部１２０１の処理について図１３を用いて説明する。図１３は、セグメント分配部１２０１における具体的な処理の流れを表したフローチャートである。
まず、セグメント分配部１２０１は、データ変換部１０４から得られた有理ベジェ曲面パッチを形成するセグメントの中から分割処理待ちのセグメントを１つ選択する（Ｓ１３０１）。
【０１１３】
次に、セグメント分配部１２０１は、選択したセグメントについて、同一パッチ内の他のセグメントが、いずれかのセグメント分割部１２０２において処理中かどうかを判断する（Ｓ１３０２）。そして、セグメント分配部１２０１は、処理中でない場合は（Ｓ１３０２でＮ）、処理待ち状態のいずれかのセグメント分割部１２０２にセグメントを入力する（Ｓ１３０５）。
【０１１４】
一方、処理中の場合には（Ｓ１３０２でＹ）、セグメント分配部１２０１は、選択したセグメントがｖ方向かどうかを判断する（Ｓ１３０３）。ｖ方向でない場合には（Ｓ１３０３でＮ）、処理待ち状態のいずれかのセグメント分割部１２０２にセグメントを入力する（Ｓ１３０５）。
そして、セグメントがｖ方向である場合には（Ｓ１３０３でＹ）、セグメント分配部１２０１は、選択したセグメントと同一パッチ内におけるｕ方向の同一レベルの分割処理が全て終わっているかどうかを判断する。終わっている場合には（Ｓ１３０４でＹ）、セグメント分配部１２０１は、処理待ち状態のいずれかのセグメント分割部１２０２にセグメントを入力する（Ｓ１３０５）。
【０１１５】
一方、分割処理が終わっていない場合には（Ｓ１３０４でＮ）、選択したセグメント分割処理待ち状態のままステップ１３０１に戻る。セグメント分配部１２０１は、以上の処理を分割処理待ち状態のセグメントがなくなるまで繰り返す。
以上のように、本発明の実施の形態３によれば、セグメント分配部１２０１と、１つの３次有理ベジェ曲面を形成する有理ベジェ制御点データから分割された２つの３次有理ベジェ曲面を形成する有理ベジェ制御点データを算出するセグメント分割部１２０２を少なくとも１つ以上備えた曲面パッチ分割処理部１０５を設けることにより、同時に処理可能なセグメントの分割処理を並列に実行することによって、曲面パッチの分割処理を高速に実現することができるため、滑らかで高画質なＮＵＲＢＳ曲面を、リアルタイムにレンダリングすることが可能な高性能な曲面画像処理装置１００を構成することができる。
【０１１６】
尚、上述の実施の形態１から３において、データ入力部１０１が入力するＮＵＲＢＳデータは、記憶媒体に保存したものを用いてもよいし、ネットワークを経由して伝送されたものを用いてもよい。
また、上述の実施の形態１から３において、曲面パッチ分割処理部１０５では、ド・カステリョのアルゴリズムに対し、ｔ＝１／２を適用したが、ｔ＝１／（２のｎ乗）を適用してもよい（但し、ｎは正整数）。さらに、曲面パッチ分割処理部１０５では、パラメータｕ方向に分割を行った後、パラメータｖ方向に分割を行ったが、パラメータｖ方向に分割を行った後、パラメータｕ方向に分割を行っても良い。
【０１１７】
そして、上述の実施の形態１から３において、透視変換部１０７では、各有理ベジェ曲面パッチを曲面上の制御点データを頂点としたポリゴンデータに変換したが、曲面上に乗らない制御点データを頂点としたポリゴンデータに変換しても良い（例えば曲面パッチ９１の分割に、Ｐ３、Ｐ７、Ｐ９、Ｐ６以外の制御点データを頂点としたポリゴンデータに変換してもよい。）。
【０１１８】
また、ポリゴンデータの全頂点が制御点データである必要もない。例えば、曲面パッチ９１の分割に、直線Ｐ３Ｐ９及び直線Ｐ６Ｐ７の交点と、４隅の制御点データを頂点とした４つのポリゴンデータに変換してもよい。
さらに、各有理ベジェ曲面パッチ単位でポリゴンデータへの変換を行ったがパッチをまたがるポリゴンデータに変換してもよい。例えば、曲面パッチ９１、９２、９３、９４を、Ｐ４Ｐ３Ｐ１、Ｐ４Ｐ１Ｐ２の２つのポリゴンデータへ変換してもよい。
【０１１９】
（実施の形態４）
次に、実施の形態４に係る曲面画像処理装置１００の説明を行う。
本実施の形態４の曲面画像処理装置１００においては、曲面パッチ分割処理部１０５において曲面パッチを細分割する際に、従来のようにＮＵＲＢＳ曲面上の点を直接求めるのではなく、データ変換部１０４においてＮＵＲＢＳ曲面を有理ベジエ曲面に等価変換して曲面上の制御点を求めてから細分割する。従って、データ変換部１０４におけるノット挿入の際に不要な制御点が生じるという課題が発生するが、本実施の形態４に係る曲面画像処理装置１００において、これを解決するものである。
【０１２０】
図１４は、本実施の形態４に係るデータ変換部１０４の機能ブロック構成図である。
本実施の形態４においては、データ変換部１０４は、ノット挿入部１４０１、制御点トリミング部１４０２、及び有理ベジエ制御点データ決定部１４０３を備える。
データ変換部１０４に入力されるＮＵＲＢＳモデルデータは、ＮＵＲＢＳ曲面を記述するモデルデータである。ここで、ＮＵＲＢＳモデルデータは、ＮＵＲＢＳ曲面上の点の位置座標は含んでおらず、ＮＵＲＢＳ曲面を表す情報量としては最小限であると言える。故に、ＮＵＲＢＳモデルデータを伝送するデータ伝送系にかかる負荷は小さい。
【０１２１】
ノット挿入部１４０１は、ＮＵＲＢＳ曲面を定義しているｕ方向及びｖ方向のノットベクトルが、最終的には１つ以上の有理ベジエ曲面に変換されるようにノット挿入を行う。
また、ノット挿入部１４０１は、ノットを挿入しながら制御点列を更新し、ノット挿入部１４０１の最終的な出力は、入力されたＮＵＲＢＳモデルデータが定義するＮＵＲＢＳ曲面の形状と完全に一致するような有理ベジエ曲面を定義する制御点列を出力する。
【０１２２】
しかしながら、ノット挿入部１４０１から出力される制御点列は、有理ベジエ曲面を定義していない不要な制御点を含んでいる。制御点トリミング部１４０２は、この不要な制御点を削除し、必要な制御点のみを後段の曲面パッチ分割処理部１０５へ転送するブロックである。従って、制御点トリミング部１４０２が出力する有理ベジエ制御点データは、不要な制御点を含まないデータである。ここで、有理ベジエ制御点データは有理ベジエ曲面を定義する制御点列であるが、ＮＵＲＢＳモデルデータがＮＵＲＢＳ曲線データである場合には、有理ベジエ曲線を定義する制御点列となる。この有理ベジエ制御点データは、後段の曲面パッチ分割処理部１０５へ転送される。
【０１２３】
曲面パッチ分割処理部１０５は、入力された有理ベジエ制御点データを用いて有理ベジエ曲面上の点を次々と求め、これらを複数組み合わせて平面ポリゴンを生成するブロックである。このように、曲面パッチ分割処理部１０５により、有理ベジエ曲面が平面ポリゴンの集合体に近似される。
さらに、図示はしていないが、曲面画像処理装置１００の表示部によって、３次元ポリゴンが２次元のディスプレイ上に表示される。尚、有理ベジエ制御点データが有理ベジエ曲線を定義している場合には、曲面パッチ分割処理部１０５は、有理ベジエ曲線を複数の線分の集合体に近似するものとする。
【０１２４】
次に、本実施の形態４における制御点トリミング部１４０２のノット挿入後の制御点列から不要な制御点を削除する方法について述べる。
ＮＵＲＢＳ曲面を記述する初期ノットベクトルを(u[0], u[1], ... ,u[I+n])及び(v[0], v[1], ... , v[J+m])とする。ここでｎ及びｍは、媒介変数ｕ及びｖに対して定義される基底関数の次数である。Ｉ及びＪは、ｕ及びｖ方向の制御点数である。これらのノットベクトルによって定義されるＮＵＲＢＳ曲面が、有理ベジエ曲面に等価変換されるようにノット挿入を施し、最終的に得られるノットベクトルを(u'[0], u'[1], ... ,u'[I'+n])及び(v[0], v[1], ... , v[J'+m])とする。ここでｕ方向及びｖ方向の最終的な制御点数はＩ'＋ｎ＋１及びＪ'＋ｍ＋１である。これらの制御点は、有理ベジエ曲面が定義されない不要な制御点を含んでいる。
【０１２５】
初期ノットベクトルに対して、ＮＵＲＢＳ曲面が描かれる有効範囲は、(u[3], u[I+n-3])及び(v[3], v[J+m-3])の範囲である。ノット挿入によりこの範囲のノットが多重化され、かつその多重度が次数に等しければ、元のＮＵＲＢＳ曲面は有利ベジエ曲面に変換されたことを意味する。
図２４は、ＮＵＲＢＳ曲面のｕ方向のノットベクトルにノット挿入を行い、制御点列が変化する様子を示したものである。図２４の例では、ｕ方向の次数がｎ＝３であり、ノットベクトルの有効範囲の開始ノットu[3]について多重化を行っている。ここで仮に、ｕ方向のノットベクトルの最初の部分(u[0], u[1], u[2], ...)について、値が全て異なり、単調増加である場合、最終的に生成されるノットベクトル(u'[0], u'[1], u'[2], ...)は以下の関係を満たす。
【０１２６】
u[0] = u'[0]
u[1] = u'[1]
u[2] = u'[2]
u[3] = u'[3] = u'[4] = u'[5]
最初に、値がu[3]に等しいノット〜u ＝u'[4]を挿入するとき、ノット挿入位置はｋ＝３の位置であるので、係数配列は以下のようになる。
【０１２７】
a[0] = 1
a[1] = (〜u - u[1]) / (u[4] - u[1]) = (u[3] - u[1]) / (u[4] - u[1])
a[2] = (〜u - u[2]) / (u[5] - u[2]) = (u[3] - u[2]) / (u[5] - u[2])
a[3] = (〜u - u[3]) / (u[6] - u[3]) = 0
a[4] = 0
となる。従って、生成される制御点列は
<Q'[0]> = a[0] * <Q[0]> = <Q[0]>
<Q'[1]> = (1 - a[1]) * <Q[0]> + a[1] * <Q[1]>
<Q'[2]> = (1 - a[2]) * <Q[1]> + a[2] * <Q[2]>
<Q'[3]> = (1 - a[3]) * <Q[2]> + a[3] * <Q[3]> = <Q[2]>
<Q'[4]> = (1 - a[4]) * <Q[3]> + a[4] * <Q[4]> = <Q[3]>
となる。よって、制御点<Q[1]>が消え、新しい制御点<Q'[1]>及び<Q'[2]>が生成されたことになる。但し、ＮＵＲＢＳ曲面を定義する制御点はインデックスｉ，ｊを持つ２次元配列で表されるが、ここでは説明を容易にするため、ｕ方向の１次元のみで表現している。このように簡略化しても一般性は失われない。さらに、値がu[3]に等しいノット〜u＝u'[5]を挿入するとき、ノット挿入位置はｋ＝４であるので、係数配列は以下のようになる。
【０１２８】
a[0] = 1
a[1] = 1
a[2] = (u[3] - u[2]) / (u[4] - u[2])
a[3] = 0
a[4] = 0
これを用いて、生成される制御点列は
<Q"[0]> = a[0] * <Q'[0]> = <Q'[0]> = <Q[0]>
<Q"[1]> = (1 - a[1]) * <Q'[0]> + a[1] * <Q'[1]> = <Q'[1]>
<Q"[2]> = (1 - a[2]) * <Q'[1]> + a[2] * <Q'[2]>
<Q"[3]> = (1 - a[3]) * <Q'[2]> + a[3] * <Q'[3]> = <Q'[2]>
<Q"[4]> = (1 - a[4]) * <Q'[3]> + a[4] * <Q'[4]> = <Q'[3]> = <Q[2]>
となる。よって、新しい制御点<Q"[2]>が生成されたことを意味する。
【０１２９】
次に、新しい制御点<Q"[2]>が、元のＮＵＲＢＳ曲面上の開始点であることを以下に示す。Ｃｏｘ−ｄｅＢｏｏｒの漸化式にu＝u[3]を代入して、ＮＵＲＢＳ曲面の基底関数を再帰的に求める。まずｎ＝０について
B[0][3](u[3]) = 1
B[0][i](u[3]) = 0  （ｉは３でない）
である。これを用いて、ｎ＝１について
B[1][2](u[3]) = 1
B[1][i](u[3]) = 0  （ｉは２でない）
である。さらにこれを用いて、ｎ＝２について
B[2][1](u[3]) = (u[4] - u[3]) / (u[4] - u[2])
B[2][2](u[3]) = (u[3] - u[2]) / (u[4] - u[2])
B[2][i](u[3]) = 0  （ｉは１又は２でない）
である。さらにこれを用いて、ｎ＝３について
B[3][0](u[3]) = (u[4] - u[3]) / (u[4] - u[1]) * B[2][1](u[3])
B[3][1](u[3]) = (u[3] - u[1]) / (u[4] - u[1]) * B[2][1](u[3])
+ (u[5] - u[3]) / (u[5] - u[2]) * B[2][2](u[3])
B[3][2](u[3]) = (u[3] - u[2]) / (u[5] - u[2]) * B[2][2](u[3])
B[3][i](u[3]) = 0  （ｉは３以上）
である。以上より、ＮＵＲＢＳ曲面の開始点は、係数配列を〜a[i] = 1 - a[i],
〜a'[i] = 1 - a'[i]とおくと、
<P(u[3])> = B[3][0](u[3]) * <Q[0]> + B[3][1](u[3]) * <Q[1]>
+ B[3][2](u[3]) * <Q[2]>
= 〜a'[2] * 〜a[1] * <Q[0]>
+ (〜a'[2] * 〜a[1] + 〜a'[2] * a[1]) * <Q[1]>
+ a'[2] * a[2] * <Q[2]>
= <Q"[2]>
となる。故に、元のＮＵＲＢＳ曲面の開始点は、有理ベジエ曲面に変換された制御点<Q"[2]>に一致するので、２つの制御点<Q"[0]>及び<Q"[1]>は不要となる。
【０１３０】
また別の例として、図２５に示すような、初期ノットベクトルの要素の並びが多重度を含んでいる場合について説明する。ｕ方向のノットベクトルの最初の部分(u[0], u[1], u[2], ...)において、u[2]＝u[3]である場合、最終的に生成されるノットベクトル(u'[0], u'[1], u'[2], ...)は以下の関係を満たす。
u[0] = u'[0]
u[1] = u'[1]
u[2] = u[3] = u'[2] = u'[3] = u'[4]
値がu[2]及びu[3]に等しいノット〜u＝u'[4]を挿入するとき、ノット挿入位置はｋ＝３の位置であるので、係数配列は以下のようになる。
【０１３１】
a[0] = 1
a[1] = (〜u - u[1]) / (u[4] - u[1]) = (u[2] - u[1]) / (u[4] - u[1])
a[2] = (〜u - u[2]) / (u[5] - u[2]) = 0
a[3] = (〜u - u[3]) / (u[6] - u[3]) = 0
a[4] = 0
これを用いて、生成される制御点列は、
<Q'[0]> = a[0] * <Q[0]> = <Q[0]>
<Q'[1]> = (1 - a[1]) * <Q[0]> + a[1] * <Q[1]>
<Q'[2]> = (1 - a[2]) * <Q[1]> + a[2] * <Q[2]> = <Q[1]>
<Q'[3]> = (1 - a[3]) * <Q[2]> + a[3] * <Q[3]> = <Q[2]>
<Q'[4]> = (1 - a[4]) * <Q[3]> + a[4] * <Q[4]> = <Q[3]>
となる。一方、元のＮＵＲＢＳ曲面を定義する０でない基底関数は
B[2][1](u[3]) = (u[4] - u[3]) / (u[4] - u[2]) = 1
B[3][0](u[3]) = (u[4] - u[3]) / (u[4] - u[1]) * B[2][1](u[3])
B[3][1](u[3]) = (u[3] - u[1]) / (u[4] - u[1]) * B[2][1](u[3])
であるから、一方、ＮＵＲＢＳ曲面の開始点は、
<P(u[3])> = B[3][0](u[3]) * <Q[0]> + B[3][1](u[3]) * <Q[1]>
= (1 - a[1]) * <Q[0]> + a[1] * <Q[1]>
= <Q'[1]>
となり、制御点<Q'[1]>に一致する。故に、この場合は１つの制御点<Q'[0]>のみが不要である。
【０１３２】
さらに、初期ノットベクトルの要素の並びが多重度を含んでいる別の例として、図２６にように、ｕ方向のノットベクトルの最初の部分(u[0], u[1], u[2], ...)において、u[3]＝u[4]である場合を考える。この場合、最終的に生成されるノットベクトル(u'[0], u'[1], u'[2], ...)は以下の関係を満たす。
u[0] = u'[0]
u[1] = u'[1]
u[2] = u'[2]
u[3] = u[4] = u'[3] = u'[4] = u'[5]
値がu[3]及びu[4]に等しいノット〜u＝u'[5]を挿入するとき、ノット挿入位置はｋ＝４の位置であるので、係数配列は以下のようになる。
【０１３３】
a[0] = 1
a[1] = 1
a[2] = (〜u - u[2]) / (u[5] - u[2]) = (u[3] - u[2]) / (u[5] - u[2])
a[3] = (〜u - u[3]) / (u[6] - u[3]) = 0
a[4] = (〜u - u[4]) / (u[7] - u[4]) = 0
これを用いて、生成される制御点列は、
<Q'[0]> = a[0] * <Q[0]> = <Q[0]>
<Q'[1]> = (1 - a[1]) * <Q[0]> + a[1] * <Q[1]> = <Q[1]>
<Q'[2]> = (1 - a[2]) * <Q[1]> + a[2] * <Q[2]>
<Q'[3]> = (1 - a[3]) * <Q[2]> + a[3] * <Q[3]> = <Q[2]>
<Q'[4]> = (1 - a[4]) * <Q[3]> + a[4] * <Q[4]> = <Q[3]>
となる。一方、ＮＵＲＢＳ曲面の開始点を求めると、
<P(u[3])> = B[3][1](u[3]) * <Q[1]> + B[3][2](u[3]) * <Q[2]>
= (1 - a[2]) * <Q[1]> + a[2] * <Q[2]>
= <Q'[2]>
となり、制御点<Q'[2]>に一致する。故に、この場合は、２つの制御点<Q'[0]>及び<Q'[1]>は不要となる。
【０１３４】
以上の例より、次数ｎ＝３について一般化すると、ノット挿入後に不要となる制御点に関して以下が成り立つ。すなわち、最終的に生成される制御点列が(Q'[0], Q'[1], ... ,Q'[I'-1])であり、最終的に生成されるノットベクトルが(u'[0], u'[1], ... , u'[I'+3])であって、図２７のように、ＮＵＲＢＳ曲面を描き始めるノットu'[3]について、(u'[j], ... , u'[3], ..., u'[k])の（ｋ−ｊ＋１）個のノットの値がu'[3]に等しく多重度３以上で多重化されているなら、制御点(Q'[0], Q'[1], ... ,Q'[k-4])の（ｋ−３）個の制御点が不要である。
【０１３５】
尚、不要な制御点はＮＵＲＢＳ曲面の開始点のみならず終了点においても生じる。この場合、制御点列及びノットベクトルのインデックスの関係が逆向きになることを考慮すれば、全く同様にして不要な点を削除できる。すなわち、最終的に生成される制御点列が(Q'[0], ... , Q'[I'-2], Q'[I'-1])であり、最終的に生成されるノットベクトルが(u'[0], ... , u'[I'+2], u'[I'+3])において、図２８のようにＮＵＲＢＳ曲面が描き終わるノットu'[I']について、(u'[j], ... , u'[I'], ..., u'[k])の（ｋ−ｊ＋１）個のノットの値がu'[I']に等しく多重度３以上で多重化されているなら、制御点(Q'[j], ... , Q'[I'-2], Q'[I'-1])の（Ｉ'−ｊ）個の制御点が不要である。
【０１３６】
尚、以上の説明では、ｕ方向の制御点列について不要な制御点を削除する方法について述べたが、ｖ方向の制御点列についても同様に適用できる。また、実際には制御点は重みを持つが、位置座標に重みを乗じた同次座標を用れば、上述した不要な制御点を削除する方法を適用できる。
さて、ここで、サブディビジョン法による有理ベジエ曲面のポリゴン分割に関して説明しておく。まずは理解を容易にするために、有理ベジエ曲線について述べる。図１５に示すように、有理ベジエ曲線にサブディビジョン法を適用し、複数の線分に近似する場合を考える。図１５の有理ベジエ曲線は、次数ｎ＝３で、４つの制御点(Q[0]，Q[1]，Q[2]，Q[3])で定義されている。各制御点の重みをqw[i]とする。但し、ｉ＝０、１、２、３である。図１５のように、有理ベジエ曲線は制御点Q[0]及びQ[3]を両端とする曲線である。本実施例におけるサブディビジョン法では、まず２つの隣り合う制御点のちょうど中間の位置に新しい点(R[0], R[1], R[2])をとる。但し、座標計算は、位置座標に重みを乗じた同次座標を用いて以下のように行う。
【０１３７】
rw[0] * <R[0]> = (qw[0] * <Q[0]> + qw[1] * <Q[1]>) / 2
rw[1] * <R[1]> = (qw[1] * <Q[1]> + qw[2] * <Q[2]>) / 2
rw[2] * <R[2]> = (qw[2] * <Q[2]> + qw[3] * <Q[3]>) / 2
但し、
rw[0] = (qw[0] + qw[1]) / 2
rw[1] = (qw[1] + qw[2]) / 2
rw[2] = (qw[2] + qw[3]) / 2
さらに、これらの中間の位置に新しい点(S[0], S[1])をとると、その座標は、
sw[0] * <S[0]> = (rw[0] * <R[0]> + rw[1] * <R[1]>) / 2
sw[1] * <S[1]> = (rw[1] * <R[1]> + rw[2] * <R[2]>) / 2
但し、
sw[0] = (rw[0] + rw[1]) / 2
sw[1] = (rw[1] + rw[2]) / 2
である。またさらに、これらの中間の位置に新しい点T[0]をとると、その座標は、
tw[0] * <T[0]> = (sw[0] * <S[0]> + sw[1] * <S[1]>) / 2
但し、
tw[0] = (sw[0] + sw[1]) / 2
である。以上のように計算を行うと、元の有理ベジエ曲線は、制御点(Q[0], R[0], S[0], T[0])からなる有理ベジェ曲線１５０１と、制御点(T[0], S[1], R[2], Q[3])からなる有理ベジェ曲線１５０２の、２つの連続な有理ベジエ曲線のセグメントに分割され、最終的な点T[0]は元の有理ベジエ曲線上の点となる。従って、元の有理ベジエ曲線は、線分(Q[0], T[0])及び線分(T[0], Q[3])の２つの線分に近似することが可能である。さらに細かい線分に分割して近似精度を向上させたい場合には、分割された有理ベジェ曲線１５０１及び２０２に対し、このサブディビジョン法を再度適用して、分割を繰り返せばよい。このように、サブディビジョン処理は乗算及び加算、「２」を用いた除算の繰り返しからなり、ＮＵＲＢＳの基底関数を求める演算に比べて非常に単純である。
【０１３８】
以上の有理ベジエ曲線に対するサブディビジョン法から類推して、有理ベジエ曲面に対するサブディビジョン法によりポリゴン分割を行うことが可能である。曲面の場合、制御点が媒介変数ｕ、ｖに対応したインデックスｉ、ｊを持つ２次元配列になる。すなわち、制御点がQ[i][j]と表される。図１６を用いて、有理ベジエ曲面にサブディビジョン法を適用し、ポリゴン分割する方法を説明する。
【０１３９】
図１６は、有理ベジエ曲面そのものは示していないが、有理ベジエ曲面を定義する制御点を簡略的に示した図であり、ｕ方向及びｖ方向ともに次数はｎ＝ｍ＝３であり、制御点数は４×４＝１６個である。図１６において、４隅の制御点(Q[0][0], Q[3][0], Q[3][3], Q[0][3])は、有理ベジエ曲面上の点である。
この有理ベジエ曲面に対してサブディビジョン法を適用するには、まず制御点のインデックスｊの値を０に固定し、４つの制御点(Q[0][0], Q[1][0], Q[2][0], Q[3][0])を用いて前記のサブディビジョン法を適用する。これにより、制御点(Q[0][0], R[0][0], S[0][0], T[0][0])からなる有理ベジェ曲線１６０１と、制御点(T[0][0], S[1][0], R[2][0], Q[3][0])からなる有理ベジェ曲線１６０２が生成し、元の有理ベジエ曲面上の新しい点T[0][0]が求められる。図１６には、この点T[0][0]のみが示されている。
【０１４０】
次に、インデックスｊを１だけインクリメントした４つの制御点(Q[0][1], Q[1][1], Q[2][1], Q[3][1])を用いてサブディビジョン法を適用し、同様に制御点を計算する。これにより、制御点(Q[0][1], R[0][1], S[0][1], T[0][1])と(T[0][1], S[1][1], R[2][1], Q[3][1])が得られる。但し、これらは計算過程により生じる中間データであって、もともとQ[0][1]及びQ[3][1]は元の有理ベジエ曲面上の点ではないので、生成された制御点T[0][1]も元の有理ベジエ曲面上の点ではない。さらに、同じ処理をインデックスｊが３になるまで繰り返す。ここまでで生じた２８個の制御点が図１７に示され、そのうちのT[0][0], T[0][3]が元のベジエ曲面上の新しい点である。尚、図１７において、有理ベジエ曲面上にある制御点は、○印をつけてある。
【０１４１】
さらに、前記のｕ方向のサブディビジョン法により生じた制御点を、以下に示す７つの制御点の組に分け、それぞれの組に対してｖ方向に再度サブディビジョン法を適用する。
(Q[0][0], Q[0][1], Q[0][2], Q[0][3])
(R[0][0], R[0][1], R[0][2], R[0][3])
(S[0][0], S[0][1], S[0][2], S[0][3])
(T[0][0], T[0][1], T[0][2], T[0][3])
(S[1][0], S[1][1], S[1][2], S[1][3])
(R[2][0], R[2][1], R[2][2], R[2][3])
(Q[3][0], Q[3][1], Q[3][2], Q[3][3])
図１８のように、最初の組(Q[0][0], Q[0][1], Q[0][2], Q[0][3])に対してサブディビジョン法を適用すると、制御点(Q[0][0], Q'[0][0], Q[0][1], Q'[0][1])と(Q'[0][1], Q[0][2], Q'[0][2], Q[0][3])が得られる。ここでQ'[0][1]は元の有理ベジエ曲面上の点である。同様に、他の組にもサブディビジョン法を適用し、最終的に７×７＝４９個の制御点が得られ、元の有理ベジエ曲面は、４×４＝１６個の制御点で定義された４つの小さな有理ベジエ曲面に分割される。また、分割された各々の小さな有理ベジエ曲面の制御点のうち、角にある４つの制御点は、元の有理ベジエ曲面上の点である。すなわち、９個の有理ベジエ曲面上の点が得られることになる。図１８において、これらの有理ベジエ曲面上の制御点には、○印がつけられている。これらの有理ベジエ曲面上の点を隣接するものどうし組み合わせることにより、平面ポリゴンを構成することができる。尚、さらに細かいポリゴンに分割して近似精度を向上させたい場合には、分割された有理ベジエ曲面に対して再度サブディビジョン法を適用すればよい。
【０１４２】
以上の本実施の形態４に係る曲面画像処理装置１００の曲面パッチ分割処理部１０５におけるサブディビジョン処理は、制御点トリミング部１４０２において不要な制御点が削除されるために、ＮＵＲＢＳ曲面上の点を直接求めるよりも演算量が少ない。従って、本実施の形態４で述べた、有理ベジエ曲面が定義されない不要な制御点の削除する方法を用いることにより、与えられたＮＵＲＢＳ曲面の制御点列をサブディビジョン処理が適用可能な有理ベジエ曲面の制御点列に効率よく変換することが可能である。
【０１４３】
（実施の形態５）
次に、本発明の曲面画像処理装置１００の曲面パッチ分割処理部１０５における処理についての説明を行う。尚、曲面パッチ分割処理部１０５における処理については、実施の形態５から８を用いて説明を行う。
【０１４４】
以下、本発明の実施の形態５に係る曲面画像処理装置１００の曲面パッチ分割処理部１０５を、図面を参照しながら説明する。
図２９は、本実施の形態５における曲面パッチ分割処理部１０５の機能ブロック図を示す図である。
本実施の形態５においては、曲面パッチ分割処理部１０５は、形状入力受付部２９０１、シルエットエッジ検出部２９０２、細分割レベル決定部２９０３、及び細分割部２９０４を備える。以下、それぞれの機能について詳細に説明する。
【０１４５】
形状入力受付部２９０１では、データ変換部１０４より、グローバル座標系における表現を視点に定義された座標系である視点座標系に変換するための視野変換行列、及び透視変換により視点座標系における表現を２次元スクリーン上に定義された座標系に変換する透視変換行列を含む視点情報と、描画するオブジェクトの形状に関する情報であるオブジェクト形状情報の入力を受け付ける。
【０１４６】
このオブジェクト形状情報は、データ変換部１０４より入力されて、オブジェクトを構成するパッチの形状を定義する制御点の座標（同次座標系表現）と、各パッチに隣接するパッチに関する情報である隣接パッチ情報を含んでいる。隣接パッチ情報の表現方法は特に限定しない。例えば、各パッチにはインデックスを付与しておき、隣接パッチ情報としては、パラメトリック空間のｖ＝０、ｕ＝１、ｖ＝１、ｕ＝０で隣接するパッチのインデックスを順に並べて表現する方法がある。隣接するパッチが存在しない場合には−１等の特別なインデックスを付与すれば良い。また、オブジェクト形状情報は、描画に利用するパッチの属性情報、例えば頂点法線ベクトルやテクスチャ座標情報等を含んでいても良い。
【０１４７】
シルエットエッジ検出部２９０２では、形状入力受付部２９０１で取得されたオブジェクトを構成する各パッチが、シルエットエッジを形成するパッチであるか否かを判定する。尚、判定結果を保持しておくために、各パッチにはそのパッチがシルエットエッジ形成パッチであるか否かを表す識別子（以降、エッジ識別子と称す）を定義しておき、例えば「０」で初期化しておくことにより、「０」がシルエットエッジ形成パッチでないことを意味する。
【０１４８】
図３１は、本実施の形態５に係るシルエットエッジ検出部２９０２における処理の流れを示すフローチャートである。以下、シルエットエッジ検出部２９０２における処理の流れを説明する。
まず各パッチについて、シルエットエッジ検出部２９０２の透視変換部２９０２ａは、視点情報に含まれている視野変換行列及び透視変換行列を用いて、制御点のうち曲面上に存在する４頂点Ｑ00、Ｑ30、Ｑ03、Ｑ33を透視変換し、スクリーン上での座標に変換する（Ｓ３１０２）。
【０１４９】
次に、符号付面積算出部２９０２ｂは、スクリーン上に変換された４頂点により形成される２次元図形の符号付面積を算出する（Ｓ３１０３）。一般に、２次元平面上の３個の頂点Ａ（ａx，ａy）、Ｂ（ｂx，ｂy）、Ｃ（ｃx，ｃy）により構成される三角形の符号付面積Ｓは下記の［数１３］で求められる。尚、符号付面積が正の場合に当該三角形は表向きの面であるとし、負の場合裏向きの面であるとする。
【０１５０】
【数１３】
2004178576.tif 000015
４頂点Ｑ00、Ｑ30、Ｑ03、Ｑ33を透視変換した後のスクリーン上での座標をそれぞれＲ00（ｒ00x，ｒ00y）、Ｒ30（ｒ30x，ｒ30y）、Ｒ03（ｒ03x，ｒ03y）、Ｒ33（ｒ33x，ｒ33y）とすると、４個の頂点により構成される図形をＲ00、Ｒ30、Ｒ03とＲ30、Ｒ33、Ｒ03の２組の三角形に分け、符号付面積Ｓ0、Ｓ1を以下の式で算出する。
【０１５１】
Ｓ0=（ｒ00x＊ｒ30y＋ｒ03x＊ｒ00y＋ｒ30x＊ｒ03y−ｒ03x＊ｒ30y−ｒ30x＊ｒ00y−ｒ00x＊ｒ03y）／２
Ｓ1=（ｒ30x＊ｒ33y＋ｒ03x＊ｒ30y＋ｒ33x＊ｒ03y−ｒ03x＊ｒ33y−ｒ33x＊ｒ30y−ｒ30x＊ｒ03y）／２
ここで、＊は積である。スクリーン上において４頂点が図３２（ａ）のような位置関係にある場合、符号付面積Ｓ0及びＳ1は同符号となるが、図３２（ｂ）の場合には異符号となる。
【０１５２】
そこで、シルエットエッジ検出部２９０２では、各パッチについて符号付面積は、正負の値を区別できるように異なる記憶領域（図示せず）に保持しておく。もしＳ0とＳ1が同符号の場合にはそれらを加算した値を記憶領域に保持する。尚、本実施の形態５では、４頂点をＲ00、Ｒ30、Ｒ03とＲ30、Ｒ33、Ｒ03の２組の三角形に分けたが、それ以外の方法、例えばＲ00、Ｒ33、Ｒ03とＲ00、Ｒ30、Ｒ33の組に分けても良く、同様の手順で処理可能である。
【０１５３】
次に、シルエットエッジ検出部２９０２は、各パッチの符号付面積の値を格納する記憶領域とは別に確保されている符号付面積の最大値を保持しておく記憶領域（図示せず）の値と、Ｓ３１０３で算出された符号付面積を比較する（Ｓ３１０４）。そして、符号付面積の方が大きければ、最大値を更新し、更新された値をその記憶領域に書き込む。ここで、最大符号付面積との比較には符号付面積Ｓ0、Ｓ1の絶対値の和を用いる。すなわち、Ｓ３１０３において算出された正の符号付面積をＡp、負の面積をＡm、記憶領域に格納されている符号付面積の最大値ＭＡＸＡをとすると、以下の処理を行う。
【０１５４】
（１）符号付面積の絶対値和Ａp＋｜Ａm｜を算出する。
（２）Ａp＋｜Ａm｜＞ＭＡＸＡならば、ＭＡＸＡ＝Ａp＋｜Ａm｜とする。
オブジェクトを構成する全てのパッチについて以上の処理が完了すると、Ｓ３１０５に移行する（Ｓ３１０１でＹ）。
そして、シルエットエッジ検出部２９０２は、算出された各パッチの符号付面積を参照し、正負の値がともに０でない場合（図３２（ｂ）の場合）には、そのパッチはシルエットエッジを形成しているとしてエッジ識別子を「１」にし、次のパッチの判定に移行する（Ｓ３１０６）。また、シルエットエッジ検出部２９０２は、Ｓ３１０６で正負どちらかの値が０の場合には、Ｓ３１０７に移行する。
【０１５５】
次に、シルエットエッジ検出部２９０２は、当該パッチの符号付面積の符号と、隣接パッチ情報を用いて参照される隣接パッチの符号付面積の符号を比較することによって、シルエットエッジ形成パッチであるか否かを判定する（Ｓ３１０７）。
そして、シルエットエッジ検出部２９０２は、当該パッチと隣接するパッチとの符号付面積の符号が異なれば（Ｓ３１０７でＮ）、その２個のパッチの間に表面と裏面の境界が存在することがわかり、シルエットエッジ形成パッチであると判定できる。従って、当該パッチと隣接する４個のパッチの符号付面積との積の値が負であればシルエットエッジ形成パッチであると判定して、エッジ識別子を「１」にする（Ｓ３１０８）。
【０１５６】
一方、全ての隣接するパッチと同符号あれば（Ｓ３１０７でＹ）、シルエットエッジ形成パッチではないと判定する（Ｓ３１０９）。尚、隣接パッチが存在しない（本発明の実施の形態では隣接パッチ情報に−１が与えられている）場合には、そのパッチはエッジを形成するものとしてエッジ識別子を「１」にする。シルエットエッジ検出部２９０２における全てのパッチについて上述した処理が完了すると、細分割レベル決定部２９０３における細分割レベルの決定の処理に移行する。尚、シルエットエッジ検出部２９０２で算出された各パッチの符号付面積及びエッジ識別子は細分割レベル決定部２９０３に送られる。
【０１５７】
細分割レベル決定部２９０３では、シルエットエッジ検出部２９０２において算出された各パッチの符号付面積及びエッジ識別子を用いて、細分割レベルを決定することが可能となる。
ところで、曲面パッチをポリゴンの集合で近似する方法は大きく以下の２種類に大別される。
【０１５８】
一つ目の方法ではまず、パッチを分割するステップ幅（何らかの方法で予め決定）に基づき、ｕｖパラメトリック空間を分割して、格子点を発生する。次に生成された格子点の３次元空間上での座標を算出し、それらの頂点を結んでポリゴンを生成する。
二つ目の方法では、パッチを２分割するための制御点を生成し、それを再帰的に繰り返してポリゴンを生成する方法である。前者をテッセレーションアルゴリズム、後者をサブディビジョンアルゴリズムと称す。
【０１５９】
本実施の形態５では、サブディビジョンアルゴリズムを用いてパッチをｕ、ｖ方向に２分割する操作を１レベルとし、その回数を細分割レベルと定義するが、テッセレーションアルゴリズムに対しても適用可能である。例えば、レベル１はパラメトリック空間をｕ、ｖ軸方向にそれぞれ１０分割、レベル２は２０分割等のようにレベルと分割数を対応づけるテーブルを用意しておけば良い。尚、代表的なサブディビジョンアルゴリズムである上述したド・カステリョのアルゴリズムを用いて、ベジェ曲線を細分割する説明は上述した通りである。
【０１６０】
図３３（ａ）に、サブディビジョンを適用する前のパッチの例を示し、そのパッチにサブディビジョンをレベル１、レベル２まで適用した場合の例を図３３（ｂ）及び（ｃ）にそれぞれ示す。図３３（ｂ）においては、４個のサブパッチが形成され、図３３（ｃ）においては１６個のサブパッチが形成される。
図３４は、細分割レベル決定部２９０３における処理の流れを示すフローチャートである。以下、図３４を参照しながらそれぞれのステップを詳細に説明する。
【０１６１】
シルエットエッジ形成パッチは、描画の際にオブジェクトの輪郭を形成するため、それ以外のパッチと比較してより細かく分割する方が望ましい。しかし、シルエットエッジ形成パッチの符号付面積は小さくなる傾向があるため、面積の大きさによって細分割レベルを決定すると細かく分割されない可能性がある。従って、本実施の形態５では、シルエットエッジ検出部２９０２において算出された符号付面積の最大値を用いてシルエットエッジ形成パッチの細分割レベル（固定値）を決定する。符号付面積の最大値を用いることにより、細かく分割する要求とオブジェクトが視点から遠くに離れて非常に小さく表示されている場合には細分割レベルを下げる要求との両立が達成される。
【０１６２】
具体的には、まず、細分割レベル決定部２９０３は、図３５（ａ）に示すような、テーブル記憶部２９０３ａにおいて記憶されている符号付面積の最大値とシルエットエッジ形成パッチの細分割レベルの対応関係が記述されたテーブル３５０１を用意しておき、このテーブル３５０１とシルエットエッジ検出部２９０２において算出された符号付面積の最大値を比較してシルエットエッジ形成パッチの細分割レベルを決定する（Ｓ３４０１）。尚、図３５（ａ）において、ＭＡi（ｉ＝０，．．．，４）は、符号付面積最大値の閾値である。
【０１６３】
次に、細分割レベル決定部２９０３は、オブジェクトを構成する各パッチについて、まずそのパッチがシルエットエッジ形成パッチであるか否かを、エッジ識別子を参照して判定する（Ｓ３４０３）。エッジ識別子が「１」の場合には（Ｓ３４０３でＹ）、シルエットエッジ形成パッチであるので、細分割レベルは直ちに決定される（Ｓ３４０４）。
一方、細分割レベル決定部２９０３は、エッジ識別子が「０」でありシルエットエッジを形成するパッチでない場合においては（Ｓ３４０３でＮ）、そのパッチの正の符号付面積を参照して細分割レベルを決定する。なぜならば、負の符号付面積が大きい場合にはそのパッチは裏向き、すなわち視点からは見ることのできない領域が非常に大きく、分割する必要がないためである。具体的には図３５（ｂ）に示すようなテーブル３５０２をテーブル記憶部２９０３ａに記録しておき、このテーブル３５０２を参照することで細分割レベルを決定する（Ｓ３４０５）。尚、図３５（ｂ）のテーブル３５０２において、Ａi（ｉ＝０，．．．，４）は符号付面積の閾値である。上述した処理を全てのパッチについて完了するまで続ける（Ｓ３４０２）。
【０１６４】
尚、本実施の形態５では、シルエットエッジ形成パッチの細分割レベルは、符号付面積の最大値に基づいて固定値に決定したが、それ以外のパッチと同様にして図３５（ｂ）のようなテーブル３５０２を用意し、符号付面積に基づいて決定しても良い。その場合には通常のパッチに用いるテーブルとは別にシルエットエッジ形成パッチ用のテーブルを記憶部２９０３ａに記録しておくことが望ましい。そして、符号付面積の閾値を低く設定しおくことが望ましい。また、前述したように、符号付面積が非常に小さくなる可能性があるという問題に注意しておく必要がある。
【０１６５】
細分割部２９０４では、細分割レベル決定部２９０３において決定された細分割レベルに基づき、サブディビジョンアルゴリズムを用いて各パッチを細分割する。そして、隣接するパッチの間で細分割レベルが異なると、パッチ間に隙間が発生するので、細分割部２９０４ではその隙間を補正する処理も行うが、その方法は特に限定しない。
また、例えば、発生した隙間に新たにポリゴンを生成する方法がある。図３６（ａ）に細分割前のオブジェクトの例を示し、図３６（ｂ）に、細分割を施した後のオブジェクトの例を示す。図３６（ｂ）の例では、オブジェクトの輪郭を生成するシルエットエッジ形成パッチはレベル２まで分割されており、その他のパッチはスクリーン上での面積に応じてレベル０又はレベル１まで分割されている。従って、シルエットエッジか否かを検出することにより、曲面画像をより精密に描画することが可能となる。
【０１６６】
以上の説明のように、本実施の形態５に係る曲面画像処理装置１００によれば、オブジェクトを構成するパッチの制御点のうち、パッチ上に存在する４頂点を透視変換し、変換された頂点により構成される図形の符号付面積を算出する。続いて、算出された符号付面積の符号を参照し、各パッチがシルエットエッジを形成するパッチであるか否かをシルエットエッジ検出部２９０２において判定する。そして、判定された結果と符号付面積に基づき、細分割レベル決定部２９０３において各パッチの細分割レベルを決定する。
【０１６７】
以上の処理により、スクリーン上でのパッチの面積に応じて、細分割レベルを適応的に制御しつつ、エッジ部分の滑らかなオブジェクトを生成することが可能である。また、細分割レベルの決定は、細分割処理を施す前に一度だけ実行されるため、細分割するごとに平坦度を算出して分割するか否かを決定する従来の技術と比較して計算量は少ない。また、シルエットエッジ形成パッチの判定にも符号付面積を流用することで、計算負荷を最小限に抑えることが可能である。
尚、本実施の形態５における曲面画像処理装置１００は、パッチ上に存在する制御点のみを用いてポリゴン近似し描画する場合に特に有効である。
【０１６８】
（実施の形態６）
次に、本実施の形態６に係る曲面画像処理装置１００を、図面を参照しながら説明する。尚、本実施の形態６における曲面画像処理装置１００の機能構成は、上述の実施の形態５と同様であるが、シルエットエッジ検出部２９０２及び細分割レベル決定部２９０３における処理が異なる。以下、それぞれの機能について詳細に説明する。
【０１６９】
また、本実施の形態６における曲面画像処理装置１００は、パッチの形状を定義する全ての制御点を用いてポリゴン近似し描画する場合に特に有効である。そして、形状入力受付部２９０１では、実施の形態５と同様に、視野変換行列及び透視変換行列を含む視点情報と、オブジェクトの形状に関する情報と隣接パッチ情報を含むオブジェクト形状情報の入力を受け付ける。
【０１７０】
図３７は、本実施の形態６に係るシルエットエッジ検出部２９０２における処理の流れを示すフローチャートである。
最初に、パッチ上に存在する制御点のみを透視変換した実施の形態６と異なり、全ての制御点（４階（３次）の有理ベジェ曲面の場合は１６頂点）を透視変換して（Ｓ３７０２）、２次元スクリーン上に変換する。ここで、隣接する制御点を結ぶと、図３０に示すような２次元スクリーン上に３×３＝９個の図形が生成される。以降、この生成された図形をコントロールポリゴンと称す。
【０１７１】
次に、各曲面パッチについて、符号付面積の正負の値が区別できるように、別々の記憶領域を確保しておき、生成された全てのコントロールポリゴンの符号付面積を実施の形態５と同様の方法で算出する（Ｓ３７０３）。そして、算出された値が正の場合には正の面積を格納する記憶領域の値に加算し、負の場合には負の面積を格納する記憶領域の値に加算する。９個のコントロールポリゴンについて処理が終了するとＳ３７０４に移行する。
【０１７２】
パッチの形状は制御点によって定義され、ベジェパッチには凸包性があることから、コントロールポリゴンを用いることによってそのパッチがシルエットエッジ形成パッチであるか否かを判定することが可能である。例えば、図３８（ａ）では全てのコントロールポリゴンが表を向いており、図３８（ｂ）では全て裏を向いているため、シルエットエッジ形成パッチではないと判定できる。一方、図３８（ｃ）や（ｄ）は、表向きのコントロールポリゴンと裏向きのコントロールポリゴンが混在しているため、シルエット形成パッチであると判定できる。
【０１７３】
これは、シルエットエッジ検出部２９０２の符号付面積算出部２９０２ｂにおいて算出したコントロールポリゴンの符号付面積に正もしくは負のどちらかの値しか含まれなければ、シルエットエッジ形成パッチではなく、逆に正負両方の値が含まれていれば、そのパッチはシルエットエッジ形成パッチであると判定できる。
そこで、シルエットエッジ検出部２９０２は、前述した記憶領域から加算された正負の符号付面積の値を取得して積を算出して０となるかの判定を行う（Ｓ３７０４）。その積が「０」でなければ（Ｓ３７０４でＮ）、シルエットエッジ形成パッチであると判定し（Ｓ３７０５）、エッジ識別子を「１」にする。
【０１７４】
また、シルエットエッジ検出部２９０２は、加算された正負の符号付面積の積が「０」であれば（Ｓ３７０４でＹ）、シルエットエッジ形成パッチではないと判定する（Ｓ３７０６）。以上の処理を全てのパッチに対して適用して（Ｓ３７０１）、全てのパッチの処理を終えることにより処理を終了する。
図３９は、本実施の形態６に係る細分割レベル決定部２９０３における処理の流れを示すフローチャートである。
【０１７５】
まず、細分割レベル決定部２９０３は、シルエットエッジ検出部２９０２において付与されたエッジ識別子を参照し、そのパッチがシルエットエッジ形成パッチであるか否かを調べる（Ｓ３９０２）。実施の形態５では、シルエットエッジ形成パッチの細分割レベルは一定としたが、本実施の形態６では符号付面積を参照して決定する。その際、前述したように符号付面積が小さくなる問題を緩和するために、指標として正負の符号付面積の絶対値和を用いる。
【０１７６】
次に、細分割レベル決定部２９０３は、テーブル記憶部２９０３ａに図４０に示すようなシルエットエッジ形成パッチのための符号付面積と細分割レベルを対応付けるテーブル４０００を保持し、このテーブル４０００を参照して、当該パッチの符号付面積と比較することで細分割レベルを決定する（Ｓ３９０３）。尚、ここでは説明しなかったが、実施の形態５と同様にオブジェクトを構成するパッチの最大符号付面積を参照して、シルエットエッジ形成パッチの細分割レベルを決定しても良い。また、細分割レベル決定部２９０３は、図４０のテーブル４０００ではなく、シルエットエッジ形成パッチ以外のパッチと同様に正の符号付面積と細分割レベルを対応付けるテーブルを用意して、細分割レベルを決定しても良い。尚、シルエットエッジでない場合においては（Ｓ３９０２でＮ）、細分割レベル決定部２９０３は、エッジ識別子が「０」のパッチに関しては実施の形態５と同様に通常のテーブルを参照して細分割レベルを決定する（Ｓ３９０４）。
【０１７７】
ところで、例えば円柱のようなオブジェクトであれば回転軸方向にはそれほど細かく分割する必要がないように、ｕ、ｖ軸方向の細分割レベルは独立して設定できる方が望ましい場合がある。しかし、これまでに述べたアルゴリズムでは、ｕ、ｖ軸方向に対して、同じ細分割レベルが設定される。そこで、以下において、算出されたコントロールポリゴンの符号付面積を用いて、ｕ、ｖ軸方向の細分割レベルを別々に決定する方法について説明する。
【０１７８】
シルエットエッジ検出部２９０２では、上述した方法と同様にパッチの形状を定義する全ての制御点を透視変換してコントロールポリゴンを生成し、各コントロールポリゴンの符号付面積を算出する。算出されたコントロールポリゴンの符号付面積は、符号に応じて記憶領域に加算される。そして、全てのコントロールポリゴンの処理が終了した時点での記憶領域の値からシルエットエッジであるか否かを判定する。さらに本発明では、符号付面積の和だけでなくそれぞれのコントロールポリゴンの符号付面積の値を記憶領域（図示せず）に別々に保持しておく。４階（３次）のベジェパッチ（図３０参照）では、９個の記憶領域にそれぞれのコントロールポリゴンの符号付面積が保持される。これらの値は細分割レベル決定部２９０３に送られる。
【０１７９】
図４１は、本手法の細分割レベル決定部２９０３における処理の流れを示すフローチャートである。
最初に、シルエットエッジ検出部２９０２は、エッジ識別子を参照して、各パッチがシルエットエッジ形成パッチであるか否かを調べる（Ｓ４１０２）。シルエットエッジ形成パッチである場合には（Ｓ４１０２でＹ）、正負の符号付面積の絶対値和に基づき、シルエットエッジ用テーブルを参照してｕｖ方向軸の細分割レベルを決定する（Ｓ４１０３）。従って、シルエットエッジ形成パッチに関してはｕ、ｖ軸方向が同じ細分割レベルとなる。但し、シルエットエッジ形成パッチについても後述する方法を用いて、ｕ、ｖ軸方向で独立に細分割レベルを決定してもよい。その場合、シルエットエッジ部分が滑らかにならない可能性があることに注意を要する。
【０１８０】
エッジ識別子が「０」の場合の細分割レベル決定部２９０３における処理を、図４２を参照しながら説明する。図４２（ａ）〜（ｄ）はそれぞれコントロールポリゴンが集合してなる曲面を表している。図４２（ａ）のどのコントロールポリゴンも形状が類似しており、面積もほぼ等しい。従って、このパッチはｕ軸方向にも、ｖ軸方向にもそれほど湾曲していないと言える。
【０１８１】
一方、図４２（ｂ）では、制御点Ｑ10、Ｑ11、Ｑ12、Ｑ13、Ｑ20、Ｑ21、Ｑ22、Ｑ23が、制御点Ｑ30、Ｑ31、Ｑ32、Ｑ33の方に偏っており、ｕ軸方向に湾曲していることがわかる。これは図４２（ｂ）のパッチはｕ軸方向に対して細かく分割される必要があることを示している。
同様に図４２（ｃ）ではｖ軸方向に、図４２（ｄ）ではｕ、ｖ両軸方向に細かく分割する必要があることがわかる。これらの性質を利用して本手法では、ｕ、ｖそれぞれの軸方向に存在するコントロールポリゴンの面積比をパッチの湾曲の程度を表す指標として用い、細分割レベルを決定する。以降、湾曲の度合いを表す指標を湾曲パラメータと称す。
【０１８２】
まず細分割レベル決定部２９０３は、パッチを構成するコントロールポリゴンの符号付面積が全て負であるか否かを調べ（Ｓ４１０４）、負であれば（Ｓ４１０４でＹ）そのパッチの細分割レベルを０に決定し（Ｓ４１０５）、次のパッチの処理に移行する。
また、細分割レベル決定部２９０３は、パッチを構成するコントロールポリゴンの符号付面積が全て負であるか否かを調べ、負でない場合においては（Ｓ４１０４でＮ）、次に、ｕ軸方向に存在するコントロールポリゴンの面積比を算出する（Ｓ４１０６）。具体的には以下の手順に従う。
【０１８３】
（１）制御点Ｑj0及びＱj1（ｊ＝０，．．．，３）により形成される３個のコントロールポリゴンの符号付面積の値を取得する。
（２）（１）で取得された符号付面積の値をＡ0、Ａ1、Ａ2とすると、これらのうち最大値ＡＭＡＸと最小値ＡＭＩＮを求める。
（３）以下の式を計算し、湾曲パラメータＣu0を求める。
【０１８４】
Ｃu0＝ＡＭＡＸ／ＡＭＩＮ
（４）Ｑj1、Ｑj2（ｊ＝０，．．．，３）により形成されるコントロールポリゴン、及びＱj2、Ｑj3（ｊ＝０，．．．，３）により形成されるコントロールポリゴンを用いて同様の処理を行い、Ｃu1、Ｃu2をそれぞれ算出する。
（５）（３）及び（４）の値を平均して細分割レベルの決定に用いる湾曲パラメータＣuを算出する。
【０１８５】
Ｃu＝（Ｃu0＋Ｃu1＋Ｃu2）／３
尚、ここでは全てのコントロールポリゴンを用いて面積比を求め、その平均を湾曲パラメータとしたが、その限りではない。例えば、境界線ｖ＝０、ｖ＝１に隣接しているコントロールポリゴンのみを用いて湾曲パラメータを算出し、その平均を求めてもよい。逆に、ｕ軸に平行な境界線に隣接しないコントロールポリゴンのみを用いて算出してもよい。
【０１８６】
そして、細分割レベル決定部２９０３は、Ｓ４１０６において算出した湾曲パラメータに基づき、ｕ軸方向の細分割レベルを決定する（Ｓ４１０７）。この際、細分割レベル決定部２９０３は、図４３に示すような、湾曲パラメータＣと細分割レベルを対応付けるテーブル４３０１をテーブル記憶部２９０３ａに保持しておき、算出された値と比較することで細分割レベルを決定することができる。尚、図４３において、Ｃi（ｉ＝０，．．．，４）は湾曲パラメータの閾値である。
【０１８７】
そして、細分割レベル決定部２９０３は、Ｓ４１０６及びＳ４１０７と同様の処理を、ｖ軸方向に隣接する３個のコントロールポリゴンに対して行う（Ｓ４１０８及びＳ４１０９）。そしてｖ軸方向の細分割レベルを決定する。以上の処理を、全てのパッチについて行うまで続ける（Ｓ４１０１）。以上で説明した方法を用いることにより、本発明に係る曲面画像処理装置１００は、ｕ、ｖ軸方向の細分割レベルをそれぞれ独立に決定することが可能となる。
【０１８８】
そして、細分割部２９０４では、細分割レベル決定部２９０３により決定された細分割レベルに基づき、各パッチを細分割する。そして、パッチ間に隙間が発生する場合には、それを補正する処理も行う。
このように、本実施の形態６に係る曲面画像処理装置１００によれば、各パッチを構成する全ての制御点を透視変換することでスクリーン座標系に変換し、それによって形成される全てのコントロールポリゴンの符号付面積を算出する。算出された符号付面積からシルエットエッジ形成パッチであるか否かをシルエットエッジ検出部２９０２において判定し、その判定結果と符号付面積の値に応じて、細分割レベル決定部２９０３において細分割レベルを決定する。
【０１８９】
従って、パッチの形状を定義する全ての制御点を用いてポリゴン近似する方法であっても、ポリゴン数の増大を抑制しつつ、エッジ部分が滑らかなオブジェクトを生成することが可能である。また、細分割レベル決定部２９０３における処理は、細分割を実施する前に一度だけ行えば良く、従来技術と比較して計算量は少なくて済む。さらに、わずかな処理を追加するだけでシルエットエッジ形成パッチの判定が可能であり、計算負荷の面からも非常に効率的である。
【０１９０】
（実施の形態７）
以下、本実施の形態７に係る曲面画像処理装置１００を、図面を参照しながら説明する。  図４４は、本実施の形態７における曲面画像処理装置１００の構成の一例を示す図である。尚、本実施の形態７における曲面画像処理装置１００は、実施の形態５で説明した手段に加えて、さらに最大細分割レベル決定部４４０１を備えていることを特徴とする。
【０１９１】
また、最大細分割レベル決定部４４０１を備えることにより、スクリーン上における面積が大きくても細分割する必要のないパッチは分割されなくなり、さらにポリゴン数を抑制することが可能である。以下でそれぞれの機能について詳細に説明するが、図２９と同様のものには同一番号を付し、説明を省略する。尚、本実施の形態７では、オブジェクトを構成するパッチの形状を定義する制御点のうちパッチ上に存在する頂点のみを用いてポリゴン近似する場合について説明するが、全ての制御点を用いて近似する場合にも同様に適用可能である。  図４４において、形状入力受付部２９０１及びシルエットエッジ検出部２９０２における処理は、実施の形態５と同様であり、各パッチの符号付面積とシルエットエッジ形成パッチであるか否かの判定結果が細分割レベル決定部２９０３に送られる。
【０１９２】
例えば、スクリーン上での面積が非常に大きくても平坦なパッチであれば細かく分割する必要はない。そこで、最大細分割レベル決定部４４０１は、オブジェクト形状情報を取得し、オブジェクトを構成する各パッチについてどの程度湾曲しているのかを示す指標を算出することによって、最大細分割レベルを決定する。以降、どの程度湾曲しているのかを示す指標を、曲率パラメータと称す。
【０１９３】
この曲率パラメータを最大細分割レベル決定部４４０１において決定する２種類の方法について以下説明する。いずれの指標も制御点によって張られる多面体は、パッチ形状の粗い近似であることを利用している。尚、以下の処理はグローバル座標系で実施されるため、視野変換や透視変換を行う必要はない。
方法１は、図４５（ａ）参照するものであり、最大細分割レベル決定部４４０１においてパッチ上に存在する制御点によって張られる平面と、それ以外の制御点との間の距離を算出して曲率パラメータを決定する方法である。具体的には以下の手順に従う。
【０１９４】
（１）制御点Ｑ00、Ｑ30、Ｑ03によって張られる平面の方程式α0を求める。
（２）一般に、平面α：ａ＊ｘ＋ｂ＊ｙ＋ｃ＊ｚ＋ｄ＝０と、３次元空間上の点Ｐ（ｘ0，ｙ0，ｚ0）との間の距離Ｌは以下の式で求められる。ここで、＊は積である。
【０１９５】
【数１４】
2004178576.tif 000016
上式を用いて、（１）で求められた平面α0と制御点Ｑ01、Ｑ02、Ｑ10、Ｑ11、Ｑ12、Ｑ20、Ｑ21との間の距離ｌ01、ｌ02、ｌ10、ｌ11、ｌ12、ｌ20、ｌ21を算出する。
（３）制御点Ｑ30、Ｑ33、Ｑ03によって張られる平面の方程式α1を求める。
【０１９６】
（４）（３）で求められた平面α1と制御点Ｑ12、Ｑ13、Ｑ21、Ｑ22、Ｑ23、Ｑ31、Ｑ32との間の距離ｌ12'、ｌ13'、ｌ21'、ｌ22'、ｌ23'、ｌ31'、ｌ32'を算出する。
（５）制御点Ｑ03とＱ30及びＱ00とＱ33を結ぶ対角線の長さｄ0、ｄ1をそれぞれ求める。
（６）以下の式を解き、曲率パラメータＣを算出する。
【０１９７】
ｌ0＝ｌ01＋ｌ02＋ｌ10＋ｌ11＋ｌ12＋ｌ20＋ｌ21
ｌ1＝ｌ12'＋ｌ13'＋ｌ21'＋ｌ22'＋ｌ23'＋ｌ31'＋ｌ32'
Ｃ＝（ｌ0＋ｌ1）／（ｄ0＋ｄ1）
尚、ここでは張られる平面に応じて距離を算出する制御点を２個のグループに分けたが、その方法は特に限定しない。例えば、それぞれの平面に対して平面上にない全ての制御点との距離を求めて曲率パラメータを決定しても良い。逆に、代表的な点（例えば、制御点の中で中央に位置するＱ11、Ｑ12、Ｑ21、Ｑ22）のみを用いる方法でも良い。
【０１９８】
方法２では、図４５（ｂ）を参照するものであり、最大細分割レベル決定部４４０１において制御点の端点を結んだ線分の長さと隣接する制御点間の距離の和を算出して曲率パラメータを決定する。具体的には以下の手順に従う。
（１）制御点Ｑ0iとＱ3iを結ぶ線分の長さｄiを算出する。
（２）ｕ方向に隣接する制御点ＱjiとＱ(j+1)iを結んだ線分の長さｌij（ｊ＝０，．．．，２）を算出する。
（３）以下の式を解き、Ｃiを算出する。
Ｃi＝（ｌi0＋ｌi1＋ｌi2）／ｄi
（４）（１）〜（３）までの処理を繰り返し、Ｃ0、Ｃ1、Ｃ2、Ｃ3を求める。
（５）制御点Ｑi0とＱi3を結ぶ線分の長さｄi'を算出する。
（６）ｖ方向に隣接する制御点ＱijとＱi(j+1)を結んだ線分の長さｌij'（ｊ＝０，．．．，２）を算出する。
（７）以下の式を解き、Ｃi'を算出する。
Ｃi'＝（ｌi0'＋ｌi1'＋ｌi2'）／ｄi'
（８）（５）〜（７）までの処理を繰り返し、Ｃ0'、Ｃ1'、Ｃ2'、Ｃ3'を求める。
（９）（４）と（８）で求めた値から平均を算出し、曲率パラメータＣとする。
Ｃ＝（Ｃ0＋Ｃ1＋Ｃ2＋Ｃ3＋Ｃ0'＋Ｃ1'＋Ｃ2'＋Ｃ3'）／８
尚、ここでは制御点を用いて形成される全ての線分について処理を行い、曲率パラメータを決定したが、その方法は特に限定しない。例えば境界線上（ｕ＝０、ｕ＝１、ｖ＝０、ｖ＝１）についてのみ処理を行い決定しても良い。
【０１９９】
次に、最大細分割レベル決定部４４０１は、図４６に示すような曲率パラメータと最大細分割レベルとの対応関係を表すテーブル４６０１を用意しておき、算出されたＣとの比較を行ってそのパッチの最大細分割レベルを決定する。尚、図４６において、εi（ｉ＝０，．．．，４）は曲率パラメータの閾値である。以上の処理を全てのパッチについて行う。算出された最大細分割レベルは、細分割レベル決定部２９０３に送られる。
【０２００】
細分割レベル決定部２９０３では、シルエットエッジ検出部２９０２において算出された各パッチの符号付面積と、エッジ識別子を用いて細分割レベルを決定するが、その際、最大細分割レベル決定部４４０１において決定された最大細分割レベルについても考慮する。従って、図３５（ｂ）を修正した図４７のようなテーブル４７０１を用意し、最大細分割レベル決定部４４０１より送られてくる最大細分割レベルに応じて細分割レベルの欄を更新する。そして、細分割レベル決定部４４０１は、更新されたテーブルを用いて、実施の形態５と同様の手順で細分割レベルを決定する。
【０２０１】
尚、図４７において、ＭＡＸＬは最大細分割レベル決定部４４０１より送られてきた最大細分割レベルであり、ＣＬＩＰ（ｘ）は、「ｘ」の値が０以上の場合にはその値とし、「ｘ」が０より小さい場合には０とする意味である。
細分割部２９０４では、細分割レベル決定部２９０３において決定された細分割レベルに応じて各パッチを細分割し、隙間を補正する処理を行う。
【０２０２】
このように、本実施の形態７に係る曲面画像処理装置１００によれば、最大細分割レベル決定部４４０１において、各パッチの最大細分割レベルを予め決定する。それにより、例えば限りなく平坦に近いような細分割する必要のないパッチの無駄な分割を回避することができ、ポリゴンをさらに効率的に生成してオブジェクトの形状を近似することが可能である。また、最大細分割レベル決定部４４０１における処理は、オブジェクト形状情報が入力された時点で一度だけ行えば良く、最小限の計算負荷で実現できる。
【０２０３】
（実施の形態８）
以下、本発明の実施の形態８に係る曲面画像処理装置１００を、図面を参照しながら説明する。
【０２０４】
図４８は、本実施の形態８における曲面画像処理装置１００の構成の一例を示す図である。図４８の曲面画像処理装置１００の曲面パッチ分割処理部１０５は、実施の形態５で説明した処理部に加えて、初期細分割部４８０１を備えていることを特徴とする。この初期細分割部４８０１を備えることにより、細分割レベルを決定する前において、小さいパッチ単位に細分割レベルを決定することができ、オブジェクトのポリゴン近似をより柔軟に行うことを可能とする。以下、それぞれの機能について詳細に説明するが、図２９と同様のものには同一番号を付し、説明を省略する。
【０２０５】
形状入力受付部２９０１では、視点情報及びオブジェクト形状情報の入力を受け付ける。取得されたデータは初期細分割部４８０１に送られる。
オブジェクトが数個のパッチによって構成されている場合や、非常に大きなパッチばかりで構成されている場合、それらに細分割レベルを設定すると、全体的に粗くしか分割されない、或いは過度に細かく分割される可能性が高く、柔軟なレベルの制御を行うことは困難である。そこで、初期細分割部４８０１では、細分割レベルを決定する前に予め数レベルの細分割を実施する。細分割レベル決定部２９０３では、数レベル分割された後の各パッチに対して細分割レベルを決定する。初期細分割部４８０１における細分割レベル数を決定する方法は特に限定しない。予めレベル数を決定しておいても良いし、オブジェクトを構成するパッチの個数に応じて決定しても良い。或いは、オブジェクトを構成する初期のパッチを透視変換して符号付面積を算出し、その最小値より細分割レベルを決定しても良い。
【０２０６】
そして、初期細分割部４８０１における細分割方法は、各パッチの形状を定義する制御点のうち、パッチ上に存在する点のみを用いてオブジェクトをポリゴン近似する場合には、テッセレーションアルゴリズムを用いても、サブディビジョンアルゴリズムを用いても良い。全ての制御点を用いる場合には、細分割された後のパッチの制御点が必要となるため、前述したようド・カステリョのアルゴリズムを用いたサブディビジョン処理を行う必要がある。
【０２０７】
以上のような方法により決定された細分割レベルに基づき、オブジェクトを構成する全てのパッチを同じレベルだけ細分割する。細分割された後のパッチデータが、シルエットエッジ検出部２９０２に送られる。
シルエットエッジ検出部２９０２、細分割レベル決定部２９０３、細分割部２９０４では、初期細分割部４８０１において細分割された全てのパッチについて処理を行い、ポリゴン近似されたオブジェクトを生成する。  尚、本実施の形態８における曲面画像処理装置１００は、最大細分割レベル決定部４４０１を備えていても良い。
【０２０８】
このように、本実施の形態８に係る曲面画像処理装置１００によれば、初期細分割部４８０１において、オブジェクトを構成する各パッチが、細分割レベルが決定される前に数レベル細分割される。そして、細分割されたことにより生成されるパッチに対してシルエットエッジ検出部２９０２や細分割レベル決定部２９０３を用いて細分割レベルを決定する。従って、非常に少ないパッチ数で構成されているオブジェクトや、非常に大きなパッチばかりで構成されているオブジェクトであっても細分割レベルを柔軟に設定でき、ポリゴン数の増大を抑制しつつ、エッジ部分の滑らかなオブジェクトを生成することが可能である。
【０２０９】
（実施の形態９）
次に、実施の形態９を用いて本発明に係る曲面画像処理装置１００の法線計算部１０６における有理ベジェ曲面の各制御点の法線計算の処理についての説明を行う。尚、この法線計算においては、ベジェ曲面の緯度、明るさ等を決定するものである。
【０２１０】
図５０は、本実施の形態９に係る法線計算部１０６における構成を表す機能ブロック図である。
法線計算部１０６は、データ変換部１０５でベジェデータに変換された後のベジェ曲面の各制御頂点の座標が入力される制御頂点入力部５００１、各制御頂点の法線ベクトルの算出を行う法線算出部５００２、及び透視変換部１０７に対して制御点の出力を行う制御点出力部５００３を備える。
【０２１１】
また、法線算出部５００２には、制御点が縮退しているか否か、法線ベクトルの算出の対象となる制御点か否かの判定を行う判定部５００２ａを備えている。
図５１は、曲面画像処理装置１００の別の構成を表すブロック図であり、法線ベクトルの計算処理を実際に行うＣＰＵ５１０１、Ｉ／０５１０２、ベジェ曲面の制御点の情報を記憶するメモリ５１０３を備える。また、メモリ５１０３は、図５５に示すテーブル情報を記憶するテーブル記憶部５１０３ａを保持する。
【０２１２】
図５２は、本実施の形態９に係る法線算出部５００２の処理手順を示すフローチャートである。
最初に、制御頂点入力部５００１には、曲面パッチ分割処理部１０５からベジエ曲面を構成する制御点Ｐｉｊ（０≦ｉ，ｊ≦３）が入力される（Ｓ５２０１）。制御点の情報はＩ／０５１０２を通じて、メモリ５１０３に記録される。尚、この制御点の情報は、上述したように、キーボードから入力しても構わず、また記録メディアに記録されたマテリアルの読み込み部を通じて入力しても構わない。
【０２１３】
図５５（ａ）及び（ｂ）は、メモリ５１０３に記憶されている制御点及び頂点座標を記載したリスト５５０１、制御点及び法線を記載したリスト５５０２の一例を示している。尚、リストに記載される制御点は、ベジエ曲面の一つのパッチごとに入力してもよく、複数のパッチをまとめて入力しても構わない。さらに、複数のベジエ曲面を入力しても構わない。
【０２１４】
法線算出部５００２は、制御頂点入力部５００１から入力された制御点の法線ベクトルを算出するが、最初に、判定部５００２ａにおいて、入力された制御点Ｐ００に対して、隣接している制御点と縮退しているか否かを判定する。すなわちＰ００とＰ０１、或いはＰ００とＰ１０が一致しているか否かを判断する（Ｓ５２０２）。
いずれの制御点とも縮退せず一致していない場合には（Ｓ５２０２でＮ）、法線算出部５００２は隣接する制御点間の差分ベクトルを算出する。つまり、差分ベクトル（Ｐ１０−Ｐ００）と、差分ベクトル（Ｐ０１−Ｐ００）とを算出する（Ｓ５２０３）。
【０２１５】
続いて、法線算出部５００２は差分ベクトルの外積（Ｐ１０−Ｐ００）×（Ｐ０１−Ｐ００）を算出して（Ｓ５２０５）、正規化して制御点Ｐ００の法線を算出する（Ｓ５２０５）。下記に示す（数１５）には、法線算出部５００２における法線を算出する式を示す。このようにして、算出されたものを各制御点における法線ベクトルとしてメモリ５１０３に格納する。
【０２１６】
【数１５】
2004178576.tif 000017
次に、法線算出部５００２は、ベジェ曲面の四隅の頂点の法線を算出したか否かの確認を行い（Ｓ５２０６）、全ての頂点の法線の算出を行っていない場合においては（Ｓ５２０６でＮ）、再度Ｓ５２０２以下の処理を繰り返し、法線算出部５００２において四隅の頂点の法線を算出した場合においては（Ｓ５２０６でＹ）、一連の処理を終了する。
【０２１７】
図５３には、法線の算出対象の制御点に隣接している制御点が縮退していない場合の差分ベクトル５３０１（Ｐ１０−Ｐ００）、差分ベクトル５３０２（Ｐ０１−Ｐ００）、差分ベクトルの外積５３０３（Ｐ１０−Ｐ００）×（Ｐ０１−Ｐ００）の例を示す。
一方、法線算出部５００２は、制御点であるＰ００とＰ０１、Ｐ００とＰ１０の、いずれか、或いは、両方が縮退して一致する場合には、近傍の制御点を用いて法線を算出する（Ｓ５２０６でＹ）。このように隣接する制御点が縮退している場合について、図５４（ａ）、（ｂ）及び（ｃ）を用いて説明を行う。
【０２１８】
尚、本実施の形態９に係る法線算出部５００２の判定部５００２ａは、Ｐ００とＰ０１が一致しており、Ｐ００とＰ１０は一致しない場合には、差分ベクトル（Ｐ１０−Ｐ００）と、差分ベクトル（Ｐ１１−Ｐ００）とを算出するように判定する。もし、Ｐ１１とＰ００が一致していれば、Ｐ１２、Ｐ１３、Ｐ２１、Ｐ２２、Ｐ２３、Ｐ３１、Ｐ３２、Ｐ３３と順にＰ００と一致しないものを探した後に、探した点とＰ００との間で差分ベクトルを算出するように判定する。
【０２１９】
図５４は、法線の算出対象の制御点Ｐ００に隣接する制御点が縮退している場合を説明するための参考図である。
図５４（ａ）には、Ｐ００とＰ０１が一致する場合の例を示している。差分ベクトル５４０１は（Ｐ１０−Ｐ００）であり、差分ベクトル５４０２は（Ｐ１１−Ｐ００）であり、法線ベクトル５４０３はこれらの外積（Ｐ１０−Ｐ００）×（Ｐ１１−Ｐ００）となる。
【０２２０】
図５４（ｂ）には、Ｐ００とＰ０１が一致した際に、別の差分ベクトルを用いてＰ００の法線ベクトルを算出する例を示している。法線計算の対象となる２つの差分ベクトルの成す角度が所定角度よりも小さいような場合や、法線ベクトルの算出の対象である制御点Ｐ００と差分ベクトルの算出の対象となる制御点の距離が所定距離よりも短い場合においては、法線ベクトルを正確に算出するために、図５４（ｂ）に示すように、差分ベクトル５４０４及び差分ベクトル５４０５を用いて法線ベクトル５４０６の算出をすることも考え得る。
【０２２１】
或いは、法線算出部５００２は、図５４（ｃ）に示すように、Ｐ００とＰ０１は一致せず、Ｐ００とＰ１０が一致している場合には、差分ベクトル５４０８（Ｐ０１−Ｐ００）と、差分ベクトル５４０７（Ｐ１１−Ｐ００）を算出し、法線ベクトル５４０９はこれらの外積（Ｐ１１−Ｐ００）×（Ｐ０１−Ｐ００）となる。尚、判定部５００２ａはＰ１１とＰ００が一致しておれば、先と同様にＰ２１、Ｐ３１、Ｐ１２、Ｐ２２、Ｐ３２、Ｐ１３、Ｐ２３、Ｐ３３と順にＰ００と一致しないものを探した後に、探した点とＰ００との間で差分ベクトルを算出するように判定する。
【０２２２】
また、判定部５００２ａは、Ｐ００とＰ０１とＰ１０が一致する場合には、Ｐ０２とＰ００、Ｐ２０とＰ００とで、差分ベクトル（Ｐ２０−Ｐ００）と、差分ベクトル（Ｐ０２−Ｐ００）とを算出すると判定する。もし、Ｐ０２とＰ００と一致している場合には、Ｐ０３、Ｐ２１、Ｐ３１、Ｐ３２、Ｐ３３の順に探す。Ｐ２０とＰ００と一致している場合には、Ｐ３０、Ｐ１２、Ｐ１３、Ｐ２３、Ｐ３３と順に探す。そして、一致しないものを探した後に、探した点とＰ００との間で差分ベクトルを算出するように判定する。
【０２２３】
尚、全ての制御点が一つの曲線上にのる、或いは一つの点に縮退する場合には、ベジエ曲面ではないため、描画対象から削除してしまっても構わない。
制御点出力部５００３は、法線計算部１０６にて計算された法線の情報が入力される。或いは、メモリ２０３に保存する。図５５（ｂ）は、メモリ２０３に保存される法線データの格納例を示す。尚、図５５（ａ）及び（ｂ）では、制御点の頂点座標と、法線とを独立に管理している様子を示したが、一括で管理することができるのは言うまでもない。
【０２２４】
そして、本実施の形態９に係る法線計算部１０６において算出された制御点のデータは、透視変換部１０７及びレンダリング処理部１０８における３次元画像の描画処理に用いられる。
以上の説明のように、本実施の形態９に係る法線計算部１０６においては、法線の計算の対象となる隣接する制御点が縮退しているような場合においても、法線算出部５００２においてベジエ曲面の制御点の法線ベクトルを正しく効率的に計算することができる。尚、ベジェ曲面上にのる制御点のみを用いて３次元画像の描画処理を行う場合は、曲面内部の制御点に関する法線計算を行う必要はない。
【産業上の利用可能性】
【０２２５】
本発明に係る曲面画像処理装置は、三次元コンピュータ・グラフィックスの分野において、ＮＵＲＢＳ曲面やベジエ曲面等の自由曲面を用いて３次元オブジェクトを描画する曲面画像処理装置として用いることができ、例えば、画面に３次元オブジェクトを表示する携帯端末、カーナビゲーション装置、携帯ゲーム機、テレビ等のエンタテインメント装置に適用することができる。
【図面の簡単な説明】
【０２２６】
【図１】実施の形態１における曲面画像処理装置の機能ブロック図である。
【図２】実施の形態１における曲面画像処理装置の全体処理の流れを示すフローチャートである。
【図３】（ａ）ＮＵＲＢＳ曲線の一例を示す図である。（ｂ）はＮＵＲＢＳ曲面の一例を示す図である。
【図４】（ａ）３次の有理ベジェ曲線の一例を示す図である。（ｂ）３次の有理ベジェ曲面の一例を示す図である。
【図５】３次元ユークリッド空間における３次の有理ベジェ曲線のセグメント例である。
【図６】３次の有理ベジェ曲線のセグメントに対し、射影空間におけるド・カステリョのアルゴリズムを適用してセグメント分割を行った一例を示す図である。
【図７】３次の有理ベジェ曲面パッチを１６個の制御点データを用いて表した参考図である。
【図８】有理ベジェ曲面パッチを形成するパラメータｕ方向のセグメントに対し、ステップ２０５の処理を適用して分割を行った結果の有利ベジェ曲面パッチの参考図である。
【図９】有理ベジェ曲面パッチに対し、更に、パラメータｖ方向のセグメントに対し、ステップ２０５の処理を適用して分割を行った結果の有利ベジェ曲面パッチの参考図である。
【図１０】４つの曲面パッチがポリゴンデータに変換された例を示す図である。
【図１１】実施の形態２における曲面画像処理装置の具体的な処理の流れを表した図である。
【図１２】実施の形態３に係る曲面パッチ分割処理部のブロック構成図である。
【図１３】セグメント分配部における具体的な処理の流れを表したフローチャートである。
【図１４】実施の形態４に係るデータ変換部の機能ブロック構成図である。
【図１５】有理ベジエ曲線に対するサブディビジョン法の適用を説明する図である。
【図１６】有理ベジエ曲面を定義する制御点を簡略的に示した図である。
【図１７】有理ベジエ曲面に対するサブディビジョン法の適用を説明する図である。
【図１８】有理ベジエ曲面に対するサブディビジョン法の適用を説明する図である。
【図１９】有理ベジエ曲線に対するサブディビジョン法の適用を説明する図である。
【図２０】ＮＵＲＢＳ曲線の例を示す図である。
【図２１】ＮＵＲＢＳ曲線の例を示す図である。
【図２２】従来のＮＵＲＢＳ曲面の線分近似を説明する図である。
【図２３】従来のＮＵＲＢＳ曲面のポリゴン分割を説明する図である。
【図２４】ノット挿入による曲面変換の原理を説明する図である。
【図２５】実施の形態４に係る不要な制御点の特定を説明する図である。
【図２６】実施の形態４に係る不要な制御点の特定を説明する図である。
【図２７】実施の形態４に係る不要な制御点の特定を説明する図である。
【図２８】実施の形態４に係る制御点トリミング方法を説明する図である。
【図２９】実施の形態５における曲面パッチ分割処理部の機能ブロック図を示す図である。
【図３０】パラメトリック曲面である４階（３次）の有理ベジェ曲面の例を示す図である。
【図３１】実施の形態５に係るシルエットエッジ検出部における処理の流れを示すフローチャートである。
【図３２】（ａ）制御点を透視変換することにより構成される２個の三角形の符号付面積が同符号である場合の例を示す図である。（ｂ）２個の三角形の符号付面積が異符号である場合の例を示す図である。
【図３３】（ａ）細分割を施す前のパッチの例を示す図である。（ｂ）細分割を１レベル実施した後のパッチの例を示す図である。（ｃ）細分割を２レベル実施した後のパッチの例を示す図である。
【図３４】実施の形態５に係る細分割レベル決定部の処理の流れを示すフローチャートである。
【図３５】（ａ）符号付面積の最大値とシルエットエッジ形成パッチの細分割レベルとの対応関係を表すテーブルの一例を示す図である。（ｂ）符号付面積と細分割レベルとの対応関係を表すテーブルの一例を示す図である。
【図３６】（ａ）細分割を実施する前のオブジェクトの一例を示す図である。（ｂ）細分割レベルに応じてオブジェクトを構成する各パッチを細分割した後のオブジェクトの一例を示す図である。
【図３７】実施の形態６に係るシルエットエッジ検出部における処理の流れを示すフローチャートである。
【図３８】（ａ）全てのコントロールポリゴンが表向きの場合の一例を示す図である。（ｂ）全て裏向きの場合の一例を示す図である。（ｃ）コントロールポリゴンに表向きのものと裏向きのものが混在する場合の一例を示す図（ｄ）コントロールポリゴンに表向きのものと裏向きのものが混在する場合の一例を示す図である。
【図３９】実施の形態６に係る細分割レベル決定部における処理の流れを示すフローチャートである。
【図４０】実施の形態６における、シルエットエッジ形成パッチの符号付面積と細分割レベルとの対応関係を表すテーブルの一例を示す図である。
【図４１】細分割レベル決定部における処理の流れを示すフローチャートである。
【図４２】（ａ）ｕ、ｖどちらの軸方向にもそれほど分割する必要のないパッチの一例を示す図である。（ｂ）ｕ軸方向に細かく分割する必要のあるパッチの一例を示す図である。（ｃ）ｖ軸方向に細かく分割する必要のあるパッチの一例を示す図である。（ｄ）ｕ、ｖ両軸方向に細かく分割する必要のあるパッチの一例を示す図である。
【図４３】湾曲パラメータＣと細分割レベルを対応付けるテーブルである。
【図４４】実施の形態７における曲面画像処理装置の構成の一例を示す図である。
【図４５】（ａ）方法１により最大細分割レベルを決定する方法を説明する図である。（ｂ）方法２により最大細分割レベルを決定する方法を説明する図である。
【図４６】曲率パラメータと最大細分割レベルとの対応関係を表すテーブルの一例を示す図である。
【図４７】パッチの符号付面積と細分割レベルとの対応関係を表すテーブルの一例を示す図である。
【図４８】実施の形態８における曲面画像処理装置の構成の一例を示す図である。
【図４９】従来技術における曲面分割方法ついて説明する図である。
【図５０】実施の形態９に係る法線計算部における構成を表す機能ブロック図である。
【図５１】実施の形態９に係る曲面画像処理装置の別の構成を表すブロック図である。
【図５２】実施の形態９に係る法線算出部の処理手順を示すフローチャートである。
【図５３】法線の算出対象の制御点に隣接している制御点が縮退していない場合の法線ベクトルの例を示す図である。
【図５４】（ａ）法線の算出対象の制御点Ｐ００に隣接する制御点が縮退している場合を説明するための参考図である。（ｂ）さらに、法線の算出対象の制御点Ｐ００に隣接する制御点が縮退している場合を説明するための参考図である。（ｃ）またさらに、法線の算出対象の制御点Ｐ００に隣接する制御点が縮退している場合を説明するための参考図である。
【図５５】（ａ）メモリに記憶されている制御点及び頂点座標を記載したリストの一例を示す図である。（ｂ）メモリに記憶されている制御点及び法線データを記載したリストの一例を示す図である。
【符号の説明】
【０２２７】
３１  ＮＵＲＢＳ曲線
３２  制御点
３３  ＮＵＲＢＳ曲面
３４  制御点
４１  有理ベジェ曲線
４２  有理ベジェ曲線の制御点データ
４３  有理ベジェ曲面パッチ
４４  有理ベジェ曲面パッチの制御点データ
１００  曲面画像処理装置
１０１  データ入力部
１０２  座標変換部
１０３  アニメーション制御部
１０４  データ変換部
１０５  曲面パッチ分割処理部
１０６  法線計算部
１０７  透視変換部
１０８  レンダリング処理部
１２０１  セグメント分配部
１２０２  セグメント分割部
１４０１  ノット挿入部
１４０２  制御点トリミング部
１４０３  有理ベジエ制御点データ決定部
１５０１，１５０２，１６０１，１６０２  分割された有理ベジエ曲線
１９０１，２００１，２１０１  ＮＵＲＢＳ曲線
２２０１  ＮＵＲＢＳ曲面
ｕ，ｖ  媒介変数
ｕ［ｉ］，ｕ'［ｉ］  ｕ方向のノットベクトル
ｖ［ｊ］，ｖ'［ｊ］  ｖ方向のノットベクトル
Ｑ  制御点
Ｑ'，Ｑ"  ノット挿入により生じた制御点
Ｒ，Ｓ，Ｔ  サブディビジョンにより生じた制御点
〜ｕ  挿入されたノット
２９０１  形状入力受付部
２９０２  シルエットエッジ検出部
２９０２ａ  透視変換部
２９０２ｂ  符号付面積算出部
２９０２ｃ  リスト記憶部
２９０３  細分割レベル決定部
２９０３ａ  テーブル記憶部
２９０４  細分割部
４４０１  最大細分割レベル決定部
４８０１  初期細分割部
５００１  制御頂点入力部
５００２  法線計算部
５００２ａ  判定部
５００３  制御点出力部
５１０１  ＣＰＵ
５１０２  Ｉ／０
５１０３ａ  テーブル記憶部
５１０３  メモリ
【図１】
2004178576.tif 000018
【図２】
2004178576.tif 000019
【図３】
2004178576.tif 000020
【図４】
2004178576.tif 000021
【図５】
2004178576.tif 000022
【図６】
2004178576.tif 000023
【図７】
2004178576.tif 000024
【図８】
2004178576.tif 000025
【図９】
2004178576.tif 000026
【図１０】
2004178576.tif 000027
【図１１】
2004178576.tif 000028
【図１２】
2004178576.tif 000029
【図１３】
2004178576.tif 000030
【図１４】
2004178576.tif 000031
【図１５】
2004178576.tif 000032
【図１６】
2004178576.tif 000033
【図１７】
2004178576.tif 000034
【図１８】
2004178576.tif 000035
【図１９】
2004178576.tif 000036
【図２０】
2004178576.tif 000037
【図２１】
2004178576.tif 000038
【図２２】
2004178576.tif 000039
【図２３】
2004178576.tif 000040
【図２４】
2004178576.tif 000041
【図２５】
2004178576.tif 000042
【図２６】
2004178576.tif 000043
【図２７】
2004178576.tif 000044
【図２８】
2004178576.tif 000045
【図２９】
2004178576.tif 000046
【図３０】
2004178576.tif 000047
【図３１】
2004178576.tif 000048
【図３２】
2004178576.tif 000049
【図３３】
2004178576.tif 000050
【図３４】
2004178576.tif 000051
【図３５】
2004178576.tif 000052
【図３６】
2004178576.tif 000053
【図３７】
2004178576.tif 000054
【図３８】
2004178576.tif 000055
【図３９】
2004178576.tif 000056
【図４０】
2004178576.tif 000057
【図４１】
2004178576.tif 000058
【図４２】
2004178576.tif 000059
【図４３】
2004178576.tif 000060
【図４４】
2004178576.tif 000061
【図４５】
2004178576.tif 000062
【図４６】
2004178576.tif 000063
【図４７】
2004178576.tif 000064
【図４８】
2004178576.tif 000065
【図４９】
2004178576.tif 000066
【図５０】
2004178576.tif 000067
【図５１】
2004178576.tif 000068
【図５２】
2004178576.tif 000069
【図５３】
2004178576.tif 000070
【図５４】
2004178576.tif 000071
【図５５】
2004178576.tif 000072