(58)【調査した分野】(Int.Cl.,DB名)
前記行列式をBernstein多項式で表したときのBernstein係数の符号を判定し、前記符号を利用してトライアングルがバックフェースカリング可能であるか判定するステップを有する、請求項2記載の方法。
前記プロセッサは、前記行列式をBernstein多項式で表したときのBernstein係数の符号を判定し、前記符号を利用してトライアングルがバックフェースカリング可能であるか判定する、請求項9記載の装置。
【発明を実施するための形態】
【0006】
各頂点が3Dで直線的に移動するトライアングルは、動きの開始時にバックフェース(すなわち、カメラから外方に向いている)している可能性があり(t=0において)、その後にフロントフェース(frontface)に変わり、その後に動きの終了時に(再び)バックフェースする(t=1において)。この結果、バックフェース状態がインターバルの開始時及び終了時に真である場合、各頂点が経時的に直線的に移動するトライアングルがバックフェースしているという仮定は、常に正しいとは限らない。
【0007】
時間t=0からt=1までにおいて、各頂点がフレーム内で直線的に移動するムービングトライアングルがあると仮定する。t=0における頂点をq
iとし、t=1における頂点をr
iとして示す。2D homogeneous coordinates(2DH)を用いてクリップスペースで作業するので、頂点はp=(p
x,p
y,p
w)として定義される。このとき、線形補間される頂点は、
【0008】
【数1】
として表される。頂点(p
0(t),p
1(t),p
2(t))を有するムービングトライアングルが与えられると、
【0009】
【数2】
の行列が構成される。ここで、読みやすさのため、時間従属性は省略されている。トライアングルは、det(M)<0である場合、バックフェースカリングできる。ただし、行列式は、
【0011】
幾何学的には、これは、原点とトライアングルとにより張られる四面体の(スケーリングされた)符号付きボリューム計算として解釈できる。従って、
【0012】
【数4】
であるか決定することが所望される。2つの直線移動する頂点の外積は、
【0013】
【数5】
として展開できる。ここで、
【0014】
【数6】
である。この式を利用して、時間に依存する行列式を導出できる。
【0018】
【数9】
は、t=0におけるトライアングルのバックフェーステストであることに留意されたい。また、t=1における当該多項式の値は、
【0019】
【数10】
であり、それは、同様にt=1におけるバックフェーステストである。最後に、係数の式
【0020】
【数11】
は、3つの頂点の動きベクトルの行列式テストであり、それらがすべて同一平面上にある場合、3次の項(cubic term)はゼロであり、すなわち、a=0であることに留意されたい。従って、行列式が3次関数になるのは、動きベクトルが2DHにおいてボリュームを張るときに限る。
【0022】
【数12】
においてルートを有さない場合、トライアングルは安全にバックフェースカリングできる。バックフェース関数がt=0及びt=1においてゼロ以下であると仮定すると、3次関数の局所的な最小値及び最大値を計算することが可能であり、インターバル
【0023】
【数13】
内で局所的な最大値を検出した場合、当該ポイントにおいて3次多項式の値を確認する。それがゼロ以下である場合、当該トライアングルを安全にバックフェースカリングすることができる。3つの頂点の移動方向が平行である場合、バックフェース関数は線形である。
【0024】
係数aは、しばしば小さいか、又はほぼ平行なトライアングルの3つの動きベクトルの決定要因である。従って、冪乗形式によるバックフェース関数(式6)を直接計算することは、数値的に不安定になりうる。この問題を軽減するため、3次のBernstein形式によりバックフェース関数を表す。
【0027】
次に、Bernstein基底の凸包の性質を利用し、係数b
i
【0028】
【数16】
の何れかが正であるか単に確認する。これは、3次多項式の真の最大値に対するテストより粗いテストであるが、数値精度の問題のリスクを軽減する。当該テストは、de Casteljauステップを係数に適用し、生成された係数をテストすることによって精緻化可能であることに留意されたい。
【0029】
Bernstein式のモーションブラーのバックフェーステストは、
図1に示されるように、b
0を計算することによってt=0においてトライアングルをテストすることによって開始される(ブロック12)。ダイヤモンド14における確認は、b
0が正であるか判定する。正である場合、トライアングルは、フロントフェースしている(ブロック16)。そうでない場合、トライアングルはb
nを計算することによってt=1においてテストされる(ブロック18)。b
nが正である場合、トライアングルはフロントフェースしている(ブロック22)。そうでない場合、値1をiに代入することによってループを開始し(ブロック24)、b
iを計算する(ブロック26)。ダイヤモンド28における確認は、b
iが正であるか判定する。正である場合、それはフロントフェースしている(ブロック30)。そうでない場合、iがnに等しくなるまで繰り返し(ブロック32及びダイヤモンド34)、その後、トライアングルをバックフェースしているとして報告する(ブロック36)。
【0030】
各頂点が経時的に直線的に移動するトライアングルに対するバックフェースカリングテストの実際的な実現形態を擬似コードにより示す。
【0031】
【数17】
トライアングルの頂点の動きが多項式として表すことが可能である場合、前のテストを一般化することができる。各トライアングルの頂点の動きを2DHにおいて次数nのBezier曲線として表す。
【0032】
【数18】
その後、バックフェーステストは、
【0034】
これは次数3nのBezier曲線であり、制御ポイントは、頂点の動きを記述する3つの曲線のそれぞれからの3つの制御ポイントのスケーリングされた行列式の和であることに留意されたい。控えめなバックフェーステストは、再び凸包の性質を利用することによって導出できる。予想されるように、直線的な動きのケースに対して、すなわち、n=1であるとき、式10を取得する。同様の導出が、有理スプラインについて実行可能である。
【0035】
テストは、マクロサイズのトライアングル又は大きな動きの小さなトライアングルのモーションブラーラスタ化を高速化する可能性を有し、1回のコストのかかるバックフェースカリングテストが多くのセーブされた内部テストに対して償却できる。内部テストの回数が控えめなバックフェースカリングテストのオーバヘッドに関して小さい場合、バックフェースするトライアングルはサンプル毎の内部テストにおいて正しくカリングされるため、控えめなテスト全体をスキップすることがより良いかもしれない。ワークロードに応じて、テストは、トライアングルのサイズ又は動きが閾値を超えるときに有効とすることが可能である。
【0036】
被写界深度は、クリップスペースにおけるずれである。このずれは、行列
【0037】
【数20】
をトライアングルのクリップスペース座標に適用することによって表すことができる。H,I,Jは、焦点平面の位置、カメラの絞りのサイズ、及びニア・アンド・ファー平面(near and far plane)により与えられる定数である。レンズ上の位置は、(u,v)により与えられる。この行列をクリップスペースの3次元同次頂点(3DH)
【0038】
【数21】
に適用することにより、ずれたポジションが得られる。
【0040】
【数23】
は、p
iz及びp
iw項に依存する頂点毎の値である。以下の記法を簡単化するため、
【0042】
【数25】
のxyw成分から構成される2次元の同次頂点を示すとする。すなわち、
【0045】
【数28】
であることを留意されたい。このとき、バックフェース基準は、
【0046】
【数29】
となる。これらの係数は、
【0047】
【数30】
により与えられる。a及びbに対するいくつかの表現はエッジ等式の設定のため再利用可能であることに留意されたい。理解できるように、被写界深度のバックフェース関数は、u及びvにおける線形関数である(式17)。トライアングルは、au+bv+c=0であるとき、それのフェースを変更する。従って、トライアングルは、以下の連立式
【0048】
【数31】
に対する解が存在する場合に限って、レンズ上の何れにおいてそれのフェースを変更することになる。ただし、後者の式は、レンズ位置(u,v)が半径Rの円形のレンズの内部にあるか確認するものである。幾何学的には、これは、円と直線との間の交差であり、
【0049】
【数32】
である場合に限って解を有する。
【0050】
この結果、上記が成り立たないことを証明できる場合、レンズ上で移動する際にフェースの変更はない。直感的には、トライアングルの平面の式(3次元)がレンズの形状と交差しない場合、レンズに対してフェースを変更しない。
【0051】
最後にトライアングルのフェース法線がビューベクトルに揃えられる場合、
【0053】
【数34】
を有し、a=b=0を導く。これは、予想されるように、フェースがレンズに対して変更しないことを意味する。
【0054】
静的なトライアングルがバックフェースカリング可能であるか判定するため、
図2のブロック42においてレンズの中間(u=v=0)においてバックフェース状態を計算することから開始される。c>0である場合(
図2のダイヤモンド44)、トライアングルは、レンズの中央においてある時間フロントフェースする可能性があり、トライアングルはすべてのレンズ位置に対して(控えめに)バックフェースしていないため、テストは終了される(
図2のブロック46)。そうでない場合、a
2+b
2を計算し(
図2のブロック48)、c
2<R
2(a
2+b
2)であるかテストする(ブロック50及びダイヤモンド52)。すなわち、トライアングルは、
【0055】
【数35】
であるとき、控えめにバックフェースカリングできる。そうでない場合、トライアングルはフロントフェースしている(ブロック54)。
【0056】
式1の移動する頂点と、式13のずれ行列(shear matrix)Sとを乗算することによって、動き及び被写界深度からの結果として得られる頂点のずれo(u,v,t)は、
【0057】
【数36】
により取得される。ただし、
【0058】
【数37】
はtにおける線形関数である。
【0059】
式21からの対応するバックフェーステストは、
【0061】
係数a(t),b(t),c(t)はtの3次関数である。
【0063】
【数39】
であるとき、控えめにバックフェースカリング可能である。そうでない場合、トライアングルはフロントフェースしている(ブロック54)。
【0064】
控えめなテストは、インターバル計算を利用することによって取得可能である。インターバルは、
【0067】
【数42】
は上限である。このアイデアは、この式を式24の符号より大きな左に対して最小化し、右に対して式を最大化することである。これにより、
【0070】
【数45】
と式25とが成り立つ場合、経時的にレンズ上で移動するトライアングルは、控えめにバックフェースカリング可能である。3次多項式a(t),b(t),c(t)は、冪乗の形式からBernstein形式に変換可能であり、モーションブラーなプリミティブに対して以前に行ったことと同様に、控えめなカリングのためBernstein制御ポイントの凸包性質を利用する。
【0071】
辺の長さがRの正方形によりレンズを近似する場合、ボックステストに対する直線である
【0072】
【数46】
により与えられるより粗いテストを取得する。再び、
【0073】
【数47】
であるか、すなわち、トライアングルがレンズの中心でバックフェースしているかテストすることによって開始される。このとき、(正方形の)レンズの4つの角のすべてが延びた直線の同一サイドにある場合、トライアングルを控えめにカリングすることが可能である。これら4つの条件は、
【0074】
【数48】
により与えられる。式a,b,cはtの3次多項式であることに留意されたい。円形のレンズに対して与えられるインターバル解析テストと異なり、4つの式のそれぞれについて、1つの3次式の係数を計算し、それの境界を示し、よりタイトなバウンドについて冪乗の係数の間の相関関係を維持することが可能である。これは、大きな非線形の係数の動きについてより効率的であるかもしれない。
【0075】
次に、モーションブラーであって焦点がずれたトライアングルのためのバックフェースカリングテストの実際の実現形態を示す。まず、a
2(t)+b
2(t)の粗いが高速な近似は、
【0076】
【数49】
により与えられ、これは、実質的にマンハッタン距離近似である。
【0077】
しかしながら、線形項における相関関係が維持可能であるため、次によりタイトなバウンドを与えることができる1階テイラーモデルを用いて3次関数を拘束(bounded)する。また、多項式a(t)及びb(t)のt
3及びt
2の項は、大部分のトライアングルに対してゼロにとても近いことに留意されたい。これは、式23のa(t),b(t),c(t)の項がほぼ線形であることを意味するが、また、精度の問題を回避するための措置がとられる必要があることを意味する。1階テイラーモデルを利用することによって、t
3及びt
2の項が小さいときに安定性を保証する。任意の3次多項式について、これは、以下に示されるように、
【0079】
【数51】
は剰余のインターバルであり、2次及び3次の項を限定する。
【0080】
【数52】
これを用いて、a
2(t)+b
2(t)を、
【0081】
【数53】
として控えめに表す。上限は、
【0082】
【数54】
により与えられる。ここで、
【0084】
【数56】
の線形関数である。a(t)及びb(t)が、
【0086】
【数58】
を与える場合、式32は当該ケースにおいて正確である。(Bernstein基底上の)モーションブラーのためのバックフェーステストを用いて、上述されるようなレンズの中心におけるバックフェース状態を決定する。
【0087】
最終的なテストは、式34における条件により与えられ、a
2(t)+b
2(t)が式32を用いて拘束される。
【0088】
図3を参照して、被写界深度とモーションブラーの双方に対するバックフェーステストを実現するためのシーケンスは、
図3のブロック62に示されるように、レンズの中心においてトライアングルをテストすることによって開始される。これは、c(t)の最大値を計算及び拘束することにより行われる。次に、ダイヤモンド64における確認は、max[c(t)]がゼロより大きいか判定する。大きい場合、トライアングルは、ブロック66に示されるように、フロントフェースしていると報告される。
【0089】
そうでない場合、ブロック68において、max[a(t)
2+b(t)
2]が、ブロック68に示されるように、計算及び拘束される。次に、c
2の最小値が、ブロック70に示されるように、R
2max[a(t)
2+b(t)
2]より大きいか判定するためのテストが行われる。大きい場合、ダイヤモンド72において、トライアングルは、ブロック74に示されるようにフロントフェースしているとして報告され、そうでない場合、ブロック76においてバックフェースしているとして報告される。
【0090】
ラスタ化がスクリーンスペースにおいて実行されるモーションブラーに対してベックフェースカリングテストを導出する。スクリーンスペースラスタ化について、トライアングルのスクリーンスペースエリアの符号により、共通のバックフェーステストが与えられる。射影変換はラインをラインにマッピングし、動きベクトルは射影後に依然として直線である。しかしながら、直線に沿った加速は、透視短縮(perspective foreshortening)により異なる。射影されたトライアングルの2つのエッジを、
【0091】
【数59】
として定義する。符号付きのエリアを2倍にすることは、
【0092】
【数60】
として表すことができる。
【0093】
各頂点はtの関数であり(式1)、スクリーンスペースのバックフェーステストをtの3次有理関数にすることを思い出されたい。トライアングルは平面で移動するが、頂点の位置はもはやtについて線形補間されず、トライアングルは高々3階フェースを変更可能である。
【0094】
さらに、分母p
0wp
1wp
2wの大きさはエリアテストに無関係であり、クリッピング後のw個のコンポーネントの符号を知っている場合、分母は省略可能であり、予想されるように、同次のケースと同様に3次多項式をもたらす。
【0095】
他方、スクリーンスペースにおいて線形の動きを仮定する場合、エリア関数は2次多項式になり、このケースでさえ、移動するトライアングルは、t=0及びt=1においてバックフェースすることが可能であり、その間の何れかにおいて依然としてフロントフェースしている。
【0096】
本技術は、リアルタイム及びオフラインレンダリングと、確率的ポイントサンプリング及び解析的可視化方法との双方とに適用される。従来技術により招かれるレンダリングエラーは、極端なケースにおいては容易に検出可能であるが、大多数のケースにおいて、これらは、エラーを検出することが困難な妥当な画像を生成する。
【0097】
図4に示されるコンピュータシステム130は、バス104によりチップセットコアロジック110に接続されるハードドライブ134と着脱可能な媒体136とを有する。キーボード及びマウス120又は他の従来のコンポーネントが、チップセットコアロジックにバス108を介し接続されてもよい。一実施例では、コアロジックは、バス105を介しグラフィックスプロセッサ112と、メイン又はホストプロセッサ100に接続されてもよい。グラフィックスプロセッサ112はまた、バス106によりフレームバッファ114に接続されてもよい。フレームバッファ114は、バス107によりディスプレイスクリーン118に接続されてもよい。一実施例では、グラフィクスプロセッサ112は、SIMD(Single Instruction Multiple Data)アーキテクチャを用いたマルチスレッドマルチコアパラレルプロセッサであってもよい。
【0098】
ソフトウェアによる実現形態のケースでは、関連するコードが、メインメモリ132やグラフィックスプロセッサ112内の何れかの利用可能なメモリを含む、何れか適切な半導体、磁気又は光メモリに格納されてもよい。従って、一実施例では、
図1〜3のシーケンスを実行するためのコードが、メモリ132又はグラフィックスプロセッサ112などのマシーン又はコンピュータ可読媒体に格納され、一実施例では、プロセッサ100又はグラフィックスプロセッサ112により実行されてもよい。
【0099】
図1〜3はフローチャートである。いくつかの実施例では、これらのフローチャートに示されるシーケンスは、ハードウェア、ソフトウェア又はファームウェアにより実現されてもよい。ソフトウェアの実施例では、半導体メモリ、磁気メモリ又は光メモリなどの非一時的コンピュータ可読媒体が、命令を格納するのに利用され、
図1〜3に示されるシーケンスを実現するためプロセッサにより実行されてもよい。
【0100】
ここに説明されるグラフィックス処理技術は、各種ハードウェアアーキテクチャにより実現されてもよい。例えば、グラフィクス機能は、チップセット内に統合されてもよい。あるいは、個別のグラフィックスプロセッサが利用されてもよい。さらなる他の実施例として、グラフィックス機能は、マルチコアプロセッサを含む汎用プロセッサにより実現されてもよい。
【0101】
本明細書を通じて“一実施例”又は“実施例”という表現は、当該実施例に関して説明される特定の特徴、構成又は特性が、本発明内に含まれる少なくとも1つの実現形態に含まれることを意味する。従って、“一実施例”又は“実施例では”という表現の出現は、必ずしも同一の実施例を参照しているとは限らない。さらに、当該特徴、構成又は特性は、図示された実施例以外の他の適切な形式に設定されてもよく、このようなすべての形態が本出願の請求項の範囲内に含まれる。
【0102】
本発明が限定数の実施例に関して説明されたが、当業者は、これから多数の改良及び変形を理解するであろう。添付した請求項は、このような改良及び変形のすべてを本発明の真の趣旨及び範囲内に属するものとしてカバーすることが意図されている。