現代のほとんどすべてのゲームで新しいフレームが「一から」レンダリングされています。つまり、(テンポラル アンチエイリアシングを使用しない限り) そのフレームの前に行われた計算が使用されることはありません。しかしながら、ほとんどのゲームでは、現実世界と同じように、フレーム間の変化は比較的少ないものです。窓の外を見ると、風に吹かれている木、通り過ぎる歩行者、遠くの空を飛ぶ鳥が見えるかもしれません。その光景の大半は、しかしながら、「静的」です。つまり、変化がないものです。変化の中心にあるのは、あなたの視点です。
あなたが視点を変えると、いくつかの物体は外見を変えるでしょう。光沢のあるものでそれは顕著です。しかしながら、実際には、あなたが頭を動かしてもほとんどの物体は外見をほとんど変えません。そのため、そのような物体を構成するまったく同じ色をフレームごとに再計算するために貴重な GPU サイクルを使うのはもったいないことです。そのような物体は低いレートで (たとえば、3 フレームごとやそれ以下のレートで) シェーディングし、前に計算された物体の色 (これは「テキスト」とも呼ばれています) を再利用する方法がはるかに効率的です。この作業を再利用するという考えは、レイ トレーシングで、特にグローバル イルミネーションで重要になります。グローバル イルミネーションは、変化が遅く、シェーディング計算が非常に不経済となる典型的な例です。
この手法は「テクスチャ スペース シェーディング」と呼ばれています。この手法では、計算は画面空間のフレーム間で (すなわち、ゲーマーの視点から) 実行されず、テクスチャ空間において異なるシェーディング レートで (実質的に、オブジェクト自体の視点から) 実行されます。テクスチャ スペースとは何か。 最近のゲームではすべてのオブジェクトにテクスチャがあり、テクスチャはゲーマーの視点に依存しません。シェーディングしたオブジェクトの色を格納する格好の場所となり、フレーム間で「渡されます」。
この同じ手法を VR にも効果的に応用できます。人間の両目はそれほど互いから離れておらず、片目で見る物体の大半はもう 1 つの目にも映っています。大きな違いはそうしたオブジェクトのシェーディング (机の上の鉛筆が左の目にも右の目にも同じ黄色に見えるなど) ではなく、オブジェクトの方向性にあります。そのため、テクスチャ スペース シェーディングでは、片方の目からシェーディング計算を「借り」、もう一方の目でそれを利用することで実質的にシェーディングの負荷を半分にします。また、ゲームのピクセル シェーディングによりパフォーマンスが制限される場合、理論的には、テクスチャ スペース シェーディングでフレームレートを 2 倍にできます。
テクスチャ スペース シェーディングを利用すると、ゲーム エンジンでは、ラスタライゼーションされたすべてのピクセルをすぐにシェーディングすることはありません。そうではなく、ラスター化したピクセルにより参照されているテクセルが最初に特定されます。この動作は、所与のテクスチュアリングに必要なテクセルをテクスチャ ユニットが見つけるときに行う動作によく似ています。この一連のテクセルがシェーディングのための待ち行列に入り、後の時点でシェーディングが行われます。この過程の間、同じテクセルが複数のピクセルによって参照されることがありますが、効率性のために、NVIDIA はもちろん、テクセルの冗長的なシェーディングは望みません。そのため、ゲーム エンジンでは、シェーディング要求の重複除去と呼ばれている作業が実行され、重複ではないテクセル参照が分離され、各テクセルが 1 回だけシェーディングされるように手配されます。
一連の重複ではないテクセル参照が特定されると、ゲームはそれらのテクセルをシェーディングし、後で再利用するために対応するテクスチャに結果を格納します。これはピクセル シェーディングに似ていますが、画面上のピクセルではなく、テクスチャ内のテクセルがシェーディングされるという点が異なります。
最後になりますが、計算されたテクセルを利用し、静的テクスチャが利用される現行の方法とまったく同じ方法で、該当するピクセルの色を計算できます。テクスチュアリングが 1 回実行されるだけなので、この手順は極めて安上がりとなります。
表示される一連のテクセルを見つけ、重複ではないテクセルを分離する過程は、非経済的な計算プロセスです。そのような理由から、以前はテクスチャ スペース シェーディングを応用できませんでした。Turing アーキテクチャでは、この重要な手順にハードウェア加速を導入することでこの問題に対処しています。Turing のテクスチャ ユニットはシェーダーにテクセル アドレス情報を直接提供できるようになりました。新しいデータ並列イントリンシックはプロセスの重複除去手順を非常に効率的にします。
テクスチャ スペース シェーディングは非常に簡単で論理的に思われますが、いくつかの「不具合」があり、主流になれない理由となっています。
まず第一に、最近のゲームでは、テクスチャも含め、たくさんのオブジェクトが再利用されます。ゲーム内の森を見ると、一枚一枚の葉に独自のテクスチャが与えられていることはほぼありません。ほとんどの場合、葉はすべて、葉のモデル/テクスチャの小さな集合から取得されます。そのようなオブジェクトはテクスチャ スペース シェーディング向きではありません。目に見える物体にはすべて、独自のテクスチャを与える必要があるためです。共有は許可されません。これを強制しなかった場合を想像してください。1 本の木のすべての葉が引き続き同じ葉テクスチャを共有しました。次にあなたが自分の手でその 1 つを影の中に置きます。すると、木の葉がすべて、同時に影の中に入るでしょう。開発者が最初に対処しなければならないことがこれです。他のすべてのオブジェクトに依存せずシェーディングできるように、すべてのオブジェクトに独自のテクスチャを与えます。
テクスチャ スペース シェーディングではそのため、ゲーム エンジンの構築方法についてかなり大がかりな再考が必要となります。しかしながらそれが終われば、可能性は無限です。レイ トレーシングとラスタライゼーションの両方の長所に基づいて写真のようなリアルな画像を高フレームレートで妥協なく生成する、まったく新しいレンダリング方法への扉が開かれます。Turing アーキテクチャはテクスチャ スペース シェーディングをハードウェアでサポートし、このようなハイブリッドの手法がようやく実用化されます。