以下の説明は、当業者が発明の様々な態様を構成し、使用することを可能にさせるため提示されている。具体的な技術、実施、および用途の説明は単に実施例として与えられている。本明細書中に記載された実施例に対する種々の変更は当業者に明白であり、本明細書中に記載された一般的な原理は、発明の範囲から逸脱することなく他の実施例および用途に適用される。
本説明は、図2の実施例のように、ジオメトリ・アクセラレイション・データを使って抽出できる3次元(3−D)シーン(図1)の実施例に関係する態様を紹介することにより進む。このような3次元シーンは、図示され説明された実施例によるシステムおよび方法を使って2次元表現としてレンダリングできる。システムは、レイとプリミティブとの間の交差の特定を高速化する交差テスト資源と、レンダリングサービスを必要とするアプリケーションおよび交差テスト資源とインターフェイスをとり、交差テスト資源によって特定された交差をシェーディングするプロセスをさらに含むプロセスのためのホストコンピューティング資源とを有する。
このような交差のシェーディングは、交差テストのためのそれ以上のレイの作成をもたらすことができ、他のシステムおよび方法の態様は、レンダリング品質の低下を最小限に抑えたまま目標またはその他の基準を達成するためこのようなレイを適応的に定める方式を含む。多数のレイが並列に追跡され、そして、交差テスト資源のスループットが高いほど、システムおよび方法は、レイを交差テスト資源へ送信するための帯域幅が縮小されるように、交差に関してテストされるべき多数のタイプのレイを記述する効率を高める対策をさらに含む。
以下の段落は、後述されるシステムおよび方法の態様を理解するのに役立つ概念の概要を与える。
背景技術の欄に記載されているように、3次元シーンのレンダリングは、表示のため3次元シーンの2次元表現を作成することを含む。このような変換は、シーンが観察されるカメラ位置を選択することを必要とする。カメラ位置は、シーンの観察者(例えば、ゲームをする人、動画を見る人など)の位置を示すことがよくある。2次元表現は、通常は、2次元表現が所望の解像度で画素のアレイを含むように、カメラとシーンとの間の平面位置にある。各画素の色はレンダリングを通じて決定される。レイトレーシング中に、レイは、所望の点で2次元表現の平面と交差するように、最初にカメラ位置から放たれる可能性があり、その後に3次元シーンに続く。本明細書中で、レイが2次元表現と交差する位置は保持され、例えば、そのレイと関連付けられたデータ構造体の中に格納される。
カメラ位置(すなわち、交差テストされるべきレイの初期放出の点)は、必ずしも空間内に定義された単一の点でなくてもよく、その代わりに、カメラ位置は、レイがカメラ位置の範囲内であるとみなされる数の点から放たれるように、拡散してもよい。各レイは、サンプルと呼ばれることもある画素の範囲内で2次元表現と交差する。いくつかの実施では、レイが画素と交差するロケーションのより正確な位置が記録され、隣接画素の間で色のより正確な補間および混合を可能にする。
3次元シーンの中の現実的、かつ、精細な物体の輪郭の表現は、通常は、物体の表面を近似する多数の小さい幾何学的プリミティブ(例えば、三角形)を設けることによって行われる(例えば、ワイヤ・フレーム・モデル)。したがって、より複雑な物体は、より単純な物体より多くのプリミティブおよび小さいプリミティブを使って表現されることが必要である。より高い解像度という利点を与えるが、特に、複雑なシーンは多数のオブジェクトを有することがあるので、レイと多数のプリミティブとの間で交差テストを実行することは計算集約的である。したがって、ジオメトリ・アクセラレイション・データ(以下、GADと称する)は、このようなテストを高速化するためシーンの中の1若しくはそれ以上のプリミティブの境界を近似するため使用可能である。GADの実施例はさらに後述される。
説明を明確にするため、ある一定のタイプの物体のデータ、例えば、三角形プリミティブの座標は、物体のデータを参照するのではなく、物体自体として簡単に記載されている。例えば、「プリミティブをフェッチする」というとき、そのプリミティブを表すデータがフェッチされると理解されるべきである。
ジオメトリ・アクセラレイション・データ
ジオメトリ・アクセラレイション・データ(GAD:Geometry Acceleration Data)は、交差テストを高速化するため他の物体またはプリミティブの境界を近似する(抽出する)手段として上で紹介された。GADは、それぞれがシーンの中のプリミティブのコレクションの境界を定める、要素を含むことができる。境界付けは、幾何学的形状の表面がレイと交差できないことが、そのレイがその形状によって境界を定められたプリミティブと同様に交差しないことを示すように、3次元空間の中にプリミティブのそれぞれのコレクションを内包する幾何学的形状を与えることを含むことができる。GADは主としてレイとプリミティブとの間の交差をより高速に特定するためプリミティブを抽出するのに役立つので、GAD要素は、好ましくは、レイとの交差に関して容易にテストできる形状である。例えば、レイとの交差に関して球体をテストすることは、通常は、KDツリーの中で3次元ボックスをテストするより少ない計算を必要とする。GAD形状に関する他の考察は、境界が近似されているプリミティブの形状、GAD形状がプリミティブまたはプリミティブのコレクションをより巧く嵌め込むために回転されるべきであるかどうか、または、形状がシーンの内部で非回転性であるべきかどうかを含むことができる。GADとして使用できる構造の実施例は、球体、正方形、長方形、スプラインのグループなどを含むことができる。
GADは、互いに相互に関係付けられる数の別個の要素を含むことができる。例えば、GADの要素は複数の球体であることができ、各球体はレンダリングされるべきシーンの側面または一部を記述するジオメトリの一部の境界を定める。複数のGAD要素(例えば、球体)はグラフの中で互いに相互に関係付けられることができる。
GADの要素のグラフでは、要素はグラフノードとして特定され、要素のペアはエッジによって接続されることができる。要素のペアがエッジによって接続される場合、エッジは、ノードのうちの一方がもう一方とは異なる相対粒度を有することを示すことができ、すなわち、エッジによって接続されたノードのうちの一方がもう一方のノードより多数または少数のプリミティブの境界を定めることを意味することができる。したがって、このようなGADの配置では、交差テスト中にグラフのエッジに沿ってグラフをトラバースすることにより、交差に関してテストされているレイは、様々な量および/または配置のプリミティブの境界を定めるGAD要素に対してテストされることができる。
上で紹介されたように、球体はGAD要素として使用できる形状の1つのタイプである。球体をGAD要素として使用することは、GADグラフの一部の移植性/互換性を高めることがある。球体GADのグラフは、空間的に、または、そうでなければ、KDツリーの場合によく見られるように、バランスのとれた状態を維持するという明示的な目標に従う必要がない。例えば、このようなグラフの一部をそのまま任意に移動することができる。このような移植性は、2若しくはそれ以上のフレームに対してレンダリングシステムの中にとどまることになるGADグラフの最適化を可能にする。専門家が、プリミティブおよびジオメトリの他のピースの中で、より大きいシーンのビルディングブロックを含むもの、または、シーンの中のレイのうちの不均衡に大きい部分が交差することがあるものはどれであるかに関してシステムにヒントを与えることも可能にすることになる。
いくつかの態様では、GADの要素は、GADのグラフが、シーンを記述するプリミティブを集団で境界付ける1若しくはそれ以上のルートノードを含み、そして、各ルートノードがこれらのプリミティブのサブセットの境界を定めるように、グラフの中に階層的に配置可能である。GADのグラフのうちの(複数の)ルートノードは、シーンが、一般に、所定の範囲を有し(すなわち、シーンは有限であり)、ルートノードがシーン全体を包含するように定義されることができるので、簡単に示唆されることもできる。例えば、シーンはバウンディングボックスまたは球体の内部に定義されることがあり、ルートノードは暗黙的にそのバウンディングボックスまたは球体と機能的に同じ広がりをもつことがある。
各ルートノードは、1つずつがそれぞれのルートノードによって境界を定められたプリミティブのサブセットの境界を定める1若しくはそれ以上の子ノードを有することができる。次に、これらの子ノードがそれぞれの親ノードによって境界を定められたプリミティブのサブセットの境界を定める1若しくはそれ以上の子要素に対する親ノードとして機能することができる。特定の親ノードの子ノードによって境界を定められたプリミティブのサブセットは、子ノードのうちのある1の子ノードによって境界を定められたプリミティブが子ノードのうちの他の子ノードによっても境界を定められることがないように、互いに素であることができる。様々な子ノードは、境界を定められたプリミティブのそれぞれの集合の間に非零である和集合を有することができるが、同様にサブセット関係をもたない。
GADの特定の要素によって境界を定められたプリミティブのさらなる分割は、このようなGAD要素の範囲内で境界を定められたプリミティブの数がさらなる分割を必要としないために十分に少ないとみなされるまで行われることができる。GADの要素間でのこのようなプリミティブの分割は、プリミティブのグループを参照する枠組みに所望の程度の粒度を与えるために役立つことができる。例えば、図1に示されたリーフは、最初にリーフ全体の境界を定める球体(すなわち、GADの要素)を使って抽出することができ、次に、リーフのより小さい部分がより小さい球体または他の形状を使って抽出することができる。例えば、ベインは1若しくはそれ以上の球体を使って抽出されることができる。リーフ全体の境界を定める(抽出する)球体は、リーフの一部分だけの境界を定める球体の全体の境界を定める必要がなく、多くの場合、境界付けなくてもよい。換言すると、シーンの中のプリミティブは、複数のGAD要素によって境界付けられることができるが、そのプリミティブの境界を定める各GAD要素はそのプリミティブを同様に境界付ける他のGAD要素によって同様に境界付けられる必要がない。
本明細書中の典型的な態様では、十分な分割は、交差テストを実行することを目的としたハードウェアユニットまたは他の資源の特性に基づくことができる。例えば、交差テストユニット(後述されるような実施例)が32のテストユニットを含む場合、以下で詳述されるようにGADの1の要素によって境界付けられたプリミティブ全部のテストが並列に行われることを可能にするため、分割は、33以上のプリミティブがGADの特定の要素によって境界付けられなくなるまで継続することができる。
上記実施例は、主としてグラフに配置された要素の球体境界付けの実施例を重点的に取り扱っているが、KDツリー、オクツリー、BSPツリー、およびボクセルグリッドを含むその他のタイプのジオメトリアクセラレイション構造体がノードのグラフとして配置可能である。例えば、グラフのノードは、kdツリーに基づく場合、kdツリーのノードを含むことになる。グラフのエッジは所定の空間の概念上のさらなる分割を含むことになり、換言すると、所定のノードは、所定のノードをそれぞれが所定のノードの境界の内部で見つけられる立方体である最大8の他のノードに接続する最大8のエッジを有することになる。類似した状況が前述の他のジオメトリアクセラレイション構造体の実施例に当てはまる。
本明細書中のGADのいくつかの典型的な態様を要約すると、GADは他のノードへのそれぞれのエッジによって接続されることがあるノードのグラフを含むことがある。
いくつかの態様では、各ノードは唯一の他のノードに接続される。いくつかの態様では、第1のノードを第2のノードに接続するエッジは第1のノードと第2のノードとの間の粒度の方向性を示す。例えば、より高い粒度は、エッジによって接続された第1ノードと第2のノードとのうちのいずれがより少ないGAD要素、または、ジオメトリの個別のピース、または、それらの組み合わせの境界を定めるかを示すことができる。逆の実施例では、より低い粒度は、ノードの一方が、異なるノードによって境界付けられたノードに加えて、別のエッジによってより低い粒度のノードに接続されることができるより高い粒度のノードによって同様に境界付けられたプリミティブの全部の境界を定めることを示すことができる。
この粒度の方向性はグラフの中で明示的または暗黙的に定義されることができ、すなわち、明示的に定義される場合、意図的に方向付けられた探索は、交差に関してテストするため徐々に量が少なくなるプリミティブが特定できるように、一般により大きいGAD要素からより小さい要素への方向に行われる。方向性が暗黙的である場合、方向付けられた探索が同時に現れることができ、または、境界付けるボリュームを定義する情報がグラフの中の方向性を取り出すため使用されることができる。例えば、GAD要素の相対的なサイズを決定するためテストを実施可能であり、より小さい要素が選択される可能性がある。
広く考えると、GADの要素は、GADの他の要素と、より小さいGAD要素によって少なくとも部分的に境界付けられた別のGAD要素によって境界付けられていないプリミティブとの両方を不均一に境界付けることができる。例えば、より大きい球体は図1に図示されたリーフ全体の境界を定めることができる一方で、それぞれのより小さい球体は1つずつがリーフの先端を定義するプリミティブの境界を定めることがあるが、リーフの一部は、リーフ全体の境界を定める球体より小さいいかなる球体によっても境界付けられていないプリミティブによって定義されることができる。逆に言えば、GAD配置は、GADのいずれか1の要素がプリミティブまたは他のGAD要素だけの境界を定め、このような配置のリーフノードに達するまでプリミティブが交差に関してテストされることがないように定義されることができる。
いくつかの特定の実施例のさらなる説明では、階層的に配置されたGADは、3次元シーンのジオメトリを示すため使用することができる。階層的に配置されたGADの(複数の)ルートノードは3次元シーン全体を示すことができる。階層的に配置されたジオメトリ・アクセラレイション・データの中間ノードは、異なるサイズの、または、異なるグループに分けられた、3次元シーンのジオメトリの小部分を示すことができる。階層的に配置されたジオメトリ・アクセラレイション・データのリーフノードは、3次元シーンの幾何学的プリミティブの境界を定めすることができる。同様に、GADのいずれかのグラフは、グラフのノードとして、トラバース可能であるノードの完全なサブグラフを含むことができる。そして、階層グラフの特定の実施例では、各ノードは階層的なサブグラフを含むことができる。
プリミティブ内階層を生成するとき、簡単な状態機械が十分な結果をもたらすことができる(非常に最適化された階層と同じ程度に十分な結果に接近する)。その理由は、殆どの物体がある程度球体に類似し、シーンの中の物体は多くの場合に物体間の空間と比較して大きいからである。ジオメトリ・アクセラレイション・データの生成は、ソフトウェアドライバがシーン記述を受信し、シーン記述から幾何学的プリミティブデータとジオメトリ・アクセラレイション・データの両方を生成することができるように、非同期式に行うことができる。
より具体的な実施例の説明では、図1は、リーフを構成するプリミティブの選択の境界を定めるジオメトリ・アクセラレイション・データのノードと共に、リーフ100の平面図を図示し、GADのノードは図2のグラフ200の配置実施例に表示されている。リーフ100は、2の大きい三角形、すなわち、三角形130および三角形125で構成された背景の上にあるものとして図示されている。各円およびボックスは、それぞれ、3次元球体およびボックスを表現している。ボックスは、長方形でも立方体でもあることができ、または、実施において望まれるならば、平行六面体のようなその他の形状でもあることができる。
図示されているように、GADの要素は、球体以外の形状、例えば、長方形251、252、253、および254を含むことができる。このような境界付けの他の態様は、球体220がリーフ全体の境界を定めるルートノードとして機能することである。球体221は、リーフ100の背景およびリーフ100を構成する大きい三角形130および125の境界を定める。球体220は球体221および球体241の両方の境界を定め、球体241が今度は球体240の境界を定める。球体240および球体241の両方は、リーフ100を構成するプリミティブの境界を定める。球体220、221、240、および241の配置は、1の球体が複数の「子」球体の境界を定める必要がないことを示している。同様に、220および221の配置(図2を参照)は、2個の球体が同じジオメトリの境界を定めるとしても、2個の球体はシーンの中のプリミティブのサブセットの境界を定めるノードへの接続性を有する必要がないことを示している。
球体215はリーフ100の先端4分の1の境界を定める。球体215は、球体240が球体215によって境界付けられたプリミティブの境界を定めるとしても、球体240によって完全には境界付けられていない。図2の球体215を参照すると、ノード210〜214が球体215の子であるが、関心のある検討事項はプリミティブが境界付けられることであるので、各球体210〜214の全面的な広がりは球体215によって境界付けられる必要がないことが図示されている。球体242および243はリーフ100の中央ベインの一部の境界を定める。ボックス230は、リーフのプリミティブの選択の境界を定め、グラフ200に図示されているように子ノード250〜254をさらに含む。ボックス250は、直接的にプリミティブと、子ノードとの両方の境界を定める。ボックス251および252はプリミティブを直接的に境界付けるが、ボックス253および254はそれぞれが1個のプリミティブの境界を定める。ボックスおよび球体の両方の使用は、GADのための異なる形状が同時に使用できることを示している。同様に、GAD要素は1個または2個以上のプリミティブの境界を定めることができる。
図2は、図1のシーンを抽出するため使用可能であるGADの要素のグラフ200を図示している。特に、シーンプリミティブは、レンダリングされるべき平均的なシーンのサイズと比べると非常に小さいので(図1が小さいシーンを図示しているとしても)、実際のGADのグラフは、通常は、グラフ200より遙かに大きいことが理解できるであろう。グラフ200は、それぞれがシーンを構成するプリミティブの一部の境界を定めるGADの要素を示すノードだけを含む。理解されるように、本実施例は、グラフの中のGADの要素のおおむね階層的な配置である。一例として、レイがノード230にあるGADの要素との交差に関してテストされ、ノード230と交差しない場合、テストはGAD要素240〜244に対し、または、これらの要素の内部のプリミティブに対し行われなくてもよい。プリミティブが、偶然またはそうではなく、複数のGAD要素によって境界付けられる場合、これらの要素の間の空間に少なくとも部分的な重なりが存在し、その重なりの内部のプリミティブは交差テストが省略され、その後、別のGAD要素の処理中に後で交差テストが実行されることができる。
交差テスト
図3は、交差テスト資源の実施例であり、3次元シーンの2次元表現をレイトレーシングするレンダリングシステムで使用可能である、交差テストユニット(以下、「ITU」という)の実施例のブロック図を含む。ITU 350は、ITU 350にレイと、レイが交差に関してテストされることになるシーンの要素とを与える制御プロセスまたはドライバを通じて呼び出すことができる関数またはユーティリティであるとみなすことができる。このようなプロセスおよびドライバの実施例は以降の図に関して説明されている。
レイトレーシングを高速化するため、ITU 350は、シーンの一部の境界を定め、ITUがレイの交差テストを高速化するため使用可能であるGADがさらに提供される。GADは、ITU 350によって役に立つフォーマットで提供されることになり、ハンドシェイク手順、パラメータ選択、事前に決められた編成などの対象でもよい。
ITU 350は、典型的に、ITU 350がレイおよびレイが交差することが所定の精度で決定されたプリミティブを特定するために十分な情報を提供することを含む、特定された交差の指標を返す。
例えば、ITU 350は、ITU 350をシェーディングのような他のレンダリングプロセスおよび初期レイ生成関数とインターフェイス接続するドライバを介して情報を提供される可能性がある。ITU 350の観点から、ITU 350は、提供されるか、または、提供された他の情報に基づいて取得されたレイ、GAD、およびプリミティブ(または、より一般的にはシーンジオメトリ)を使用して交差テストを実行できるので、ITU 350は、ITU 350に提供された情報の基点に「気付く」必要がない。このように、ITU 350が交差テスト機能をシステムに提供することにより、システムは全体としてシーンの2次元表現をレンダリング可能である。
ITU 350は、ITU 350が受動的でないように、どのように、いつ、そして、どのようなデータがITU 350に提供されるかを制御し、そして、例えば、交差テストのため必要に応じて、レイ、または、ジオメトリデータ、または、アクセラレイションデータをフェッチすることができる。例えば、ITU 350は、レイがテストされるべきシーンを特定するために十分な情報と共に、交差テストのための多数のレイを提供されることができる。ITU 350は、従って、処理の間にレイの一時的格納を制御し、処理中に必要に応じてプリミティブおよびGADの要素のフェッチを開始することができる。いくつかの実施例では、ITU 350は、所定の時点に交差テストのため10000より多くのレイを提供されることができる。例えば、ITU 350は、初期始動時に10000より多くのレイを提供されることがあり、そして、レイのテストが終了するとき、新しいレイがITU 350の中で処理されているレイの数をおおよそ初期数に保つために提供されることができる。
さらに、ITU 350は、入力データをITUへ提供するか、または、ITUから出力を受信するユニットに関して非同期式に動作することができる。ここで、「非同期」は、交差テストが前に受信されたレイに対して継続している間に、ITUが付加的なレイを受信し、付加的なレイの交差テストを開始することを含むことがある。さらに、「非同期」は、ITU 350がレイを受信した順序にレイが交差テストを終了しなくてもよいことを含むことができる。非同期は、ITU 350の中の交差テスト資源が、3次元シーンの中のレイの位置、シーンに重畳されたスケジューリンググリッド、または、親レイおよび少数の親レイから生み出された子レイのような世代間関係を有するテスト専用レイ、または、特殊な世代のレイ、例えば、カメラレイ若しくは2次的レイだけを考慮することなく、交差テストの割り当てまたはスケジューリングのため利用できることをさらに含む。
本実施例のITU 350の詳細に関して、ITU 350は、例えば、ホストプロセッサ上で動くドライバでもあることができ、シェーディングコード若しくはシェーディングプロセッサであることができ、または、これらの組み合わせであることができる光線源305からレイを受信するメモリ340を含む。メモリ340は、レイデータ333として特定された、レイデータを格納する論理および/または物理パーティションと、レイ・コレクション・バッファ331とを含み、どちらもがそれらの用法および機能と共に本明細書中でさらに説明されている。
ITU 350は、複数のテストセル310a〜310nおよびテストセル340a〜340nを含む。テストセル310a〜310nは、本実施例では、GADデータ記憶装置316から提供されたGSDの要素をテストするのに使われ、テストセル340a〜340nはプリミティブデータ記憶装置317から提供されたプリミティブをテストするのに使われる。論理的に、GADデータ記憶装置316およびプリミティブデータ記憶装置317は別個に特定されるが、同一の物理的メモリ資源でもよく、または、部分的に共有され、部分的に区別されることもできる。
ITU 350は、プリミティブおよびプリミティブと交差したレイの特定された交差の指標を受信する出力バッファ375をさらに含む。実施例では、指標は、プリミティブと交差したレイを特定するために十分な情報とペアにされたプリミティブの特定情報を含む。レイの特定情報は、ホストプロセッサが利用できる資源の中に維持されているレイのリストの中の特定のレイを特定するインデックスのような参照情報を含むことができる。例えば、リストは、ホストプロセッサ上で動くドライバによって維持されることができる。レイ特定情報は、レイを再構成するために十分な、レイの始点および方向のような情報を含むことができる。通常の場合には、より少数のビットが参照情報に合格することが必要とされることになり、有利である。
ITU 350は、本明細書中で後述されるように、メモリ340に格納されたレイコレクションの状態を追跡し、処理の準備ができているコレクションを決定するコレクション・マネージメント・ロジック380をさらに含む。コレクション・マネージメント・ロジック380は、メモリ340に接続するように図3に図示され、接続されたテストセルのそれぞれへのテスト用のレイの配信を開始する。ITU 350が、他のGAD要素またはプリミティブのいくつかの組み合わせではなく、いずれかの境界を定めるGAD要素と共に動作する場合、コレクション・マネージメント・ロジック380は、特定のコレクションがプリミティブまたは他のCAD要素の境界を定めるGAD要素と関連付けられているかどうかに依存して、レイをテストセル340a〜340n、または、テストセル310a〜310nのいずれかに割り当てる。
特定のGAD要素が他のGAD要素とプリミティブとの両方の境界を定める実施例では、ITU 350は、GAD要素とプリミティブとの両方をレイと共に各テストセルに提供するデータ経路を有することになり、コレクション・マネージメント・ロジック380は、テスト資源の間でコレクションのテスト用レイを準備することになる。このような実施例では、GAD要素とプリミティブとの間の形状の典型的な差(例えば、球体対三角形)のため、テストロジックを切り替えるか、または、テストされる形状のため最適化された交差テストアルゴリズムをロードする指標がコレクション・マネージメント・ロジック380から提供されることがある。
コレクション・マネージメント・ロジック380は、付加的または代替的に、テストセル310a〜310nおよびテストセル340a〜340nとインターフェイスをとることがある。このような変形例では、コレクション・マネージメント・ロジック380は、各テストセルがテストのためのレイデータをメモリ340からフェッチし始めるように、情報を各テストセルに提供する。テストロジック380はメモリ340から分離して図示されているが、テストロジック380によって実行されるマネージメント機能がメモリ340に格納されたデータに大きく関係するので、実施されるテストロジック380は、相互に関係付けられ、メモリ340の回路の内部で実施されることができる。
交差テスト資源によるメモリ340へのアクセスの並列化を高める能力は、本明細書中に記載されている発明の態様の利点である。したがって、好ましくは、テストセル1つ当たりに少なくとも1つまでメモリ340へのアクセスポートの数を増加することは有利である。このような編成の実施例と、その利点とは、図5に関してさらに記載される。ITU 350の動作の実施例は、図6および7の方法600および700に関して与えられる。
図4は、ワーキングメモリ400およびテストロジック420を含むテストセル310aの実施例を図示している。ワーキングメモリ410は、表面との交差に関して線分をテストするために十分な情報を収容する数個のレジスタであることができ、または、他の実施ではより複雑であることができる。例えば、ワーキングメモリ410は、交差に関して受信された特定の形状をテストするためテストロジック420を構成する命令を格納することができ、そして、どのような形状が受信されたかを受信されたデータに基づいて検出することができる。例えば、球体は点と点の周りの半径とによって指定可能であり、球体はこのデータが推定可能であることを考慮してGADとして使用されている。テストロジック420は利用可能または選択可能な解像度で交差テストを実行し、交差が検出されたかどうかを示すバイナリ値を返すことができる。バイナリ値は読み出しのためワーキングメモリの中に格納可能であり、リードサイクルの間にメモリ340にラッチするため出力することができる。
図5は、メモリ編成の実施例により詳細に重点を置いて、交差テストユニット500の実施の態様を図示している。ITU 500において、テストセル310a〜310nおよび340a〜340nが再び現れる。これは、テストセルの数に関する何らかの要件を意味するものではない。本実施例では、セル310a〜310nはGAD要素の交差テストを目的とし、テストセル340a〜340nはプリミティブの交差テストを目的とする。よって、ITU 500において、プリミティブとGAD要素の両方が並列にテストされることができる。しかし、1種類または別の種類のそれ以上のテストセルが必要であると決定された場合、どのようなテストセルでも必要に応じて再構成可能である。トランジスタ密度が増加し続けると共に、それ以上のこのようなセルを収容することができる。記載されるように、テストセルの一部は、共通形状(すなわち、プリミティブまたはGAD要素)に対してレイをテストするので、オペレーショナル・グループとして取り扱うことができる。テストセル340a〜340nは、指定された精度レベル(例えば、16ビット)でプリミティブとの交差を示すバイナリ値を返すことができ、より大きいプリミティブの場合に役立つことができる、レイが交差したプリミティブ上のロケーションのより正確な指標を返すこともできる。
ITU 500において、メモリ540は、それぞれが2ポートを有する複数の独立した演算バンク510〜515を含む。一方のポートはGADテストロジック505を介してアクセスされ、もう一方はプリミティブ・テスト・ロジック530を介してアクセスされる。GADテストロジック505およびプリミティブ・テスト・ロジック530のそれぞれは、それぞれのワーキングバッファ560〜565と570〜575との間でデータのフローを管理し、それぞれにGAD記憶装置316およびプリミティブ記憶装置317からテストのためのGAD要素を取得するため動作する。バンク510〜515は、大部分は、GADテストロジック505およびプリミティブ・テスト・ロジック530によるレイデータへの非競合アクセスをできるようにするため動作するように意図され、その結果、各テストセル310a〜310nおよびテストセル340a〜340nは別個のバンク510〜515からレイが提供され得る。競合はテストされるべき2つのレイが同じバンクに存在する場合に発生し、このような場合に、アクセスはテストロジック505および530によって順次に取り扱うことが可能である。いくつかの場合に、ワーキングバッファ560〜565および570〜575は、他の処理が完了している間に次の処理のためロードされる。
一貫した仕組みでレイをテストすることにより、どのレイがどのテストセルに割り当てられるかの追跡は軽減することができる。例えば、各コレクションは32つのレイを有することができ、32つのテストセル310a〜310nが存在することができる。例えば、コレクションの中の4番目のレイを常にテストセル310dに提供することにより、テストセル310dは、そのテストセルにどのレイが提供されたかに関する情報を維持する必要がなく、交差の指標を返すだけでよい。
レイ・コレクション・データの記憶装置は、ITU 350および500のそれぞれに関して、レイ・コレクション・バッファ331およびレイ・コレクション・バッファ520として実施することができる。レイコレクション記憶装置は、どのような所定のレイコレクションでもレイ・コレクション・バッファ331または520のn個の部分のうちの1つに格納されるように、レイコレクションのためのn−ウェイ・インターリーブ・キャッシュとして実施されることができる。レイ・コレクション・バッファ331または520は、その後、バッファのn個の部分の1つずつに格納されたレイコレクションのリストを維持することがある。レイ・コレクション・バッファ331または520の実施は、レイコレクションと関連付けられたGADの要素の特定特徴、例えば、シーンのレンダリングで使用されるGADの要素の間で一意である英数文字列を使用することを含むことができる。英数文字列は数字であることができる。文字列は、レイ・コレクション・バッファ331および520のn個の部分のうちの1個への参照値を取得するためハッシュされることができる。他の実施では、GADの要素は、例えば、使用される英数字列のセグメントをこのようなバッファの(複数の)部分にマッピングすることにより、レイ・コレクション・バッファ331および520の所定の部分の中への格納が予定されることができる。プリミティブ/レイ交差出力580は、プリミティブ/レイ交差候補を特定する出力を表現し、出力580は直列でも並列でもあることができる。例えば、32のプリミティブ・テスト・セル540a−540nが存在する場合、出力580は、レイ毎にちょうどテストされたプリミティブとの交差の有無を示す32ビットを含むことができる。当然ながら、他の実施では、出力はテストセルから直接到来することができる。
ITU 350および500の動作的な態様は、図6および7に関してさらに後述される。プリミティブから構成されるシーンにおける交差に関してレイをテストする方法の以下の実施例は、1つずつがプリミティブの選択の境界を定めるGAD要素のグラフをトラバースするITU動作を含む。このようなトラバースの間に、レイのコレクションはGAD要素との交差に関してテストされる。レイのコレクションは、所定のGAD要素との交差に関してレイをテストすることにより形成されることができ、その後、その要素と交差するレイに対し、コレクションが形成されることができる。レイは、このレイのコレクションが十分な数のレイを有するまで、所定のGAD要素との交差に関してテストされ続ける。その後、そのコレクションの中のレイは、そのGAD要素に接続されたGAD要素のノードとの交差に関してテストされることができる。これらの態様は、図6および7に関して、以下で詳述される。
以下の説明は、図6に図示された交差テストの方法600に関係する。この方法は、簡単にするため、ITU 350に関連して説明される。605において、シーンを構成するプリミティブの選択の境界を定めるGADの要素を含むシーン抽出の少なくとも一部がGAD記憶装置316の中に受信される。シーン抽出は、GAD要素に関係する情報を含み、実施例では、このような情報は、GAD要素をグラフのノードと、ノードのペアの間のエッジにマッピングするグラフを含む。レイデータは、光線源305からメモリ340にさらに受信される(606)。コレクション・マネージメント・ロジック380は、最初にレイをコレクションに割り当てるため動作し、ここで、各コレクションはGADの要素と関連付けられる。例えば、GADの要素は、グラフのルートノードであることができ、受信されたすべてのレイは、ルートノードと関連付けられた1若しくはそれ以上のコレクションに最初に割り当てられる。レイの受信は、グループとしてコレクション全体になるようにサイズを定められることができ、このようなコレクションは1つずつが、例えば、レイ・コレクション・バッファ331において特定されたコレクションのように取り扱える。
607において、レイは最初にコレクション(例えば、ルートノード、または、カメラ始点の境界を定める球体のコレクション)に割り当てられる。608において、テストの準備ができた(複数の)コレクションは、例えば、所定の数より多いレイを有するコレクションを準備完了として合図することにより特定される。609において、いずれかのコレクションが準備完了であるかどうかが決定され、準備完了でなければ、それ以上のレイデータが受信され(606)、コレクションが準備完了であるならば、準備完了コレクションの選択が行われ(610)、これらのコレクションと関連付けられたノードがテストノードとして特定される。
ある程度の数のコレクションが並列にテストされるという了解の下で、1つのコレクションの処理に重点を置くと、メモリ340からのテストノードと関連付けられたレイのコレクションの取り出し(615)は、例えば、コレクションの中のデータとして格納されたこのようなレイのアドレスを、レイデータを複数の出力ポートに提供するメモリ340に与えることによって、コレクション・マネージメント・ロジック380によって初期化される。レイデータは、テストセル310a〜310nおよびテストセル340a〜340nのうちの1若しくはそれ以上に向かうことにすることができる。
特に、テストセル310a〜310nの実施例は、交差に関してGAD要素をテストすることを目的としているが、テストセル340a〜340nは交差に関してプリミティブをテストすることを目的としている。625で、テストの準備ができたプリミティブは、テストセル340a〜340nにおいて交差に関してテストされ、ここで、625は、例えば、そのプリミティブの境界を定めるGADのより粒度が高いノードが存在するかどうかを決定することにより、プリミティブがテストの準備ができているかどうかの決定を含むことができる。このような決定は、テスト対象のコレクションと関連付けられたノードに接続されているすべての幾何学的形状を単に特定することを含むこともでき、接続されたプリミティブはテストのためテストセル340a〜340nへ提供できる。
プリミティブがテストの準備ができているかどうかの決定は、与えられたシーン抽出の実施に基づいて(すなわち、GADの性質に基づいて)変化する。例えば、GADは、1つずつがプリミティブの選択の境界を定め、グラフのノードとして配置されたGAD要素のグラフを含み、ノードのペアはエッジによって接続されている。各GAD要素によって境界付けられたプリミティブの選択と、ノードのどのペアが接続されているかとは、実施によって変化可能である。例えば、GADの第1の要素は、ボリュームが小さいか、または、第1の要素によって境界付けられたプリミティブの選択のサブセットだけの境界を定める(より粒度の高い)別のGAD要素によって境界付けられていない第1のプリミティブの境界を定めることができる。しかし、第1の要素によって境界付けられた他のプリミティブは、プリミティブのサブセットの境界を定めるか、または、ボリュームの小さい1若しくはそれ以上の他の(より粒度の高い)GAD要素によって境界付けられることができる。よって、工程625において、第1のプリミティブは、より粒度の高いGAD要素によって境界付けられていないので、テストの準備ができることになる。
このようなテストの準備ができているプリミティブは、テストされているノードと関連付けられたレイのコレクションと共に、テストセル340a〜340nに提供されることになる。多くの場合にそうであるように、このようなプリミティブが2若しくはそれ以上存在する場合、レイのコレクションはテストセル340a〜340nにロード可能であり、各プリミティブは、各プリミティブがおおよそ並列にすべてのレイとテストされるように、テストセルを介して順次に提供できる。630において、いずれかの交差の指標が出力される。所定のレイに対する最近接交差が一般に着目されるので、645で、最近接交差が決定される。前の最近接交差はレイデータと共に維持可能であり、コレクション・マネージメント・ロジック380は、検出された交差が格納された交差より近接しているかどうかを決定可能であり、必要に応じてレイデータを更新する。
テストのため選択されたノードによって境界付けられたGAD要素のテストに関して(すなわち、選択されたノードと関連付けられたGAD要素は他のGAD要素の境界を定める)、コレクションからテストセル310a〜310nへのレイの分配が行われ、その後、境界付けられたGAD要素のフェッチが632で開始され、すなわち、コレクション・マネージメント・ロジック380はアドレス指定情報をGAD記憶装置316へ入力し、GAD記憶装置はアドレス指定されたGAD要素をテストセル310a〜310nへ出力する。通常の場合のように、多数のGAD要素が境界付けられる場合、多数のGAD要素のブロック読み出しが行われるならば、要素はバッファを直列化することによりテストセル310a〜310nへ直列にストリーム化されるように配置できる。
テストセル310a〜310nにおいて、コレクションの各レイは、直列に提供されたGAD要素との交差に関してテストされ、レイが交差すると決定された場合(650)、交差したGAD要素のコレクションが存在するかどうかが決定され(655)、存在するならば、レイが余地を許すそのコレクションに追加され、存在しないならば、コレクションが作成され660、レイが追加される。既存のコレクションに余地がない場合、新しいコレクションが作成される。
いくつかの実施では、コレクションのすべてのレイが所定のGAD要素に対し並列にテストできるように、コレクションの中のレイの最大数対テストセル310a〜310nの数の1:1の対応関係が与えられる。しかし、それ以上のレイがコレクションの中に与えられた場合、コレクションのそれ以上のレイがテストされるかどうかという決定(665)が実行され、そうであるならば、この方法は635から継続する。
そうでなければ、テストのため選択されたノードは、その関連付けられたコレクションのすべてのレイが境界付けられたプリミティブ、および/または、境界付けられたGAD要素に対してテストされていることになり、それによって、処理を完了しているか、または、他のGAD要素と関連付けられた他のコレクションへ分配されていることになるので、テストノードで除外できる(675)。したがって、工程680が実行され、この関連付けられたレイのコレクションのテストがこの時点でさらに続行されることなく、むしろ、他のコレクションが処理されるとき、無期限に亘って延期されることがある。方法600は、その後、608へ戻り、コレクション準備状況がコレクション・マネージメント・ロジック380によって決定される。コレクション準備状況の決定は、ある程度の計算および決定を含むことができる。簡単に説明すると、コレクション準備状況の決定は、各コレクションの充足レベルの決定または検査と、最も充足しているコレクションの選択とを必然的に伴うことができる。コレクションはGADの要素に対応するので、他の決定は、GADの所定の要素または複数の要素に関するテストの完了の決定と、テストの準備ができているこれらの要素と関連付けられたコレクションの選択とを含むことができる。代替的に、コレクション準備状況は、所定のコレクションがGAD要素のグラフの他の部分を通じてすでに完全にテストされた(複数の)レイを保持すると決定されることができ、そのレイの終了は所定のコレクションの処理に依存する。レイコレクションのための格納ロケーションが固定サイズの領域に割り付けられる場合、コレクション・マネージメント・ロジック380は、少数のレイだけを含み、ある時間に亘ってレイが追加されていないコレクションが他のより豊富なコレクションのためそのコレクションによって使用される空間を開放するためにテストの準備ができているとして選択されるべきであるとさらに決定することができる。同様に、多数のレイが利用可能な量のレイコレクション格納空間が満たされ得るように最初に受信されることができる。レイコレクションが完全であるが、コレクション準備状況を決定する他のメカニズムが十分に準備完了したコレクションを始動させない場合、さらなる処理のためのコレクションのランダムな選択またはヒューリスティックな選択が実施されることができる。他の方策および選択基準が実施されることができる。
ITU 350および方法600に関して、テストセル310a〜310nおよび340a〜340nは、それぞれ、GAD要素とプリミティブとのうちの一方だけをテストしたと仮定された。しかし、ある意味では、プリミティブおよびGADはどちらも幾何学的形状、例えば、三角形および球体である。したがって、これらのタイプの形状のうちの一方またはもう一方が、GADの特定のノードによって、境界付けられているか、そうでなければ、内包されているかどうかを先験的に決定しなくてもよい。むしろ、GADの特定のノードによって境界付けられている幾何学的形状への参照情報が維持されることができ、その参照情報と関連付けられたデータがフェッチされることができる。いくつかの態様では、形状のタイプはその形状を記述するデータのサイズから推定できる。テストセル310a〜310nおよび340a〜340nは、これらのテストセルに提供されたタイプの形状を交差テストするために再構成可能である。このような状況では、GAD記憶装置316およびプリミティブ記憶装置317は、それぞれが、各テストセル310a〜310nおよび340a〜340nへ接続することになる。しかし、各テストセルにおける幾何学的形状テストの完全な構成可能性および選択可能性を可能にするために実施されることがあるように、データ経路複雑性の観点から、各メモリと各テストセルとの間で独立した接続を行う必要がないことが依然として得策である可能性がある。
以下の説明は、図7に図示され、特定のシーンのためのGADが階層グラフの中に配置されている実施態様を記述する交差テストの方法700に関係する。本実施例では、GADはGADの要素またはプリミティブの境界を定めるように限定され、両方の組み合わせの可能性がない。このような実施例は、GADグラフのリーフノードだけがプリミティブを直接的に境界付けることになる(すなわち、リーフノードだけが別の、より粒度の高い、GADの要素によって境界付けられていないプリミティブの選択の境界を定めることになる)。
交差テストの方法700において、作用の原因が特定の構造によるものとされることができ、データは特定のメモリ資源に格納されていると特定されることができる。しかし、これらは実施の例であり、方法の態様はこのような実施例に限定されない。方法700は、シーンの中の交差テストのためのレイを受信することから始まる(705)。レイはグラフの中のGADのノードに関連付けられているレイコレクションに最初に割り当てられる(717)。例えば、レイは、グラフのルートノード、または、レイが放射されたカメラ位置を取り囲むノードと交差すると仮定できる。このような初期割り当ての後、レイコレクションがテストの準備ができているかどうかが決定される(715)。多数のレイが通常最初に送信されるので、1若しくはそれ以上のレイコレクションが殆ど確実にテストの準備ができていて、(複数の)準備完了コレクションの選択が行われる(717)ことができる。最初に送信されたレイは、完全なコレクションとして受信され、既にITU 350またはITU 500の中に格納されているコレクションのように入力キューの中で取り扱われることができる。実施例では、1つの準備完了コレクションが選択され、所定のコレクションのすべてのレイが並列にテスト可能であるように、準備完了コレクションはITU 350またはITU 500の各テストセルのための2若しくはそれ以上のレイを含むことがない。コレクション・マネージメント・ロジック380またはGADテストロジック505は、例えば、準備完了コレクションのリストを維持し、そのリストの1番目のエントリ、または、別のエントリを選ぶことにより、テストの準備が完了したコレクションを選択することがある。ノードの準備状況を示すフラグをセットし、検査することもできる。
(複数の)準備完了コレクションの選択後(717)、GADグラフのノードが、コレクション・マネージメント・ロジック380またはGADテストロジック505によって、選択されたコレクション毎に特定され(720)、各ロジックは、このようなノードがプリミティブまたは他のGAD要素(すなわち、他のノード)のどちらの境界を定めるかを決定する。ノード/コレクションの関連性は、コレクション・マネージメント・ロジック380およびGADテストロジック505の中で管理されることがある。境界付けるプリミティブまたは他のGAD要素間の区別は、ビット指標に基づいて、または、コレクションが収容する基準の種類の決定に基づいて、または、その他の許容可能な手段に基づいて行うことができる。
まずプリミティブ境界付けに関して、GAD要素がプリミティブの境界を定める場合、コレクション・マネージメント・ロジック380またはプリミティブ・テスト・ロジック350は、メモリ340/540からのレイデータのフェッチ(726)と、テストセル340a〜340nおよび540a〜540nのそれぞれの間でのレイの分配(726)とを開始する。
同様に、各ロジック380および530は、境界付けられたプリミティブデータ記憶装置317からのフェッチ(727)を開始する。このようなフェッチは、ブロックとして、または、ストリームとして実行可能であるが、本実施例では、各プリミティブは、プリミティブデータ記憶装置317からのブロック読み出しが行われるならば、プリミティブのストリームがバッファまたは他の適当な装置によって作成できるように、テストセル340a〜340nおよび540a〜540nのそれぞれに共通に提供される。これらのITUの実施例では、プリミティブデータはプリミティブデータ記憶装置317から各テストセル340a〜340nへ直接的に提供されると考えられているが、その理由は、これらの実施例では、後述されるように、コレクションの中の異なるレイが共通プリミティブに対しテストを行うテストセルの間で分配されるからである。このようなバッファは、プリミティブおよび/またはGAD要素が繰り返される処理のためバッファの中に格納されるのではなく、一般にレイの(複数の)コレクションに対するテスト後にITUメモリから廃棄されるという意味でキャッシュではない。
ITU 350において、レイ分配はロジック380によって開始され、レイデータはメモリ340から各テストセル340a〜340nへ直接的に提供される。ITU 500の場合、レイデータはテストロジック530によってメモリから取得でき、バッファ570〜575へ提供できる。テストロジック530は、所定のコレクションの中の2若しくはそれ以上のレイが同じバンクに格納されるという状況に関して、各メモリバンク510〜515のための要求のキューを維持することができる。どちらの場合も、レイは、レイのデータの開始を特定するメモリロケーション参照情報のような参照情報によって所定のコレクションの中で特定でき、レイは所定のサイズを持つことができる。
その後、レイはテストセルに提供されたプリミティブとの交差に関してテスト730される(すなわち、本実施例では、各テストセルは異なるレイを有し、そのレイを共通プリミティブとテストする)。交差に関するレイのテスト(730)の後、各テストセル340a〜340n、540a〜540nは検出された交差を示す。これらの交差はプリミティブとレイの交差であり、典型的に問題となる交差は1番目の交差だけである。ITU 350において、レイは、不規則な順序で交差に関してテストされることができ(すなわち、最初にレイ始点から最も遠いプリミティブに対するテストから行われる可能性があり)、したがって、最近接交差を追跡するためのメカニズムが提供される。例えば、レイと共に格納されたデータはその点に関して特定されたレイに対する最近接交差を示す。この最近接交差データはテストロジック380および530によってフェッチできるが、テストセルに提供されなくてもよい。その代わり、テストロジックはそのデータを保持し、テストセルから返された検出済みの交差の距離を前に特定された最近接交差の距離と比較し、より近接する交差が特定された場合、そのより近接する交差を使って適切なレイデータを更新する。それ以上の格納空間を必要とするが、すべての交差はレイデータに格納でき、完全な交差テスト後に決定された最近接交差、または、そのようなデータが最適化および解析のため使用できる。
最近接交差の解決736の後、GADのノードによって境界付けられたさらなるプリミティブが引き続きテストされるべきであるかどうかが決定され(738)、もしテストされるべきであるならば、プロセスは727から繰り返し、これらのプリミティブがフェッチされる。実施中に、この工程738は、所定の数のプリミティブのためのループとして実施である。引き続きテストされるべきプリミティブが無い場合、プロセスはテストの準備ができている別のコレクションを特定するために戻る(715)。
いくつかの実施例では、1:1の対応関係がコレクションの中のレイの数とテストセル340a〜340nおよび540a〜540nの数との間で維持されるので、コレクションのすべてのレイが同時にプリミティブに対してテストでき、プリミティブがテストセルへストリームされるので、レイはテストセルの中で静止している。しかし、テストセルより多くのレイがコレクションの中に存在するか、または、すべてのレイがテストされていない場合、方法700は、これらの付加的なレイがフェッチ726されるさらなるループ点739を含むことができ、プロセスはその後に726から繰り返す。そうでなければ、方法700は、コレクションがテストの準備ができているかどうかを決定される715から継続する。
他のGAD要素の境界を定めるノードと関連付けられたコレクションに関して、方法700は、GADテストロジック505およびコレクション・マネージメント・ロジック380がレイのコレクションを取得し、テストセル540a〜540nおよび340a〜340nにそれぞれ分配すること(724)を含む。プリミティブフェッチと同様に、ロジック505および380のそれぞれは、テストセルによる受信のためGAD要素の生成(725)を開始し、実施例では、GADのテストセルによる受信は直列ストリームと類似している。ここで取得(725)されるGAD要素は、コレクションと関連付けられたノードに接続されたGAD要素である(例えば、図2のノード220と関連付けられたコレクションが選択された場合、ノード215、241、221および230のためのGAD要素がフェッチされることになる。
コレクションの各アレイは、テストセルに提供されたGAD要素との交差に関してそのテストセルにおいてテスト(733)される。交差の指標は、テストセルからロジック380および505へ出力(740)される。GADの要素がテストセルの間で共通してテストされるロジック380および505は、その後に、そのGAD要素に対してテストされたレイの検出された各交差を記録する。本実施例におけるテストはGAD要素の中を直列に進むので、ロジック380および505は、交差する可能性があるレイをノードによって収集するため(743)、GAD要素と関連付けられたコレクションの中の交差レイへの参照情報を記録できる。他のレイがGAD要素との交差に関して既にラベル付けされている場合、(すなわち、レイのコレクションは準備ができるまで格納され保留されているので、いくつかのレイは前のテスト中に交差していることが特定されている可能性があり、これらのレイのテストは、コレクションが後で処理のための準備ができていると決定されたときに行われることになる。)
接続されたノードに対しそれ以上のGAD要素が引き続きテストされるべきかどうかが決定(760)され、もし、そうであるならば、このようなノードがテストセルに取得(またはロード)される。接続されたノードに対しすべてのGAD要素がテストされた場合、761で、コレクションの中のそれ以上の引き続きテストされるべきかどうか決定される(ここでは、レイ対テストセルの1:1の対応関係は実施されてない)。すべてのレイがテストされた場合、処理は、現在存在しているコレクションの準備状態を引き続き決定し(745)、その後、715で、準備状況は、それ以上のレイを取得するか(705)、または、さらなるコレクションテストを進めるかを決定するため使用される。それ以上のレイがテストされるべきである場合(761)、処理は724から継続する。
当然ながら、それ以上のプリミティブ、GAD要素、または、レイがテストされるべき場合、このようなデータのフェッチはテストと並行に行うことができ、説明の直列的な性質はプロセスの直列的な性能を意味しないことが理解されるべきである。
同様に、テスト資源(すなわち、テストセル340a〜340nおよびテスト540a〜540nのそれぞれ)がITU 350およびITU 500においてプリミティブおよびGAD要素の両方のため存在するので、テストの準備ができているコレクションを特定する工程は、(1)プリミティブの境界を定めるGAD要素と関連付けられたコレクションと、(2)他のGAD要素の境界を定めるGAD要素(すなわち、他の接続されたノードの境界を定めるグラフのノード)と関連付けられ境界付けをするコレクションとに関して並列に行うことができる。したがって、複数のコレクションが所定の時点で処理進行できる。
GAD要素との交差に関するレイのテストからの出力はプリミティブ交差に関して同じレイをテストする場合に異なるので(すなわち、GAD要素との交差はそのGAD要素のためのコレクションの中への収集を生じるが、プリミティブとの交差はそのプリミティブとの最近接交差の決定と、このような交差の出力とを生じるので)、特定のレイが偶然に並行してテストされている2つのコレクションの中に存在するとしても、コレクションデータまたは出力された交差についてのライトバックへの競合が通常は起こるべきではない。さらなる並列化が、例えば、テストセル340a〜340nの複数のインスタンス化においてプリミティブ交差に関してレイの複数のコレクションをテストすることにより実施されるならば、このようなテスト、このようなテスト、このような複数の交差またはロックビットの格納などを強制的に順番に終了するように特徴が実施されることもできる。
つまり、方法700は、レイを受信する工程と、レイをコレクションに割り当てる工程と、準備状況がアルゴリズム的に決定可能である場合にテストの準備ができているコレクションを選択する工程と、選択されたレイのコレクションを適切なテストセルに割り当てる工程と、交差テストのため適切なジオメトリをテストセルの中でストリーム化する工程とを含む。出力は、ジオメトリがシーンプリミティブであるか、または、GAD要素であるかに依存する。GAD要素に対してテストされたレイの場合、GAD要素はテスト中のコレクションと関連付けられたノードとのグラフ接続に基づいて特定され、レイはテスト中のGAD要素と関連付けられたコレクションに追加される。コレクションは準備状況に関して見直され、テストの準備ができたとき選択される。プリミティブとのレイ交差に関して、最近接交差がレイを用いて追跡される。レイは準備完了コレクションと関連付けられたときにテストされるので、特定のレイのための交差テストは、特定のレイが関連付けられたコレクションがテストの準備ができていると決定されるまで延期される。レイは、このようなレイがシーンジオメトリの異なる部分に対しテストされることを可能にする複数のコレクションへ同時に収集可能である(すなわち、レイはトラバースの順序にテストされなくてもよい)。
上述されているように、いくつかの実施では、GAD要素は、特定のGAD要素が別のGAD要素とプリミティブとを共に直接的に境界付けることがなく、その代わりに、プリミティブが別個のGAD要素によって直接的に境界付けられるように、選択でき、互いに相互に関係付けができる(本実施は、GAD要素およびプリミティブが所定のGADの要素の内部で「混合」されていないので、同質の実施と呼ばれることができる)。このGAD配置は、最適化されるか、そうでなければ、特定のタイプの形状を交差に関してテストするため構成されたテストセルにおけるGAD要素およびプリミティブのテストを実現し易くするので、役立つことがある。本実施の選定は、テストセルがGAD要素またはプリミティブをテストするため最適化される場合、可能であるならば、各タイプの形状を最適化されたテスト装置へ割り付けることが好ましいので、レイのテストセルへの割り付けに影響を与えることができる。方法700は、本明細書中に記載された説明に基づいて、同質であるか、それ以外であるかとは無関係に、どのようなGADの構成に対しても適応させることができる。
上記の方法600および700では、レイのコレクションに与えられた情報に基づいてレイはメモリからロードされた。したがって、このようなローディングは、各レイを表すデータが格納されているそれぞれのメモリロケーションを決定することを含むことができる。このようなデータは、レイコレクションがコレクションの中のレイのためのレイデータが格納されているメモリロケーションまたは格納すべきその他の参照情報のリストを含むことができるので、レイコレクションの中に構成されることができる。例えば、レイコレクションは、メモリ385の中のロケーションへの参照情報を含むことができ、これらの参照情報は、絶対値であることができ、ベースからのオフセットであることができ、このようなデータを参照するための別の適切な方式であることができる。
同様に、方法600および700は、プリミティブまたはGAD要素のいずれかがテストサイクルの中を循環させられていたので、レイデータがテストセルの中で「静止」しているという観点から説明された。しかし、実施は、プリミティブまたはGAD要素のいずれかをテストセルの中に固定し、レイをそれらの中で循環させることもできる。このような状況は、同じGAD要素と関連付けられたある程度の数のレイコレクションがテストの準備ができていた場合に有利である。ITU 350およびITU 500の動作は、このような変形または機会が現れるときにそれらを受け入れるように変更できる。各テストセルが交差に関してGADの要素の一部をテストするように、複数のテストセルにおけるレイの重複を含むその他の実施が提供されることができる。
レイのリストとアクセラレイションデータのリストとの両方を循環させることができるより複雑なテストセルが提供されることができる。このような実施では、各テストセルは、GADのすべての適切な要素との交差に関してレイのコレクションをテスト可能である。しかし、このような実施は、本テクノロジの限界を考慮して複雑なシーンに対するレイおよびGADの要素がすべてのテストセルに提供される状態を保つため、より大きいメモリ440およびより高い帯域幅インターフェイスを必要とする可能性がある。テクノロジの進歩につれて、レイまたはGADの特定の要素をテストセルの中に静止した状態に保つことは、各テストセルがより小さいワーキングメモリを必要とすることになり、このことは、何ダース、何百、または、場合によっては何千ものテストセルを有する実施においては、実用上の利点ことを含めて、優位性をもち続けることになるので、このような実施はより望ましくなることができ、ある意味で、ITU 350を複数回に亘って複製していると見なすこともできる。
方法および装置の実施例は、レイ間の利用できる潜在的な並列化を特定できる。図4に関して上記されているように、ITU 350またはITU 500のようなITUの中のメモリは所定の最大量のレイを格納することが可能になる。このようなITUの中に格納できるレイの最大数は、シーンを完全にレンダリングするためテストされることになるレイの数未満であることが予想される。したがって、レイは、ITUによるシーンのレンダリング中に条件付きで許容されることができる。レイ入力から新しいレイを許容する条件は、メモリが新しい例を表すデータを格納するため利用可能な空間を有することである。レイは完全なコレクションを何回にも分けて近似して許容することができ、デフォルトの形状のグループ(例えば、GAD要素のグラフのルートノード)に対する処理の準備ができているとして特定することができる。
多数の実施例において既に挙げているように、ITUは、レイ入力から前に受信されたレイを表す情報をメモリに格納する(例えば、格納させる)。ITUは、これらのレイに対し、複数のコレクションの1若しくはそれ以上のレイコレクションとの各レイの関連性を維持する。ITUは、メモリに格納された複数のコレクションに対しコレクション完全の指標をさらに維持する。これらの指標は、完全コレクションを示すそれぞれのフラグでもよく、所定のコレクションと関連付けられたレイの数を表す数でもよい。
ITUは、(上述のように)コレクション毎に基づいて交差テストのためのレイを選択し、ここでは、ITU選択は複数のコレクションの中から完全コレクションを選択するためバイアスをかけられる。完全コレクションが利用可能でない場合、新しいレイがテストのため選択される。完全コレクションおよび新しいレイが利用できない場合(例えば、それらを格納するために利用可能なメモリが存在せず、したがって、それらが容認されないので)、複数のコレクションの中からの(複数の)部分完全コレクションがITUによって選択される。ITUは、レイコレクションンの(前の実施例では、例えば、GAD要素のグラフとして特定された、それぞれの形状のグループ、または、GADの要素によって境界付けられたプリミティブのグループへの関連性にアクセスする。ITUは、交差を示し、上述されるように交差を大部分は処理するように動作する。部分完全レイコレクションの選択は、並列化可能なレイコレクションが特定される利用可能なレイを増加させる2次的レイの生成を促進する。ここで、2次的レイは、特定されたレイ/プリミティブ交差の結果として生成されたレイを含むものとして考えられ、交差に関連したレイはカメラレイでなくてもよく、したがって、「2次的レイ」はカメラレイから削除されるレイ/プリミティブ交差の数はいくつでもあることができる。別のレイがレイ/プリミティブ交差をシェーディングする結果として放射されるたびに、新しいレイは、便宜的に新しい「世代」として考えられる。よって、本明細書中に記載された多数の発明の態様において、利点はこれらの態様がテストのためあらゆる世代から一括してレイを収集するため機能することであり、いくつかの動作モードでは、レイ交差テストのより多くの並列化を可能にするという意味で、レイの優れた分配を行うためそれぞれの世代とは無関係に、多数のレイの生成を促進することである。
さらに、各ITU 350またはITU 500は、有限数のテストセルを含み、所定のレイが形状と交差するかどうかを決定するため、ある有限時間を必要とするので、ITUは最大スループットを有する。これらの実施形態では、これらの開示に従って、実際のスループットをITUの最大スループットのより近くに維持することは、テスト資源の効率的な用法を示す。記載された方法および装置は、レイの完全コレクションを大部分テストすることにより効率的な交差テストを行う。さらに、レイコレクションのシーケンスがITU 350または500でテスト可能であり、プリミティブのグループがレイコレクション毎に循環させられ得ることは上述されている(例えば、32つのレイコレクションはそれぞれが32つのGAD要素に対してテストできる)。したがって、次にテストされるレイのコレクションを指定する入力はレイコレクションのシーケンスであると考えることができる。好ましくは、このシーケンスは、前に入力されたレイ、または、新しいレイのいずれかである完全コレクションで満たされる。しかし、時には、例えば、ラウンドロビン方式で部分完全コレクションを選択することにより、潜在的に種々の始点および方向からの広範囲の2次的レイの生成を促すことが望ましいことが判明した。
上記ITUは、ハードウェア制御により重点を置き、専用アクセラレータとしての実施のためより適した実施の実施例である。しかし、発明の態様は、専用命令を使用することがあるよりソフトウェア指向の実施で実施することもできる。このような実施の態様は、図8に関して提示されている。特に、プロセッサ805は、メモリインターフェイス825に連結されたフェッチユニット820と、命令キャッシュ830と、命令デコーダ845と、データキャッシュ850とを含む。データキャッシュ850はテストセル810a〜810nをフィードする。命令デコーダ845は入力をテストセル810a〜810nにさらに提供する。命令生成器865は命令デコーダ845へ入力される命令を提供する。テストセルは検出された交差の指標をライト・バック・ユニット860へ出力し、次にライト・バック・ユニットはデータをデータキャッシュ850に格納することができる。ライト・バック・ユニット860からの出力は、命令を生成するとき命令生成器865への入力としてさらに使用される。このようなプロセッサ805で使用される命令は単一命令複数データの系統であることができ、ここで、テストセルの中で処理された命令は定義された表面とレイとの間の交差テストであると考えられる。
実施例では、「命令」は、プリミティブ、または、GADの要素のうちの一方を含むことがあり、複数のデータ要素は、「命令」として提供されたプリミティブまたはGADの要素に対するテストを行う別個のレイを含むことができる。命令を含む付加的な情報は、複雑であることができ、単純であることができる。例えば、プロセッサ805が複雑なフル機能プロセッサである場合、プロセッサは大規模命令セットも含むことがあり、交差テスト命令を他の命令から区別するためにある程度のビット数が必要とされることがある。同様に、必要に応じて、異なるプリミティブ形状および異なるGAD要素形状のための命令、または、さらには異なるテストアルゴリズムのための命令を含む種々の交差テスト命令が与えられることがある。
典型的な実施例では、各交差テスト命令は、GADの要素またはプリミティブへの参照情報のいずれかであるジオメトリ要素への参照情報と、ジオメトリ要素との交差に関してテストされるレイの数への参照情報とを格納することができる。デコーダ845は、ジオメトリ要素への参照情報を決定するため命令を解釈し、フェッチ820およびメモリインターフェイス825を介して要素のフェッチを開始する。いくつかの実施では、デコーダ845は、将来に必要とされるジオメトリ要素のフェッチを開始するためにある程度の数の命令に備えることができる。ジオメトリ要素はフェッチ820によってデコーダ845へ提供でき、デコーダ845はジオメトリ要素をテストセル810a〜810nへ提供する。デコーダ845は、複数テストが可能である場合、所望のテストを実行するためテストセル810a〜810nに適した命令情報をさらに提供する。
デコーダ845は、関数アドレスとして命令からのレイ参照情報をデータキャッシュ850へさらに提供し、データキャッシュは、各レイの交差テストのため十分なそれぞれのデータをテストセル810a〜810nのそれぞれに提供する。交差テストのため必要でされないレイと関連付けられたデータは提供される必要がない。
ジオメトリ要素は、各テストセル810a〜810nにおいてそれぞれのレイとの交差に関してテストされ、交差の指標がライトバック860による受信のため各テストセル810a〜810nから出力される。テストされるジオメトリ要素の性質に依存して、ライトバック860は、2つの異なる機能のうちの一方を実行する。テストセル810a〜810nが交差のためのプリミティブをテストしている場合、ライトバック860はテストされているプリミティブと交差した各レイの指標を出力する。テストセル810a〜810nがGADの要素をテストしている場合、ライトバックはテストセル810a〜810nの出力を命令ユニット865へ提供する。
命令ユニット865は、さらなる交差テスト中にテストセルに指令することになる将来の命令を組み立てるため動作する。命令ユニット865は、以下の通り、GADの所定の要素と交差したレイを指定するテストセル810a〜810nの入力と、命令キャッシュ830と、GAD入力870からの入力を使って動作する。テストセル810a〜810nからの入力を使って、命令ユニット865は、GAD入力に基づいて、テストセル810a〜810nからの入力の中で指定されたGADの要素に接続されたGADの要素を決定する。命令ユニット865は、命令キャッシュ830に格納された命令が接続しているとして特定されたGADの要素毎に既に存在するかどうかと、命令がさらなるレイ参照情報を許容するかどうか(すなわち、命令のすべてのデータスロットが満たされているか)とを決定する。命令ユニット865は、テストセル入力の中で交差しているとして特定されたレイと同数をその命令に加え、残りのレイ参照情報を受信するため十分な他の命令を作成する。命令ユニット865は、テストセル入力の中で特定された要素と接続しているとして特定されたGADの要素毎にこれを実行する。このように、テストセル入力を処理した後、交差しているとして特定されたレイはそれぞれが、GADの接続された要素に対するレイのテストを指定する命令に加えられる。命令は命令キャッシュ830に格納されることができる。命令は、GAD入力870から受信されたGADの要素の編成に基づいて命令キャッシュ830の中に編成されることができる。
例えば、GAD入力870はGADのグラフを提供することができ、グラフのノードはGADの要素を表現し、ノードのペアはエッジによって接続されている。エッジは、どのノードが他のどのノードに接続されているかを特定し、命令ユニット865は、GADの所定の要素のためキャッシュの中に既に存在する命令と、新しいレイが追加されるロケーションとを特定するために、ノードを接続するエッジを辿ることにより命令キャッシュ830を探索する。複数の命令が所定のGAD要素に対し存在する場合、複数の命令はリストの中でリンクされることができる。関連した命令が見出されることがある命令キャッシュ830の中の潜在的なロケーションを特定するためのGAD要素IDのハッシングのようなその他の方法が同様に実施できる。命令は、発行され復号化された命令に応答して、命令がGADの接続されたノードのフェッチを引き起こすように、テスト中のGADのノードをさらに参照できる。このような接続された要素のそれぞれは、各テストセルの中に維持されているそれぞれのレイとのテストのためテストセル810a〜810nの中へストリーム可能である。
よって、これらの実施例にしたがって実施されたプロセッサは、接続されたノードに対する交差テストのための第1のノードとの交差に関して特定されたレイを収集する命令を取得するか、そうでなければ作成するために機能を提供することになる。上述された実施例と同様に、プロセッサ805に提供されたGADが階層的である場合、GADのグラフは階層的な順序でトラバースされることがある。ITU 350および500に関して上述された世代間のレイコレクションの態様は、図8に関して説明されたシステムにも適用できる。
GADの接続および提供源の実施例は典型的であり、他の配置も考えられる。例えば、メモリ815はGAD要素のための提供源であることができる。
実際的なITU実施では、交差テストは選択された精度レベル(例えば、8ビット、16ビット、24ビットの精度など)で実行されるべきである。いくつかの実施では、実施されたITUは、所望の精度でのレイとGAD要素またはプリミティブとの間の交差のロケーションがさらなるテスト無しに決定できるように、高精度で交差テストを実行できる。
他の態様では、実施されたITUは、レイとGAD要素/プリミティブとの間の交差のためより低精度の予備テストを実行でき、この低精度の予備テストは高精度テストより可能性が高いが誤った交差の検出をもたらすことができる(すなわち、疑陽性交差)。これらの予備交差の検出後、高解像度交差テストがこれらのプリミティブのうち所定のレイが最初に交差するプリミティブを決定するため実行できる。殆どの共通シェーディングアルゴリズムでは、最初の交差したプリミティブはレイシェーディング計算で使用されるプリミティブである。最初に低精度テストの実行は、交差していることが明らかではないレイおよびプリミティブに対するより高精度、より計算集約的である交差テストの実行を回避できる。交差ロケーションについてのより高精度の指標は、その情報のジオメトリ中心的な表現で示されることができる。例えば、交差ロケーションは、三角形プリミティブを記述する1若しくはそれ以上の頂点と相対的に示すことができる。
方法およびシステムを実施する上述された方法およびシステムは、シーンの要素に関する交差テストのためのレイを許容可能であるプロセスを実施するものとして考えられ、プロセスは、各レイが各GAD要素と交差するかどうかに基づいてレイのコレクションを形成するためGADの要素に対しレイをテストするように動作する。したがって、このようなテストの結果は、1つずつがGAD要素と関連付けられたある程度の数のコレクションが形成できることである。これらの実施例では、GAD要素は、エッジがノードのペアを接続するグラフに配列されているので、レイの所定のコレクションをテストする次の工程は、エッジによってそのコレクションが関連付けられたノードへ接続されたGAD要素(すなわち、グラフのノード)との交差に関してレイのコレクションをテストする。しかし、この次の工程は、交差に関する他のレイのテストの続行を優先して、レイのコレクションがテストの準備ができるまで延期される。第1に、プロセスは、レイの別のコレクションがテストの準備ができるかどうかを決定でき、準備ができているならば、そのコレクションはテストのためスケジュールに入れることができる。他のコレクションがテストの準備ができていない場合、交差テストのためのそれ以上のレイを許容する利用可能なメモリ空間が存在するならば、それ以上のレイが許容されテストされる。しかし、利用可能なメモリ空間が十分に存在しないならば、レイのコレクションは、潜在的には擬似ランダム的に、または、経験則を利用して、テストのため選択できる。このようなヒューリスティックな選択は、メモリ空間が利用可能にされるか、または、例えば、完全性指標を参照して、コレクションが準備完了であると決定されるまで継続できる。次に、コレクションが準備完了である場合、コレクションはテストされ、メモリ空間が利用可能である場合、新しいレイが許容されテストされる。
ヒューリスティックな選択方法は、交差テスト資源の利用率または利用量をテスト、または、そうでなければ、監視することによって、特定でき、経験則がより優れた長期利用または平均利用を提供する場合、経験則が使用されることがある。
このように実施されるプロセスは、主として、完全レイコレクションの交差テストを続行し、補助的に、利用可能なメモリ空間を処理されているレイで満たそうとする。完全コレクションが存在せず、利用可能なメモリ空間が不十分である場合、コレクションは、擬似ランダム的またはヒューリスティックな選択からテストされる。プロセスは、このようにして、可能であるとき、メモリ記憶装置が提供された場合に実際的にできる限り多数のレイをテストする間に、十分な空間コヒーレンスをもつレイのテストを進行させ、不十分な数のレイがより効率的な交差テストのための空間コヒーレンスを有する場合、異なる始点および方向のからのレイの生成は、十分な数のレイの集計が交差テストの効率を高めることを可能にするように促進される。これらの態様は、実施の実施例においてエレガントに実現される。しかし、他の実施は、このような態様の開示内容をさらに利用することができ、発明と発明の均等物の範囲内であると考えられる。これらの態様は、ITU 350またはITU 500の内部、ドライバプロセスのようなホストに常駐している(複数の)プロセスの内部などで実施でき、または、交差テスト資源と交差テスト資源のためのドライバとの間で協働的に実施できる。ホストプロセッサ相互作用は以降の図に関してさらに説明される。
上記開示から認識され得るさらに別の態様は、適当な量のレイが収集され、定義された物体の集合に対するテストの準備ができるまで、交差に関するレイのテストを延期する間に、これらの態様が交差に関してテストされるべきプリミティブの反復的な排他または狭小化を行う。いすれかのレイのコレクションは、カメラレイ、または、シェーディング計算若しくは光或いは影をサンプリングするその他の演算から生じたいずれかの他のタイプのレイを含む可能性があり、その結果、この方法は、交差に関してある程度の数のレイをテストするとき、これらのレイが非類似の始点および方向を有する場合でも、シーン・アクセラレイション・データおよびシーンプリミティブへのより構造化され、予測可能なアクセスを可能にする効果がある。換言すると、このような典型的な方法は、異なる始点、方向、および目的を有するが、アクセラレイションデータの共通要素またはプリミティブと並列に交差に関して依然としてテストできるレイの特定を可能にする。
このようなレイの特定は、他のレイおよび他のアクセラレイションデータまたはプリミティブがテストされている間に、長時間に亘って分散させられる。実際上、これらの態様は、並列にテストするため異なる世代のレイを収集することになり、すなわち、例えば、1次カメラレイがシーンの完全に異なる部分の中で完全に異なる物体の鏡面反射をテストするため生成された2次的レイと並列にGAD要素に対し交差に関してテストされることがあり、2次的レイは完全に異なるカメラレイに関係付けられることがある。要約すると、これらの方法およびシステムは、いくつかの異なる始点および方向を有するシーンの中を移動するレイの大きいグループから潜在的なレイ干渉性を抽出し、シーンプリミティブまたはGAD要素の中間キャッシュを用いることなく、より大規模、安価なメモリへの直接的なアクセスを許可するように、並列化された交差テストおよびメモリ帯域幅の保存を可能にするためにその抽出されたレイテンシを使用するため動作する。この方法は、関係しているカメラレイ、または、それらの始点および方向とは無関係に、2次アレイ(すなわち、カメラレイではないレイ)の広範囲に亘る散乱および利用可能性を具体的に許可し、場合によっては、促進することと、長時間に亘って、GAD要素との交差に関してレイをテストすることによってこのようなレイおよび潜在的に他のレイとを収集することとを含む可能性もある。したがって、このような方法の実施は、GAD要素との交差に基づくレンダリング時間を通じて多世代レイのコレクションを収集し精緻化するため動作可能である上述された専用ハードウェアアプローチの実施例およびSIMDアプローチの実施例に関する変形を含むものとして考えられることがある。
上記態様の大半は別個のレイデータおよびレイ・コレクション・データが維持されるという観点から説明された。しかし、いくつかの実施では、その分離は、レイ・コレクション・データおよびレイデータが、例えば、コンテンツ連想データベースとして維持可能であるので、それほど明示的または明白ではなく、コレクションとレイとの間の関連性、および、コレクションとGADの要素との間の関連性が維持され、テストのためのコレクションと関連付けられたレイ、および、さらにこのコレクションと関連付けられたGADの要素を特定するため使用される。
上記説明は交差テスト資源の内部の機能と機能の実施とに主に関係する。このような交差テスト資源は、一般に、より大規模のシステム、または、レンダリングサービスを必要とする(複数の)アプリケーションとインターフェイスをとるシステムのグループの中で使用されることになる。システムは、レンダリングされるべきシーンのデータを受信し、レンダリングの交差テスト部を実現するために交差テスト資源とインターフェイスをとるドライバおよび他のプロセスを実行することができる。
以下の説明はこのようなシステムおよびシステムのグループの概要を与え、続いて、どのような種類のプロセスおよび機能がこのようなシステムで実行できるかについての実施例が説明される。コンピュータシステム900は、メモリ925とインターフェイスをとるCPU905と、例えば、キーボード920、マウス921、および、ジョイスティック922から入力を受信し、ディスプレイ940に出力を提供するユーザインターフェイス915とを含むホストシステム903を含む。ホストシステム903は、オンチップメモリ912(例えば、SRAM)およびオフチップメモリ930(例えば、DRAM)とインターフェイスをとるロジック911を使って実施可能である交差テスト資源910とインターフェイスをとる。ロジック911およびメモリ912の組み合わせは、上述されたITU 350またはITU 500を実施することがある。テスト資源910のためのドライバを含むソフトウェアはCPU 905で動く。ドライバはレイをロジック911に共有することになり、シェーディング計算、および、表示するためのレンダリングされたシーンの生成のため必要である他の計算で使用されるべき特定されたレイ/プリミティブ交差を受信することになる。
図10Aは、CPU 905がレイトレーシングによるシーンのレンダリングを必要とすることがあるアプリケーションコード1025のための処理資源を提供するレンダリングシステム1000の実施例を図示している。例えば、このようなアプリケーションは、ビデオゲーム、3次元モデリング、および、設計ツールと、可視化ツールとを含むことがある。CPU905は、このようにして、このようなアプリケーションコードからレンダリングするためシーンを記述する情報を処理し、例えば、アプリケーション・プログラミング・インターフェイス、関数呼び出し、または、その他の適当な実施を通じて、このような情報をジオメトリプロセス1020、サンプルプロセス1010、および、シェーダプロセス1015に提供可能である。情報はジオメトリを含むことがあり、ジオメトリは、シーンのためのワイヤフレームを示すプリミティブ、または、ワイヤフレームを構築することができる画素のアレイ、または、レンダリングされるべきシーンの中の(広義に考えて)物体の表面を示す別の適当な手段を含むことがある。図10Aは、CPU 905が交差テストされるべきレイを記述する情報を格納するバッファ1040を介して交差テスト資源と通信することをさらに図示している。交差テスト資源910で実施されたレシーバ1050が、レイを記述する情報を受信する。以下では、交差テストのための多数のレイを効率的に通信するため、このようなレイ情報が構造化され得る方法の実施例を説明する。
格納および/または送信のためのレイの表現
任意のレイは3次元空間の中の3次元始点および方向ベクトルによって表現される。この表現は、「ワールド空間」を示すために適切な精度で、6つの数値を必要とする(すなわち、相対的な参照情報なしに、シーンの中のレイに対する絶対位置および方向を提供する。このような表現は、所定の時点でトレースされるレイの数に対する帯域幅および格納の要件がこのようなシステムにおけるシステム帯域幅および格納へのその他の要望と比べると合理的に小さいので、殆どのレイ・トレーシング・アプリケーションのため適切であることがわかった。しかし、ホストプロセッサがドライバによって作成されたレイのためのハードウェア高速化された交差テスタとインターフェイスをとるソフトウェアドライバを動かし、そのテスタがシーンプリミティブおよび/またはグラフィカル・アクセラレイション・データ要素に対して非常に多数のレイを並列にテストするレイトレーシング・システム・アーキテクチャの場合、ハードウェアアクセラレータへのレイデータ転送のための帯域幅および格納の要件は制限因子であることがわかった。
レンダリングシステム1000は、本明細書中に開示されたレイデータ送信/受信効率の態様を利用することがある。サンプルプロセス120は、表示されることになる(そして、画素の色がレイトレーシングによって決定される)シーンを表す画素の2次元平面を維持するため動作する。サンプルプロセス120は、シーンバッファ1011の中に格納された画素光エネルギーのためのバッファを維持することができる。(実際上、このような光エネルギーのためのバッファの数は維持され、この概念はこの実施の細部の一般化を表す)。シーンバッファ1011の画素は、所定のシーンに対するレンダリングの終了後に出力されることができる。サンプルプロセス120は、シーンを構成するプリミティブに対する交差テスト資源1045における交差テストのためカメラレイをさらに放射する。これらの放射されたカメラレイは最初にバッファ1040へ出力できる。
ジオメトリプロセス1020は、アプリケーション1025によって提供された頂点のリストからシーンプリミティブおよびジオメトリ・アクセラレイション・データを生成することができる。プリミティブおよびアクセラレイションデータはITU 910に提供されることができる。様々なインターフェイスコンポーネントは、必要に応じて、および/または、要望通りに、この通信および後続の格納を仲介することができる。
シェーダ1035は、カラー計算およびシーンプリミティブとレイとの間で特定された交差に対し行われるべきその他のタスクを実行するため、異なるコード部分、プロセス、およびその他の実施をいくつでも示す。このようなタスクは、後述されるように、シャドーレイおよび反射レイのような2次的レイの生成を含むことができる。シェーダ1035は、このような2次的レイをバッファ1040へさらに出力する。より詳細に後述されるように、シェーダ1035は、ITU 910から特定されたレイ/プリミティブ交差の指標をさらに受信可能である。
バッファ1040は、サンプルプロセス120およびシェーダ1035のそれぞれのための専用ポートを含むことがある。バッファ1040は、ITU 910への出力ポートをさらに有する。バッファ1040は、ホスト103若しくはITU 910、または、バッファ1040の内部にある回路若しくはソフトウェアのいずれかによって、管理されることがある。バッファ1040は、単にFIFOキューでもよく、または、不規則な順序のレイ選択またはレイの並べ替えを実施可能であるようにより複雑でもよい。バッファ1040はITU 910の一部でもよい。
サンプルプロセス1010、シェーダ1035、およびレシーバ1050の動作をより詳細に説明する前に、シーンの中で交差に関してテストされることがあるレイのタイプの実施例が、上記プロセスおよびコンポーネントの動作に関連して、各レイを定義するために十分なデータのような特性と共に与えられる。
レイタイプ
カメラレイ
カメラレイの態様は図12に関して検討される。カメラレイは、モーションピクチャに都合のよい類似であり、シーンが観察されることになるロケーションを示すカメラ1205から放射される。カメラ1205は、物理的な実体ではなく、むしろ、3次元空間の中の点または複数の点である。カメラレイは、ピンホール・カメラ・レイ(すなわち、すべてのレイが同じ始点を共有し)と、非ピンホール・カメラレイ(すなわち、レイは、正確に同じ始点ではないが、類似した始点を有する)とを含む。ピンホールカメラからのレイは、画像平面に位置しているx位置およびy位置から外れる可能性がある。図12には、レイ1210a〜1210fは図示されている。各レイが画像平面1250と交差するロケーションはそれぞれ1215a〜1215fとして特定される。
非ピンホールカメラの場合、プログラム的定義のような定義された関係は、そのカメラから放射されたレイの間で共有されるカメラ属性を参照することにより、画像平面上でのx位置およびy位置を完全なレイ始点および方向へ平行移動させる。カメラレイは、したがって、実施されることが望ましいオーバサンプリングおよび/またはマルチサンプリングを明らかにする画像平面上の位置を示すために適切な精度で、共有カメラ属性と併せて、2つの数値として表現可能である。
フレーム全体または画像平面の領域のカメラレイを放射することが望ましい場合、シングルトークンがこれらのレイを表現でき、トークンは、関係若しくはサンプリング技術のパラメータによって定義されるか、または、そうでなければ、関係若しくはサンプリング技術のパラメータから導出可能であるロケーションにある画像平面との交差に対しレイをカメラから放射させるレイ放射の間隔を指定するプログラム的関係、または、サンプリング技術を提供する。これらのレイ放射および関連した計算のすべてがサンプルプロセッサ1010によって実行できる。
反射レイ
反射レイの態様は図11に関して記載されている。反射レイは、レイとプリミティブとの間の交差から生じ、シェーディング計算は、反射レイがシーンの中のさらなる交差テストのため放射されるべきことを決定する。特定の実施例によって、カメラレイ1106はカメラ1105から放射され、カメラレイ1106は点1115でプリミティブ1110と交差する。このプリミティブ/レイ交差ペアはITUからシェーダ1035へ出力される。シェーダ1035は、今度は、反射レイ1120a〜1120fが点1115に始点を有するプリミティブ1110から放射されるべきことを決定する。
理解されるように、シェーディング動作は、多くの場合に、単一の始点から多数の子レイを作成することを必要とする。これらのレイを交差テストユニットへ効率的に送信するため、始点は子レイのための共有データとして同時に送信可能であり、子レイ毎に、方向ベクトルだけが送信される。選択的に、3次元空間の中の単位ベクトルの代わりに、各レイ方向は角度のペアとして送信されることがある。
モンテカルロ始点/オクルージョンレイ
モンテカルロ始点/オクルージョンレイは図14に関して記載されている。モンテカルロサンプリング技術、周囲オクルージョン、およびその他の技術のようないくつかの照明技術は、半球上の複数の点をサンプリングする。これらの技術のため放射されたレイは、上述された反射レイのため使用された技術と類似した技術を使用してより効率的に送信および/または格納することがさらに可能である。しかし、各レイに対して固定した共通始点を提供するのではなく、レイ始点は、規則的、ランダム、パラメトリック、および/または、プログラム的に導出できるように記載されている。したがって、このようなレイの始点は、独立に指定される必要はなく、レイ転送効率はレイのそれぞれに対し始点および方向を構築するために十分な情報を送信することによって増大可能である。例えば、すべてのレイは半球面上の点の接線に垂直な方向へ放射されるべきであることに注意を要する。面上のこれらの点は密度関数によって記述できる。
図14は、様々なレイ、例えば、レイ1410a〜1410f、およびレイ1415a〜1415cが放射され得る半球面505を図示している。レイ1410aおよび1410bに関して、これらは、局所的な面接線ベクトルに関して測定された角度1425aおよび1425bによって部分的にパラメータ化されているとして図示されている。図14の特定の実施例では、レイ1410a〜1410fは、角度1425aおよび1425bのような角度によって記述可能である。各レイの始点は他のレイ始点からの相対距離、例えば、距離1435によって決定可能である。始点は、基準点1430のような、そして、例えば、それぞれのレイ1410dおよび1410eまでの距離1440および1445によって図示されているように、基準点に関してさらに表現可能であるか、または、そうでなければ決定可能である。存在する可能性がある別の実施例のパラメータの状況は、共通始点から放射されたレイ、例えば、レイ1415a〜1415cの角度を含み、このような角度は角度1420aおよび1420bとして特定される。他の状況では、レイは、図14に図示されている他のレイに対しレイ1410cの始点によって図示されているように表面1405からランダムまたは擬似ランダムの間隔で放射可能である。このようなレイは統計的方法によって記述できる。
したがって、このようなレイの始点は、規則正しい間隔である、ランダムまたは擬似ランダムに分散している、または、そうでなければ、パラメトリック若しくはプログラム的に導出されるとして記述できる。したがって、レイ毎に始点および方向を明示的に与えるのではなく、パラメータまたはプログラム的な定義は送信され、ITUで、各レイの始点および方向を決定するため使用される。
瞬間的な大域照明/シャドーレイ
図13は、既知の光源を交差したプリミティブまたはその他の始点から発するシャドーレイを使ってサンプリングする瞬間的な大域照明のような照明技術に関係する態様を記述するため使用される。シャドーレイの放射は、光源が存在することがわかっている空間内の始点から定義された点へレイを送信することを必要とする。これらのレイの送信は、ITUにすべての可能な光ロケーションの表を提供することによって、より効率的に行うことができる。光ロケーションのこのテーブルを用いて、放射されるべきレイの方向ベクトルは、インデックスから光ロケーションのための表の中へ導出できる。同様に、多数のシャドーレイのための始点は、多数のシャドーレイが単一の交差したプリミティブのため放射される必要があるので、1度だけ送信できる。
さらなる説明のため、カメラ1305は、点1320aおよび1320dでプリミティブ1315aおよび1315dとそれぞれに交差するカメラレイ1310aおよび1310bを生成する。これらの交点の1つずつはシェーダ1035に示されることがある。シェーダ1035は、レイ1335a、1335c、および1330bを1320aにおける交差のため放射されることになる。レイ1335aは光源1340aに向かうことになり、レイ1335cは光源1340cに向かうことになり、このような各レイは、これらの光への経路上に障害物が存在しないものとして図示され、したがって、点1320aはこれらの光源のための別の影の中に存在しない。レイ1330bは光1340bへ向かって放たれるが、レイがその交差後に破線によって表現されるように、点1320bにおいて物体1315bと交差するように図示されている。
図示されているように、レイ1335a、1335、および1330aのそれぞれは共通始点を共有し、その始点から異なる既知の光源への方向を有する。したがって、それらの方向は、3次元空間内の光源のロケーションを指定するのではなく、光源のロケーションの表、または、他の編集物を索引付けすることにより指定できる。同様に、シャドーレイは共通始点から放射するので、共通始点は共有レイデータとして提供される可能性もある。類似した状況が点1320dで物体1315dと交差するカメラレイ1310bに対し図示されている。レイ1335bおよび1335dは、光1340bおよび1340cへ向けて放たれ、別の物体と交差せず、点1320dがこれらの光のための影の中に存在しないという決定を可能にする。しかし、レイ1330aは光1340aに向かうことになるが、1320cで物体1315cと交差し、点1320dが物体1320bの影の中に存在するという決定を可能にする。この場合も同様に、これらのシャドーレイは、それぞれの光へ向けられることになり、共通始点から発し、共通始点が共有レイデータとして表現されることを可能にし、各レイ方向は、光源と光源のそれぞれのロケーションとのリストへのインデックスによって示される。
レイ対応の送信および格納の効率を高めるための上記実施例のレイタイプおよび方法は、例えば、レシーバ1050の固定機能回路で実施可能である。このような回路は、バッファ1040を介してサンプルプロセッサ1010およびシェーダ1035からのデータを解釈することができる。例えば、レシーバ1050で受信されたヘッダは、上記指定されたタイプのうちの1つのタイプの複数のレイとして他のデータを解釈するフォーマットを指定する情報を含むことができる。このようなヘッダは、レイタイプを特定する情報を含むことができ、この情報はサポートされているレイタイプを説明するために適切なビット数であることができる。他の情報は、データが送信されることが予定されているレイの数であることができる。送信されるさらに他の情報は、共有されるか、さもなければ、複数のレイの間で共通であるレイデータとして受信されるべきデータの一部分と、各レイに個別であるレイデータとして受信されるべきデータの別の部分とを特定する情報を含むことができる。例えば、反射レイの場合と同様に、レイが共通始点から放射される場合、ヘッダの中の特定されたデータの一部分は共通始点のためのデータであることができ、ヘッダの中の特定されたデータの別の部分はグループの中の各反射レイのためのデータであることができ、あるいは、その他の場合に、レイ方向のための定式および/またはパラメトリック定義であることができる。よって、ヘッダ、または、その他の送信されたコンフィギュレーション情報を使用することは、これらの実施では、例えば、レイ方向を指定する数の異なる精度を与えることによって、レイデータ指定のためのフレキシビリティを与える。
シャドーレイの実施例に関する関連した変形および一般性は、レイが放射され、共通ロケーションへ向けられることになるが、種々の始点を有する状況を含む。この第1の実施例は、プリミティブ/レイ交差の数が特定され、それぞれが特定の光源のオクルージョンに関してテストされる必要がある状況を含むことになる。複数のレイは、各レイ/プリミティブ交差でその光源のオクルージョンをテストするためシャドーレイを表現可能である。別の実施例は、不規則若しくは可変(または両方)である表面の複数の点が既知の光源へ向かう方向に放射されたレイを有することになる状況である。このような実施例は、太陽光で照明された水が観察される場合に提示される。水の多数の部分からのレイは太陽の方向に放射されることになる。よって、このようなレイの始点は、変化することになるが、レイの行き先は実質的に類似することになる。始点は、例えば、表面上の風の影響を反映させて、パラメトリックに、および/または、(擬似)ランダム性をもつ要素を用いて、指定されることもできる。これらの実施例の他の変形が可能であり、1つの一般化は、物体の表面が所定の光源からの照明に当てられるが、光と表面との交差が表面全域での位置と共に変化することになり、したがって、複数のレイがその光源へ向けられることになるグループとして表現でき、さらにパラメトリックまたはランダム化されて始点を有することができる。
さらなる態様は、光源以外の物体が多数の異なるレイの行き先である状況を含む。例えば、レンズは、視野からのレイを集中させ、その視野内のレイ交差に関与するプリミティブはレンズの表面上で行き先を共用するレイを生成させることができる。より一般的には、これらは、少なくとも複数のレイの間で行き先が共有され、したがって、その複数のレイの間で共有されたレイデータを使って表現できる状況の実施例である。これらの開示内容からこれらの事情に従う他の状況が想定されることができる。
他の実施では、ヘッダの中で指定されることがある情報は、複数のレイを指定する情報の様々なタイプの共通位置および共有位置のためその後にビット位置を予め配置することが可能である開始ビットシーケンスがレイデータの先頭を特定可能であるように、ハードコード化できる。いくつかの実施では、所定のヘッダに対し指定されたレイの数は、一定であることができ、または、そうでなければ、暗黙的であることができる。
上記実施の実施例は、ヘッダデータを解釈するようなデータ解釈を通じてあるフレキシビリティを提供でき、より効率的に表現される交差のためのレイのタイプが事前に決定されるシステムに適切であることになる(他のレイタイプは共有レイデータを使用することなく各レイの始点および方向を完全に定義することによって表現可能である)。しかし、それ以上のプログラム可能でフレキシブルな実施が行われることができる。それ以上のプログラマブルな実施は、例えば、異なるカメラ挙動、オクルージョンレイおよびモンテカルロレイのためのサンプリングおよび分配技術の変動の追加を可能にする構成をサポートすることができる。完全に異なるタイプのレイもまたサポートされることができる。同様に、他のタイプの共通および別個のレイデータがプログラマブルに構成することもできる。
例えば、別個のレイデータが、光の完全精度の3次元空間座標ではなく、光源へのインデックスを含むことができるように、オクルージョンレイが、既知の光源の表を使用できることを上述した。別の実施は、レシーバ1050がその後に特定された交差からオクルージョンに関してサンプリングされる光源ロケーションを生成するために分配関数を使用することになるように分配関数を提供することができた。そして、このような実施例では、分配関数は別個のレイデータを送信する情報の一部分の一部であったことになる。このような実施例は、開示された技術が与えられた実施例、または、与えられたレイタイプの実施例に限定されることがなく、どのようなタイプおよび形式が望まれているとしても、レイデータの効率的な送信および指定のためよりに適用され、適応可能である。このような適応およびアプリケーションは、レシーバ1050の中にプログラマブル資源を設けることによって助けることができる。
バッファ1040を介してレイ情報を受信するプロセッサ180を提供し、レイ再構成中にデータを格納するためメモリ資源181(例えば、スタック、または、より大規模な完全な機能メモリ資源)とさらに通信するこのようなプログラマブルな態様が図1Cに関して図示されている。再構成されたレイはレイ出力190を介して出力される。
上記説明は主として、サンプルユニットまたはシェーダコードのようなレイの提供源からのレイの送信に関する。しかし、レイの格納の効率の増加がさらに提供できる。例えば、レイ送信に関して、レシーバ1050がサンプルプロセス120およびシェーダ1035から入力を受信し、完全に指定された始点および方向としてレイを、接続1051を介して、メモリ912へ、または、交差テスト資源1045へ出力するように、図10Aに図示されている。いくつかの実施では、メモリ912は、接続1053を介して交差テスト資源1045へ直接的にレイ情報を提供することもできる。
ある一定の交差テストユニット実施は、交差テストユニットにおいて、レイメモリを節約することによる恩恵を受けることができる。この場合、レイは圧縮形式で格納可能であり(例えば、共有データ表現および個別のデータ表現として格納され)、交差テストを実行する前に圧縮解除される。これは、コンピューティング資源のある余分な費用と交換にメモリ節約をもたらす。例えば、図10Aは、このようなレイ記憶装置の実施例において、レシーバ1050が接続1052を介してメモリ912からのデータの読み出しと、メモリ912へのデータの書き込みの両方を行うことを図示している。よって、レシーバは、最初にレイを受信し次第、変更することなくレイをメモリ912に格納し、後にレイを取り出し、レイに再構成演算を実行し、レイ出力1051を介してレイを出力する。レイ出力1051は、交差テストのためのレイデータを交差テスト資源1045に提供するため交差テスト資源と連結する。レシーバ1050は、受信された通りのレイのうちのいくつかをさらに格納し、交差テストで用いるため直接的に受信されたレイデータからレイの始点および方向を決定することにより他のレイを再構成することができる。
図15は、上述のレイタイプ実施例によるレイのグループのようなレイのグループを効率的に示すデータを生成し、そのデータを、例えば、交差テスト資源1045へ送信するためホスト905(図10A)において実施可能である方法を図示している。方法1500は、放射される複数のレイを決定する工程1505を含む。例えば、サンプルプロセス1010は、カメラレイのグループを放射することを決定することができる。方法は、複数のレイの共有属性を特定する特定する工程1510をさらに含む。例えば、カメラレイのグループの場合、共有属性はカメラの位置でもあることができる。次に、方法は、送信されるべきデータとして共有属性を示す工程を含む。この方法は、共有属性を表すデータと、レイのグループのうちのそれぞれの始点および方向を決定するために十分な他のデータとを送信することで終了する。
決定する工程1505および特定する工程1510は、説明を簡単にするため別個に特定された。しかし、多数の実施では、これらの工程は、このようなレイを放射することを決定するプロセスの外部にある観点から「観察可能」でないことがある。シェーダまたはサンプルプロセスがレイのグループを放射することを決定することができ、このような決定において、シェーダまたはサンプルプロセスは共有属性の中のレイのグループと別個のレイデータ形式とを示すことができるので、共有属性を特定する工程は暗黙的であることができる。したがって、レイのグループを表す送信されたデータは、多くの付加的な処理無しに、このようなレイのグループを決定するプロセスから出力されることができる。多くの場合、このような実施は、レイのグループ毎に別個の始点および方向を出力し、次に、そのグループの間で共有属性を特定するより好ましいことになる。
図16は、交差テストユニット910(例えば、レシーバ1050)で実施可能であり、レイのグループを表すデータを受信する方法を図示している。この方法は、(例えば、レシーバ1050へのバッファ138を介して)レイデータ入力からデータを受信1605する工程を含む。データは、図15に関して上述されたように、共有レイデータおよび他のレイデータを含む。この方法は、共有レイデータおよび他のレイデータを特定するためデータを解釈1610する工程と、受信されたデータの中に記述されたレイのグループの中の各レイに対し始点および方向を決定1615する工程とをさらに含む。解釈1610および決定1615は、レシーバ1050の中で行われることができ、このような解釈および決定のためレシーバ1050によって講じられる措置は、受信されたデータの内容と上記態様の実施とに基づいて変化することができる。例えば、受信されたデータが内容を記述するヘッダを含む場合、レシーバは共有レイデータを特定し、例えば、レイのグループのタイプを解釈し、決定1615中にそのレイタイプを使用することができる。それ以上のプログラム的な実施が行われる場合、受信されたデータは、レシーバが受信されたデータを解釈する方法に関して、レシーバ1050の一部分をプログラミングする命令を含むことができる。決定は、レイタイプと、光源インデックスと、このようなレイのグループをより効率的に示すため使用される種々の他の情報のいずれかとのような、態様に基づいているので、解釈が最終的に決定する工程に影響を与える。この方法は、交差テストにおいて各レイのグループに対し決定された始点および方向を使用1620する工程をさらに含む。
レンダリング進行の追跡および制御に関するプロセスおよびシステム
シェーダ1035は図10Aにおいて単一の実体として図示されているが、シェーダは、一般に、皮膚、紙、水などのような材料に固有である。シェーダは、レイによってシーンの中で交差されたプリミティブの色を決定するため実行された何らかの手続きをより一般的に参照できる。シェーダは、材料と関連付けられ、同様に材料に基づいて変化することになるテクスチャデータにアクセスすることもできる。このようにして、シェーダ1035は、異なるレイが交差した異なるプリミティブの色を決定する際にそれぞれが使用される、ある程度の数の異なるプロセスが所定の時点にホストプロセッサ905で動くことができる一般的な場合を示す。
同様に、シェーダは、「拡散照明取得」のようないくつもの標準化された手続きを呼び出すようにプログラムされることができる。これらの標準化された手続きは、シェーダによって、シェーダ独自の計算およびプロセスにおいて手続きから返された結果を使用する可能性があるユーティリティのように使用されることができる。後述されるように、シェーダによって使用されるこれらの標準化された手続きまたは他のユーティリティは、本明細書中に記載された適応レイトレーシングの態様を実施するため修正されることができる。
サンプルプロセス1010は、交差テスト資源1045のための入力としてレイを放射する。これらのレイは、シーンの中のカメラ位置または任意の始点から始まる可能性がある。サンプルプロセス1010は、現在のシーン品質またはある照明効果の解決策を決定するためサンプルプロセスが実行する演算のような種々の演算または計算に基づいてある特定のレイを発生させることを決定することができる。サンプルプロセス1010は、これに限定されるものではないが、近傍サンプルに関するサンプル値の標準偏差と、近傍サンプルに関するサンプルデータのフィルタリングと、サンプル値および種々の2次元信号処理演算の調整及びスケーリングとを含む可能性がある他の演算をさらに実行することができる。最終的に、サンプルプロセス1010は、レイトレーシング計算の結果を表示、格納、および/または他の処理のための最終的な画素色値に変換するように構成される。上述のように、交差テストは、1若しくはそれ以上のGAD要素およびシーンプリミティブに対して並列にレイのコレクションをテストすることにより本システムにおいて進行する。ここで、公差テストを実行する(複数の)装置またはシステムは、この装置またはシステムが現在テストしているレイの祖先に「気付く」必要がなく、実際に、コレクションの各レイは、祖先、始点、および方向の点でコレクション内の他のあらゆる祖先に関係しないことができる。このテスト方法は、後述されるように、トレーシングが典型的にどのように管理されるか、および、中間シェーディング結果が画素の最終的な色値にどのように考慮されるかについての変形および適応によって促進される。
交差テスト資源1045は、サンプルプロセス1010および/またはシェーダ1035からレイデータを受信し、ジオメトリプロセス1020からプリミティブデータ(および、選択的にジオメトリ・アクセラレイション・データ)を受信する。交差テスト資源1045は、どのレイがどのプリミティブと交差するかを特定し、このようなレイ/プリミティブ交差の指標をシェーダ1035へ送信する。当然ながら、図1は、議論の目的のための抽象概念を表現し、実際の実施は異なる挙動を与えることができる。例えば、このような指標は、指標の中で特定されたプリミティブの色を決定するため、プロセスをインスタンス化するドライバ(シェーダと呼ばれることもある)に提供されることができる。
ホストプロセッサ905は、上記態様によるレイトレーシング適応の実施の中で使用される可能性がある管理工程1018を動かすものとしてさらに図示されている。いくつかの実施では、管理工程1018は、以下の説明から明らかにされるように、その機能がシェーダプロセス、または、他のプロセスに組み込まれることがあるので、設けられないことがある。ホストプロセッサ905は、管理工程1018または別の適当なプロセス若しくは実施において、どのレイが交差テスト資源1045へ提供されるべきであるか、または、少なくともこのようなレイの順序付けを決定するように動作し、ホストプロセッサ905と交差テスト資源1045との間の帯域幅がすべてのこのようなレイを同時に送信するため不十分である。特に、サンプルプロセス1010およびシェーダ1035は、それぞれが交差テスト資源1045へ送信するためのレイを生成することができる。管理工程1018は、シェーダ1035からのレイを交差テスト資源1045への送信のため、したがって、交差テスト資源1045におけるテストのため優先させることができる。例えば、シェーダ1035はレイのグループを生成することができ、サンプルプロセス1010はカメラレイのグループをさらに生成することがあり、シェーダレイのグループは管理工程(または別の実施)によってカメラレイより優先されることになる。この優遇は、シーンの中を進行する2次的レイ(すなわち、カメラレイ以外のレイ)の生成およびテストを高めるために役立つ。本明細書中に開示された態様による広範囲の2次的レイの生成は、助長および促進される。他の態様では、カメラレイより優先されるシェーダレイのグループのこのような処理は、交差テスト資源のためのレシーバの中のようなどこか他の所で実施されることができる。
殆どのレイ・トレーシング・システムがどのように動作するかに関する状況は、以下の説明を理解するため役立つことができる。従来、レイトレーシングのための交差テストおよびシェーディングは、レイとシーンプリミティブとの間の特定された交差のツリーを構築することにより進行し、ここで、ツリーは、交差の点でのプリミティブの色を決定するために生じさせられた子レイのチェインを示す。例えば、レイは、レンダリングされている2次元表現の画素を通して発散させられる。レイは、プリミティブとの最近接交差が特定されるまで、シーンの中の交差に関してテストされる。その後、子レイは、サンプル拡散および鏡面照明条件のため、および/または、既知の光源が別の物体によって遮られているかどうかを決定するために生成され、交差点がその物体の影の中に存在するようにされる。拡散および鏡面照明子レイのようなこれらのレイのうちのいくつかは、それ自体が他の物体と交差し、次に、さらなる子レイを生じることができる。
換言すると、多くの場合、プリミティブのためのシェーダは、シーンの中の他のプリミティブまたは光源についての付加的なシェーディング計算の結果から取得されなければならない情報なしには交差したプリミティブの色を決定できず、プリミティブと光源とを特定するためにさらなる交差テストが含まれる。
このようなプロセスは、通常、生成されたレイ毎に、そのレイがシーンを離れるか、または、光源に衝突するまで継続する。光源に衝突したこれらのレイに対し、その光源は、その後に光源からの光の色を決定するためにサンプル可能であり、次に光源からの光の色がレイの色を決定する。その後、各接合点で、現在のレイの色が、次のプリミティブのシェーディングからの結果と共に、チェインの中の次のレイの色を決定するように、最初に画素から発したレイに達するまで中間交差のチェインが繰り返され、次に、画素の色へのそのレイの寄与度が決定できる。各シェーディング工程で、入射光の色を記述するベクトルは、ツリーの中の次の交差で使用される出射光の色を決定するために、シェーディングからの結果によって乗算されることができる。
このような方法は、ツリーの中のレイの各チェインに含まれるすべての中間交差を格納することを必要とするので、ツリーは、ツリーの中の各ノードのシェーディング計算の解決の間に繰り返すことができる。例えば、交差したプリミティブと関連付けられたデータは、プリミティブが粗い、赤みを帯びた表面を有することを示すことができ、シェーダ1035(または、インスタンス化され、これらのシェーダの間で考慮されたシェーダプロセス)はそのデータにアクセスできる。しかし、シェーダ1035は、何色の光がそのプリミティブに入射したかに関する情報をもたないことになり、シェーダ1035は、例えば、拡散光および鏡面光を決定するためにさらなる交差が行われるまで、プリミティブと交差したレイに関して、プリミティブが何色であるべきかを決定できないことになる。
異なるアプローチは、各交差においてシェーディング計算の結果が乗法的ではなく加法的であると考えられる場合、各交差が他の交差から独立に解決できることである。典型的な態様では、中間シェーディング結果を加法的にすることを実現する方法は、サンプルプロセス1010またはシェーダ1035のいずれかによって放射された各レイと共に色減衰ベクトルを運ぶことを必要とする。この減衰ベクトルは、交差したプリミティブの1つずつがレイおよびプリミティブの交差点に落ちる1若しくはそれ以上の光源からの光に影響を与える程度を追跡する。
このように、レイが寄与することになるサンプル始点と色減衰ベクトルとをさらに含むデータ構造体がレイ毎に設けられる。この情報を用いると、交差テスト中の中間点で、レイがどの画素に寄与するかと、前の交差がそのレイの色にどのような影響を与えたか(光が実際にシーンの中を伝搬する順序の逆順であり、レイ/プリミティブ交差がこのような光にどのように影響を与えるか)とを決定することができる。
このようなシステムでは、サンプルプロセス1010は、現在累積されているような画素の色を示すサンプルバッファ1011(または、複数のサンプルバッファ)を維持することができる(すなわち、各子レイが終了するとき、子レイの寄与度が、ツリーを遡ることなく、サンプルバッファの中で個別に反映される)。同様に、サンプルプロセス1010は、移動中のレイの状態と、画素色に関するどのような情報がシーンのレンダリング中にシェーダ1035から所定の時点で受信されたかとを維持することができる。
図17は、レイを示すデータ構造体1700の実施例を図示し、データ構造体のコンポーネント1705、1710、1715、1720は、サンプル特定情報1705とレイ方向1710とレイ始点1715と色減衰ベクトル1720と重み1725とを含む。
都合のよい実施例では、色減衰ベクトルは、数がカメラから現在のレイまでの経路がこの経路に沿って進む光の色にどのように影響を与えるかを決定するために使用できる関係を有する限りは、レイシェーディングの間に色を示すため使用されている色基準の中で純白色からの減衰として示すことができる。このような色基準は、RGB、または、有用若しくは望ましいことがわかったその他の基準を使用することになる。例えば、都合のよいRGBの実施例を考慮すると、純白は[111]として表現可能であり、使用される計算スキームの精度を反映するある程度の数の零を含むことができる。RGBは周知の色基準であるので、いくつかの実施例および態様を記述する際に使用されるが、態様はRGBの使用に限定されることはなく、加法的色基準および減法的色基準を含む他の色基準が使用することができる。
図18はこのような色ベクトルがレイトレーシング中にどのように使用されるかについての態様を説明するため使用される。図18の要素は、カメラ1805と、色フィルタ1820と、ライト1840および1830とを含む。現実の世界では、ライト1840および1830から放射された光は、色フィルタ1820によってフィルタ処理され、その後、フィルタ処理された光のうちの一部がカメラ1805に衝突し続ける(カメラ1805とプリミティブ1820との間の画像平面は簡単にするため本実施例において放射されている)。レイトレーシングは、カメラ1805が交差テストのためのレイ1810を放射するように、逆に動作する。レイ1810はプリミティブ1815で色フィルタ1820と交差する。殆どの従来的なレイトレーシングは、この交差を交差のツリーのノードとしてラベル付けすることによって動作する。次に、プログラムコード(例えば、シェーダ)は、光源1840および1830の色をテストするため、子レイ1825および1835を放射させ、これらの光源が遮られているかどうかを決定する(本実施例は単純であるので、通常現れることになる多数の介在するレイ/プリミティブ交差は削除されている)。例えば、RGB色基準では、子レイ1825および1835はそれぞれの光源1830および1840に衝突し、次に、各光の色(例えば、光1840は青であり、光1830は赤である)は、レイ1810とプリミティブ1815との交差を示すノードまでツリーを上に伝搬する。その後、各ライト1840および1830の光に及ぶレイ1810/プリミティブ1815の影響が決定され、次に、カメラ1805まで遡らせる光の色を決定する。色フィルタ1820はシアンであり、色フィルタ1820は、赤色光を除去し、可能性のある削減された強度の青色光を許可することになると仮定する。
本態様では、カメラ1805はレイ1810を放射し、レイ1810と関連付けられているのは、色減衰ベクトルであり、色減衰ベクトルは、カメラ1805からの放射時に、純白、例えば、[111]として初期化されることがある。レイ1810はプリミティブ1815に衝突する。この場合も、色フィルタ1820はシアンであり、色フィルタ1820は従来通りの方式で物理的に挙動することになる。しかし、本態様では、(プリミティブ1815で)色フィルタ1820がプリミティブ1815に達する光の色に与える影響が事前に決定され、その影響は、他の前のレイ/プリミティブ交差の影響と共に、このレイと共に「運ばれる」色減衰ベクトルに表現されている。特に、本実施例では、色フィルタ1820はシアンであり、一方、レイ1810の色減衰ベクトルは白色であり、レイ1810への色フィルタ1820の影響は赤色光を除去することになる。この影響は赤色成分を減少させることによって減衰ベクトルに記録される。例えば、RGB基準(赤緑青)色基準において、レイ1810の減衰ベクトルは[111]として開始することになる。このようなベクトルへのプリミティブ1815の影響は、赤色光の除去を反映して、[011]として表現されることができる。
この更新された色減衰ベクトルは、次に、子レイ1825および1835と関連付けられる。この場合も、子レイ1825および1835は、それぞれ、ライト1830および1840に衝突する。ライト1830および1840に色は、それぞれ、赤色および青色であると仮定された。子レイ1825および1835の減衰ベクトルは、赤色が除去されるように、子レイの祖先(すなわち、カメラレイから現在までの経路)がカメラライトにどのように影響を与えるかを表現している。よって、ライト1830は、カメラ1805における光の色に寄与度がないことが決定され、光は青色であり、よって、カメラ1805に到達する光の色は青色になる。この決定は、決定された色をサンプルバッファ、例えば、スクリーンバッファ111へ直接的に書き込むことによって実施可能である。言い方を変えると、これらの態様において、レイは、異なる割合で光の異なる色の差動減衰を示すチャネルと見なすことが可能である。
異なる実施例では、両方のライト1840および1830は白色であり、子レイ1825および1835は、それらの祖先からの経路が赤色光のフィルタリングを引き起こすという情報(減衰ベクトル[011])と共に、それぞれのライトに「到達」することになると仮定されている。シーン(すなわち、画素)光エネルギーへの寄与度は、両方のライト1840および1830に関して、シアンであり、このような寄与度はサンプルバッファ221へライトバックされる(各子レイ1825および1835と共に、各レイが寄与するスクリーン画素を指定する情報も存在することによって支援されている)。
より複雑かつ現実的な環境では、交差に関与する1つずつのレイの色減衰ベクトルに影響を与えるある程度の数の中間レイ/プリミティブ交差が存在することができる。しかし、各レイの色減衰ベクトルは、レイの経路がその経路を進む光の色にどのような影響を与えたかについての履歴を維持する。
上記開示内容による種々の実施例適応およびレイトレーシング変形は、この形式の光エネルギアカウンティングを使用する。これらの実施例および実施はいずれも複数のサンプルバッファを使用し、レイは別個にそれぞれのこのようなサンプルバッファに収集され、サンプルバッファの間で移動することがある。上述されているように、いずれの色基準も、特定のタイプのレイトレーシングまたはその他の環境のため有用であるか、または、望ましいことがわかった。
光エネルギーがこれらの態様においてどのように計算されるかを記述する第1の実施例では、シアン色フィルタが、一方が赤色およびもう一方が青色の2つのライトをもつシーンの中でカメラレイと交差した実施例が存在した。シアン色フィルタは色フィルタに衝突した赤色を除去することになることが事前に知られ得るので、シーンの中のライトの色に関する情報を有するプロセスは、(色フィルタ1820の)プリミティブ1815の影響と同様に、プリミティブ1815が赤色光の影の中にあるように赤色が中間物体によって遮られているかどうかを決定するため子レイを生成しないことを決定可能であり、その理由は、赤色がいずれにしても大部分が除去され、プリミティブ1815が遮られているかどうかを無関係にするからである。よって、シーンの中で交差テストのため生成されたレイの量は、最終的な寄与度がスレッショルドより低いと決定できるレイを発生しないことによって削減可能である。このような状況のための環境は、単純な光オクルージョン状況に最も当てはまることができる。
当然ながら、より複雑な材料では、一部の赤色光をプリミティブ1815によってもたらされるようにするある程度の屈折および反射が存在することになり、その結果、オクルージョンが多少の関心事であることができる。このような状況の存在は、プリミティブ1815のためのシェーダによって決定され、シェーダは、これらの典型的な態様では、示された状況毎(例えば、反射および屈折)に子レイを生成し、このような状況の1つずつの強度または重要度をそれぞれの子レイの重みとしてさらに記録する。例えば、色フィルタ1820からの反射が非常に僅かであるならば、反射のための子レイは、レイ1810と関連付けられた重みより遙かに低い重みで放射されることができる(鏡面対拡散のような態様が同様に取り扱い可能である)。重みは、したがって、特定のプリミティブのシェーディングに対する、および、最終的にその存在を負っているカメラレイに対する(そして、基準を維持するサンプルに対する)所定のレイの相対重要度を示す。よって、レイトレーシングの知的リアルタイム適応が重みを使用して実施可能である。
図2の文脈において、交差テスト資源250は、レイ1810とプリミティブ1815との間の特定された交差を返し、プリミティブ1815のためのシェーダは子レイを生成し、プリミティブに衝突することになる光へのプリミティブの影響に対する各子レイの相対的な寄与度を記述する。これらの相対的な寄与度は、レイ1810の重みに基づいて各子レイに重みを与えることによって示すことができる。同様に、典型的な態様では、各子レイの親の影響は、各子の重みに表現されることがある。例えば、レイ1810の重みは、子レイの重みの合計がレイ1810の重みにほぼ等しくなるように、子レイの間に割り付けることができる。その後、各子レイは、交差テストされることがさらに可能であり、シェーディング/重み付けプロセスが繰り返される。
図19はプリミティブ1915で物体1920と交差するレイ1910を放射するカメラ1905の単純な実施例を示している。レイが選別されるべきであるかどうかに関する決定は、後述される実施例の態様と共にスケーラブルおよび一般的な手法で取り扱うことができる。
プリミティブ1915と関連付けられたシェーダは、子レイ1930a〜1930eを放射することを決定する。プリミティブ1915のためのシェーダは、子レイ1930a〜1930eのそれぞれに対する相対的な寄与度を少なくとも含むことになる。さらに、各子レイ子レイ1930a〜1930eの相対的な寄与度を効率的に説明し、さらに、サンプルに寄与がある固定エネルギー比を維持するために、レイ1910と関連付けられた重みが各子レイ子レイ1930a〜1930eのためのそれぞれの重みを決定する際に使用される。本実施例で放射されるレイの数はフレネル項として計算可能である。重み分布の実施例では、レイ1910の重みは、子レイ子レイ1930a〜1930eの重みの合計がおよそレイ1910の重みに等しくなるように保存される。このような付加的な重み変形は、シェーダの一部、または、シェーダから入力を受信するプロセスであると見なされる。このような重みを加算することは必要ではなく、シェードされているレイの重みが反映されないように、または、そうでなければ、子レイへ完全に伝搬されるように、および/または、サンプルへのエネルギーとして寄与するように、シェーダは多様な方法のうちのいずれかで重みを割り当てることができる。
特定のサンプルから放射されたレイの重みは、サンプル自体と関連付けられた重みに一致させ、合計を一致させ、または、そうでなければ、関係することになる。サンプルと関連付けられた重みは、特定のサンプル/画素のため累積されるように残された光エネルギーの量を追跡するため使用されることができる。例えば、10のカメラレイがサンプルのため最初に放射された場合、光エネルギーの60%を占める放射性のプリミティブまたはライトに関するカラー情報を受信し次第、残りのサンプル重みは同等に削減されることができる。カメラレイの重みは、その祖先が複雑なシーンの中でレイトレースされるので、最初に放射されたカメラレイの数より多くの多数のレイが最終的にサンプルに寄与するように、分散させられる可能性がある。
交差テスト交差のための子レイを交差テスト資源1045に提供する前に、すべての子レイ1930a〜1930eが交差テストされるべきであるかどうかに関する決定が行われることができる。
実施例の態様では、各レイと関連付けられた重みは、そのレイが交差に関してテストされるべきであるかどうかを決定する際に使用される。例えば、上記態様によるレンダリングシステムは、シーン品質のような目標優先度、または、例えば、所望のフレームレートのようなレンダリング速度の選択を可能にする。レイ/プリミティブ交差処理のための重みスレッショルド値は、優先された目標の促進の際にセットされ、定期的に修正されることができる。スレッショルド値は、所定の子レイが交差テストされるべきであるかどうかを決定するため使用されることができる。
例えば、レンダリング速度が優先される場合、所望のフレームレートの維持は、フレームレート維持のパラメータの範囲内で、できる限り良い品質シーンを達成することより重要であるが、フレームレート維持のパラメータの範囲内で、できる限り高い品質を保つことは依然として望ましい。このような状況では、レイを処理するため準備する所定の時間フレームの中で処理すべきそれ以上のレイが存在するので、シーンレンダリングに関して比較的重要性が低いレイに関する処理資源を使用することを避けることが望ましいことがあり、いくつかの実施例では、この重要性は各レイと関連付けられたそれぞれの重みによって測定される。
図19の実施例に戻り、レイ1930a〜1930eを表す矢印のそれぞれの長さがレイと関連付けられた重みの値の相対的なサイズを表していると仮定すると、レイ1930eは、さらなる処理に価値を与えるには非常に小さい重みを有することが決定され、そのレイは交差テストのため処理されるのではなく、放棄できると決定されることができる。この実施例は、プリミティブ1915のためのシェーダがレンダリング中に優先度(例えば、レンダリング速度)を示す情報を受信せず、このような考慮なしに実施される状況である。しかし、シェーダは、(インスタンス化、そして、それらの選定と対照的に)シェーダによってインスタンス化されるべきレイの数を決定するため使用可能である重み付け情報の入力を可能にすることが書き込まれる。
同様に、シェーディングアルゴリズムは、親レイの重みに基づいて選択可能であり、(例えば、子レイ1930a〜1930の放射をもたらすシェーディングアルゴリズムは)親レイ1910の重みに基づいて選択可能である。親レイ1910が比較的高い重みを有するならば、レンダリングされるシーンに対し比較的重要であると見なすことができる。所定のレイの重みは、レイ重みの統計的なサンプリングまたは追跡に基づいて判断可能である。例えば、サンプルプロセス210は、例えば、このような重みの移動平均を維持することにより、いくつのレイを含むビンがある特定の重み区分の範囲内にあるか、または、レイ重みの分布を理解するいくつかの他の許容可能な手段によって、現在交差テストされている重みの分布を追跡可能である。
例えば、ある範囲の計算コストおよび結果の品質(おそらく、直接的な関係)を有するいくつかのアルゴリズムは、ある一定の照明機能を実行するため利用可能であり、したがって、計算的により費用がかかるが、より品質の高いアルゴリズムがそのプリミティブをシェーディングするため選択されることができる。
さらなる実施例によって、他の状況では、交差した特定のプリミティブの色を決定するとき、鏡面照明、反射、および屈折のようなある程度の数の異なる照明効果が考慮されることができる。このような状況では、1若しくはそれ以上のタイプの子レイが照明効果毎に生成されることができる。このような子レイの1つずつは、重みが関連付けられることがあり、重みの値は少なくとも親レイ(例えば、レイ1910)の重みに基づいて決定されることになる。この場合も、レイ306の重みは、すべての子レイの重みの合計がレイ306の重みにほぼ達するように保存されることができる。レイ306の重みが子レイの間でどのように分配されるかは変化する可能性がある。
例えば、シェーダが鏡面光はプリミティブ1915での光効果全体の20%を占め、拡散照明は50%を占め、屈折がその他の30%を占めると決定する場合、各影響(鏡面、拡散、および屈折)のため放射された子レイは、グループとして、レイ1910の重みの約20%、50%、および30%に割り当てられることができる。各レイの間で、グループに割り当てられた重みは、さらに等分割されることができる。他の分割も同様に可能である。例えば、拡散照明コンポーネントのいくつかのレイのための重みは他の拡散照明レイより重く重み付けされる可能性ができる。重みの統計的、擬似ランダム、および/またはランダム分布が実施されることができる。このシェーダが光を放射する表面のプリミティブ用であり、そして、それと相互作用する場合、親レイ重みの一部分が加算されることができ、または、そうでなければ、サンプルで決定されているものとして説明されることができる。換言すると、プリミティブは光を放射するので、親レイ上で伝搬された光エネルギーの少なくとも一部分はその放射に由来することになり、その時点のサンプルに加算される可能性がある。このような加算は、色と、その色によって表現されたエネルギーの相対的な量との追跡を含み、さらに、現在の更新された色に到達するためサンプルの現在の色を加算されるべき光エネルギーと混合することを含むことができる。
レイと関連付けられた重みの割り当ておよび解釈を協調させることにより、レンダリングシステム1000は、レンダリングシステム1000が主観的および客観的なシーン品質を効率的に維持する方法でシステム資源を使用できるように、レイトレースされた画像の品質および速度に関係する広範囲の適応型レイトレーシング挙動を可能にする。レンダリングシステム1000は、レイトレーシング変動のための利用可能な資源として、ある一定の目標を追跡するために、最小フレームレートの維持のようなレイトレーシング挙動において適応を実施することがさらに可能である。
上記態様の範囲内の別の適応は、既に生成されたレイの重要性の希薄化または濃縮化を含む。例えば、光エネルギーを1画素に導くことになる10つのカメラレイが放射可能であり、各カメラレイは規則的な間隔で離されたシーンのサンプル部分へ向けることが可能である。これらのレイのうちのいくつかが大きいプリミティブ(例えば、壁)へ直接的に進む場合、カメラレイの一部は不必要であることがある。カメラレイの重さは一般に放射されたレイの数を鑑みて決定されるので、これらのレイのうちの一部が取り消されることが望ましい場合、残りのレイの影響は同等に増加されるべきである。このような増加は、既に完了したカメラレイの色寄与度の重み付けを増加することによって行え、そして、他のレイが完了したとき、これらのレイは、元々のサンプル重みによって示されたより重く重み付けされる可能性もある。そうでなければ、レイは格納領域の中で特定可能であり、それらの重みは他のカメラレイの一部の取消を考慮するため同等に増加される。このような濃縮化機能は、ある程度の数の類似したレイが生成される他の状況にも当てはめることができるが、引き続いて、より少ないレイが時間内に、および/または、他の利用可能な資源を考慮して、許容可能な品質レンダリングをもたらすために必要であると決定される。
このような機能は逆に動作することも可能であり、1つの理由または別の理由から、それ以上のレイがサンプルの色を精緻化するために放射されるべきであると決定する。このような決定は、そうでない場合に考えられるより多くの処理資源が利用可能であると特定することから生じるか、または、レンダリングされるシーンの複雑さが与えられた場合に(例えば、おそらく、類似したレイから返された色の間の分散が非常に大きい場合に)、結果は正確さが不十分であることがわかった。このような場合、それ以上のレイが所定のサンプルから放射可能であり、既にサンプルに寄与したレイの色の重みは同等に削減可能である。交差テストされているレイの重みは、格納されている場合にレイが利用可能であるならば、調整可能であり、または、各レイが処理を終了し、色情報を返した後に、レイ重み付けへの適切な調整が行われ得る。よって、これらの態様では、光エネルギーは、サンプルを参照する一部のレイに対し(例えば、放射性シェーダとの遭遇に応じて)既にサンプルに寄与済みであり、これらのレイによる寄与があった光エネルギーの相対的な重要度は、このような寄与の後、そのサンプルに影響を与えるレイトレーシングへの適応を実施するために調整されることができる。
上述されているように、レイ重みは厳密に保存される必要はなく、シェーダが子レイに伝搬しないか、または、シェードされているレイによって表現されることがある光エネルギーの量に合計が到達する光エネルギーに寄与するようにされる。よって、レイ重みは、いくつかの実施例では、保存されるか、または、近似的に保存されるが、実施は必ずしもこのような機能を提供しなくてもよく、いくつかの場合、このような機能を提供しないことは、それと関連付けられた計算を回避し、いくつかの実施では、検討事項であることができる。
レイトレーシング中のレイトレーシング適応の方法は図20に関して記載されている。図20は、レイ2010およびレイ2011のソース2005を図示している。レイ2010は(特定されていないプリミティブで)物体2025と直接的に交差し、レイ2011はプリミティブ2015で物体2020と直接的に交差する。各交差は、上述されているようにシェーダプロセスに知らされることになる。レイ2010は物体2025と直接的に交差し、その物体のためのシェーダ(または、おそらくより具体的には、交差したプリミティブでの物体2025の表面のためのシェーダ)は作動し、ライト2050からの鏡面照明をテストするレイ2055を生成することができる(例えば、物体2025の表面はやや光沢がある)。このレイ/プリミティブ交差のためのシェーダは、さらに、他のレイを生成するか、または、拡散照明のような他の計算を要求する。より複雑な表面は、付加的なレイの生成を必要とすることがある表面下散乱のような付加的な態様のため生成された付加的なレイをさらに有することができる。記載された適応性の態様の重要性は、レイ/プリミティブ2015交差のさらなる説明の後に記載されている。
レイ2011はプリミティブ2015で物体2020と交差し、このことがプリミティブ2015のためのシェーダを作動させる。本実施例のため、物体2020はガラス製であり、物体2020のためのシェーダは、トレーシングのための透過レイ2030と、反射レイ2031との両方を生成することが仮定される。本実施例では、シェーダは、レイ2011と関連付けられた重みをレイ2030およびレイ2031の1つずつのためのそれぞれの重みを決定する際に使用させる。物体2020の表面法線に合理的に直接的なレイ2011が生成された場合、シェーダは反射レイ2031より高い重みを透過レイ2030に割り当てる可能性がある。反射レイ2031は、その後、トレースされることになり、反射レイが裏側で物体2025とさらに交差していることが決定される。ここで、レイ2011の重みは(例えば)レイ2031とレイ2030との間で分割されているので、レイ2031のための重みはレイ2010の重みより小さい(例えば、両方のレイ2011およびレイ2010がカメラレイである)。この状況の現実的な影響は、物体2020の中の物体20205の裏側に僅かな反射があり、レイ2010によって交差された物体の部分は光線源2005から直接的に見える。
よって、レイ2010/物体2025交差のためのシェーダプロセスは、レイ2010と関連付けられた重みにアクセスすることができ、一実施例では、関連付けられた重みに基づいて、正確なシェーディングが必要であることを決定可能であり、物体の色に影響を与える照明のより多くの態様を正確に決定するためそれに応じて動作することになる。対照的に、物体2025とレイ2031との交差のためのシェーダは(同じシェーダプロセスの別のインスタンス化である可能性があり)、レイ2031が非常に低い重みと関連付けられ、相応して、拡散照明呼び出しだけを実行し、より計算的に費用がかかるレイトレーシングを完全になしで済ますことがわかる。
代替的に、各シェーダプロセスは、入射レイ重みとは無関係に、同じ動作を行うことが可能であり、その後、管理工程130は、各シェーダプロセスから出力されたレイと関連付けられた重みに基づいてレイを選定できる。いずれかの実施がこれらの態様に応じて適応性を提供可能である。管理工程130の実施において、各シェーダプロセスから放射された重みの相対的なサイズ(例えば、各シェーダプロセスからの鏡面レイ)は、それぞれの親レイ(2010および2031)の重みが異なり、レイ2010の方が高い重みを付けられていることを依然として反映することになる。しかし、これらの注目すべき実施例の実施の態様は、シーンに対するレイの重要度の尺度が、レイによって交差された点における色を正確に決定するため期待されるべき努力の量を修正するため、シェーダプロセスによって、または、管理工程によって参照できることである。都合の良い実施は、レイ(例えば、図17)を示すデータ構造体を用いて運ばれる重みを使用することであり、ここで、そのレイは、親レイの相対的な重要度の連続性を維持するためそのレイの子レイの間で分割される(例えば、子屈折レイおよび子透過レイ)。
図6に図示された以下の実施例の方法600は、例えば、レイ選択、希釈化、濃密化、および、レイ重みに基づくシェーディングアルゴリズムの選択を含む概略的に説明された適応の実施例を要約する。複数のこれらの態様は図21の方法に図示されているが、それらの態様のうちのいずれもが単独で、または、補助的な組み合わせで使用可能である。
方法2100は、サンプルからカメラレイを放射する工程(2110)と、これらのレイを交差テストのため提供する工程(2115)とを含む。方法2100は、その後、特定された交差の指標を受信する工程(2120)と、受信時に、交差したプリミティブまたは他の要素(例えば、光)が放射性であるかどうかを決定する工程(2130)と、そうである場合に、色寄与度を交差の中で特定されたレイによって特定されたサンプル・バッファ・ロケーションにライトバックする工程(2135)とを含む。要素が放射性でない場合、少なくとも部分的にレイと関連付けられた重みに基づいて、レイ/プリミティブ交差をシェーディングする際にシェーダ資源を使用するかどうかが決定される(2140)。資源が使用されるべきであるならば、シェーディングアルゴリズムがレイ重みに基づいて選択され(2155)、このようなアルゴリズムの出力は、さらなる交差テストのため放射されるべきチャイルドレイの数を決定する工程(2165)を含むことができる。子レイはさらなる交差テストのため設けられる(2175)。潜在的に並列に、(各レイに含まれているサンプルロケーション特定情報を用いて特定される)所定のサンプルに寄与する十分なレイが存在するかどうかも決定可能であり(2160)、否定である場合、サンプルに寄与するレイの数が、レイの十分性が不足しているか、または、十分性が過剰であるかに応じて上方または下方に修正される(2170)。いずれかのこのような新しいカメラレイはその後に交差テストのため提供される(2175)。
レンダリング進行(工程2145)が不十分である場合、シェーディング資源を使用すべきかどうかを決定する際にスレッショルドが使用され、より少ないレイがシェーディングであり、および/または、より単純なシェーディングアルゴリズムが使用されるように、シェーディングアルゴリズム選択が更新される。「過剰」十分性であるならば、スレッショルドは、より高品質のシェーディングアルゴリズムおよび/またはより多くのレイがシェーディングされるか、または、より多くの子レイが放たれるように更新される。
要約すると、記載された実施例および態様は、シーン(例えば、画像フレームのシーケンスの中のフレーム)のレンダリング中に粒状レベルでレイトレーシングを適応させるメカニズムを提供する。このような適応は、デフォルト目標または明示的に選択されたゴールを問わずに、目標の助成において行われ得る。シーンレンダリングへのレイの重要度を決定する際に用いるためのレイと関連付けられた重みの使用は、レイ重要度の粒状決定がどのように行われ得るかの実施例とこのような決定において用いられ、親から子レイへ追跡される情報などを提供する。しかし、このような重要度追跡の他の実施が提供されることができ、適応レイトレーシングがこれらの実施に基づいて実行される可能性がある。
レンダリングされた画像に到達するため、光エネルギーは、最終的に、レイと関連付けられたサンプルに寄与し(方法600の工程630および650に関して参照され)、それに応じて、そのレイが、光の放射を生じさせるプログラムコードと関連付けられたプリミティブである放射性要素と衝突する。よって、放射性要素は、レンズまたはテレビ画面を用いる光のような実施例を含むことができ、これらの項目は他からの光を反射することができ、同時に発光することができ、放射性要素は、よって、単に放射性であるだけでなく、複雑な光相互作用をもつことができる。したがって、放射性要素のためのシェーダは、所定のレイ/プリミティブ交差をシェーディングするとき、光エネルギーをレイと関連付けられたサンプルに追加させることができ、ここで、その光エネルギーはそのシェーダの放射性コンポーネントを示す。シェーダは、上述のように、様々な他のレイを放射させることもできる。いくつかの場合、放射性コンポーネントによって表現された光エネルギーと、放射された他のレイとは、親レイによって表現された光エネルギーの量とほぼ同じでもよく、または、それは、所望の影響に依存して、増減することもできる。サンプルプロセス110は、既に追加された光エネルギーの色に対する新たに追加された光エネルギーの相対的な影響を決定するために十分なデータを維持するように、各サンプルに追加された光エネルギーを追跡することがある。例えば、サンプルプロセス110は、エネルギーの追加を追跡するサンプルと関連付けられた重みを維持することがあり、例えば、既に追加されたものに対する、新たに追加された光エネルギーの相対的な影響を決定するため参照される可能性がある(例えば、シェードされたレイの放射性コンポーネントと関連付けられた重みが僅かであり、多量のエネルギーがそのシェードされたレイと関連付けられたサンプルに既に追加されているとき、そのサンプルの色は大きく変化することがない。異なる実施例では、レイの重みは、シェーダによって予想されるより大きくなるように作られることがあり、このような環境はサンプル上のそのレイの予想通りに大きい影響によって表現されることがあるが、本明細書中に開示されているレイ重み寄与の態様を実施する明示的または暗黙的要件を侵害しない。
ある程度詳しく上述されているように、レイ重要度に基づく適応性、より具体的な態様では、レイ重みに基づく適応性は、シェーダプロセスが、例えば、親レイのためにいくつの子レイを放射すべきかを決定するとき、シェードされている所定のレイの重要度に気付くか、または、特に重要度を考慮する必要がないように、シェーダプロセスによるレイの放射後に実施可能である。時々、シェーダは、コードを複製するのではなく、共通照明計算ユーティリティを呼び出すことが可能である。これは、シェーダの移植性およびモジュール性を高める。例えば、シェーダは、拡散照明計算および鏡面照明計算のための照明ユーティリティを呼び出すことができ。これらのユーティリティは、上記態様による適応性を実施することができる。例えば、これらのユーティリティは、照明効果のため使用されるアルゴリズムのタイプを決定する際にレイ重み情報を使用することができ、より重要なレイに対し、より正確であるが、しかし、計算的に費用が高いという効果を使用することができる。見分けられるように、ユーティリティを呼び出すシェーダは、返された照明情報がどのようにして計算されたかに気付く必要がなく、単に照明情報を使用できるだけである。
さらに別の実施の変形は、シェーダプロセスが交差テストを実行したい子レイのようなシェーダプロセス出力を受信する管理工程を含む可能性がある。管理工程は、これらの子レイのうちのいずれかの部分、全部分、または、一部分が実際に交差テストされるべきかどうかを決定する。管理工程は、システム利用性に対する見通しを有し、悪影響を与えることなく、現在のシステム利用性がこのような交差テストをサポート可能であるかどうかを決定可能である。このような悪影響は、フレームレート目標の維持に失敗すること、または、重要度の高いレイを犠牲にして重要度の低いレイの交差テストを実行することであり、これらは、制約された資源処理の中で不必要なレンダリング品質の低下をもたらすことがある。
さらなる変形では、シェーダプロセスは、現在の資源利用性に関する情報を渡される可能性があり、シェーダプロセスは、どのようにして現在のレイ/プリミティブ交差が、レイ重みによって決定されることがあるように、レイの重要度にも基づいてシェードされるべきであるかを決定する際に、その情報を使用可能である。このような使用情報は、シェーダプロセスがこのような使用情報を適切な時点で取得できるように、APIまたは関数呼び出しの中で定式化されることができる。区別できるように、種々の実施可能性がレイトレーシングを適合させるために、フレーム内レンダリングの間でさせ存在する。いくつかのこのような実施は、シェードされているレイの集中管理により多く依拠する可能性があり、その他の実施は、使用情報をより広範に分配する可能性があり、より分散化された制御をもたらす。
汎用的な応用可能性の別の項目は、所定のレイ/プリミティブ交差に対するシェーディングアルゴリズム選択が、レイの重要度と、エルゴリズムによって実現された結果品質の指標に基づくことが可能である。時々、特定のアルゴリズムの結果の品質は、実行されるレイトレーシングのタイプに依存する可能性がある。例えば、このアルゴリズムの結果の品質は、実行されているレイトレーシングの中で関心のある出力に依存することがあるので、所定のシェーディングアルゴリズムはいずれも異なる環境では、結果の異なる「品質」を与えるように判断されることができる。したがって、このようなアルゴリズムは、使用に関する品質の範囲、または、品質のマッピングとさらに関連付けられる可能性がある。このようなアルゴリズムの格付けは、主観的品質評価対客観的品質評価にも関係することができる。
いくつかの実施例および態様では、レイと関連付けられた重みのようないくつかの値は、レイが放射されたサンプルと関連付けられた重みのような他の値と関係付けられている(または、世襲のカメラレイの場合、親レイからの関連付けられたサンプルの継承による)。このような数値関係は、例えば、レイ重みの合計がおよそサンプル重みの合計であり、または、このような関係は、本明細書中に記載されている態様を区別することなく、より複雑にすること、若しくは、より明白にすることが可能であるように、加法的である。さらに例に基づいて記載されたレイ重みに基づく適合に関係する実施例の開示内容は、付加的な子レイの選定若しくは親になること、または、レイの寄与度を精緻化するためにレイのためのピアを考慮している。これらの実施例は考慮されているレイの重みに重点を置いているが、本明細書中に開示されている態様は、あらゆる一般化された形態でレイ重みに基づく適応を包含しているので、特定のレイの重みはそのレイに関係した選定または他の処理のため特定の事例では考慮されないことがある。
図22は、複数のコンピュータ2210a〜2210nを含み、それらのサブセット、または、全部にハードウェアアクセラレータ910が装備されているレンダリングファーム2000を図示している。コンピュータ2210a〜2210nは、ルータ2225およびネットワーク・エリア・ストレージ(NAS)2215につながるスイッチ2220によってLANに接続されている。ルータ2225は、インターネット、インターネット、プライベートネットワーク、またはこれらの何らかの組み合わせでもよいネットワーク2226につながる。ネットワーク2226は、ストレージ・エリア・ネットワーク資源2230、および、同様にハードウェアアクセラレータ910が装備されているその他のコンピュータ2211a〜2211nへのアクセスを提供する。大量のレンダリングが必要である場合、このようなレンダリングファームは、複数の処理資源の間にレンダリングを分散させるため利用されることができる。図示されている各コンピュータは、レンダリングされるある程度の数のシーンが提供され、このようなレンダリングを高速化するためハードウェアアクセラレータ910を使用することになる。
本明細書および特許請求の範囲において、「ネットワーク」はコンピュータシステムおよび/またはモジュール間の電子データの転送を可能にする1若しくはそれ以上のデータリンクを含むことができる。情報がネットワークまたは別の通信接続(有線、無線、または、有線と無線との組み合わせ)を介してコンピュータへ転送または提供されるとき、コンピュータはコンピュータ読み取り可能な媒体としてその接続を使用する。よって、これに限定されるものではないが、一例として、コンピュータ読み取り可能な媒体は、コンピュータ実行可能な命令またはデータ構造の形式で所望のプログラムコード手段を搬送または格納するため使用可能であり、そして、汎用または専用コンピュータによるアクセスが可能であるネットワークまたはデータリンクをさらに含むことができる。
処理のいずれかは、ローカルまたはワイド・エリア・ネットワークのようなネットワーク上に分散させることが可能であり、そうでなければ、ピア・ツー・ピア・テクノロジなどを使用して実施されることもできる。タスクの分割は、製品若しくはシステムの所望の性能、所望の価格、または、これらの何らかの組み合わせに基づいて決定可能である。上記ユニットのいずれかを少なくとも部分的にソフトウェアで実施する実施形態では、単位機能を示すコンピュータ実行可能な命令は、例えば、磁気ディスク、光ディスク、フラッシュメモリ、USB装置、または、NAS若しくはSAS機器のようなネットワーク型のストレージ装置などのようなコンピュータ読み取り可能な媒体に格納可能である。処理のためのデータのような他の適当な情報もまたこのような媒体に格納可能である。
上記方法の態様および/または請求項に記載された方法の態様は、以下に詳述されるようにコンピュータハードウェアを含む専用または汎用コンピュータで実施されることがある。このようなハードウェア、ファームウェア、およびソフトウェアは、ビデオカードまたはその他の外部若しくは内部コンピュータシステム周辺機器に具現化することも可能である。種々の機能はカスタム化されたFPGA若しくはASIC、または、他の再構成可能なプロセッサの中に提供可能であるが、いくつかの機能はマネージメントまたはホストプロセッサの中に提供可能である。このような処理機能は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルな民生エレクトロニクス、ゲームコンソール、ネットワークPC、マイクロコンピュータ、メインフレームコンピュータ、携帯電話機、PDA、ページャなどで使用されることがある。
コンピュータ実行可能な命令は、例えば、汎用コンピュータ、専用コンピュータ、または、専用処理装置にある特定の関数または関数のグループを実行させるか、そうでなければ、再構成する命令およびデータを含む。コンピュータ実行可能な命令は、例えば、バイナリ、アセンブリ言語のような中間フォーマット命令、またはソースコードでもよい。いくつかの主題は構造的特徴および/または方法の工程の実施例に固有の言語で記載されているが、請求項に記載された主題は必ずしもこれらの記載された特徴または作用に限定されないことが理解されるべきである。それどころか、記載された特徴および工程は、請求項に記載された事項の範囲内でシステムおよび方法のコンポーネントの実施例として開示されている。