コンピュータ グラフィックスでは、直接光と間接光の適切なバランスによって、シーンのフォトリアリズムが向上します。
夏のある日、湖にハイキングに出かけ、木陰に座って、太陽の下できらめく水面を眺める、そんな光景を想像してみてください。
この光景で言うところの光と影が、直接光と間接光の違いを表現した例です。
太陽が湖と木々を照らし、水面のきらめきや葉の鮮やかな緑が目に入ってきます。これが直接光です。木々は影を作るものの、太陽光は地面や他の木々に反射し、周囲の日陰に光を当てます。これが間接光です。
コンピュータ グラフィックスでフォトリアルな環境を再現するためには、光の振る舞いを正確にシミュレーションし、直接光と間接光の適切なバランスをとることが重要です。
直接光と間接光とは?
物体を照らす光を「直接光」と呼びます。
直接光は、物体の色や、光源から物体の表面に到達する光の量を決定する一方、反射や屈折が起こった後の光など、他の光源から表面に到達する可能性のある光はすべて無視されます。また、直接光は物体の表面自体によって吸収および反射される光の量も決定します。
表面ではね返り、他の物体を照らす光を「間接光」といいます。間接光は、光源以外のあらゆるものから表面に到達します。つまり、間接光は、表面に到達するその他すべての光の色と量を決定します。最も一般的な間接光は、ある表面から別の表面に反射される光です。
間接光は一般的に、直接光よりも計算が難しく、コストがかかる傾向があります。これは、発光体と物体を見る人の間に光の通り道が非常に多く存在するからです。
グローバル イルミネーションとは
グローバル イルミネーションは、シーン内の目に見える表面を照らすすべての光 (直接光と間接光の両方) の色と量を計算するプロセスです。
特に、ガラス、水、光沢のある金属といった複雑なマテリアルが存在するシーンや、雲、煙、霧など、いわゆるボリュメトリック メディアと呼ばれる要素に覆われているシーンでは、すべての種類の間接光を正確にシミュレートするのは非常に困難です。
その結果、グローバル イルミネーションのためのリアルタイム グラフィックス ソリューションは、一般に、拡散 (別名、マット) マテリアルを含む表面の間接光のサブセットの計算に限定されます。
直接光および間接光の計算方法
直接光の計算に使うことのできるアルゴリズムはたくさんありますが、そのすべてに長所と短所があります。たとえば、シーンに光源が 1 つあって影がない場合、直接光を計算するのは簡単ですが、あまりリアルではありません。一方、シーンに複数の光源がある場合、表面ごとにすべての光源を処理すると、コストが高くなる可能性があります。
こうした問題に対処するために、最適化されたアルゴリズムと、ディファード シェーディングやクラスタード シェーディングなどのシェーディング手法が開発されました。これらのアルゴリズムにより、計算すべき表面と光との相互作用の数を減らすことができます。
シャドウは、シャドウ マップ、ステンシル シャドウ ボリューム、レイ トレーシングなど、さまざまな手法で追加することができます。
シャドウ マッピングには 2 つのステップがあります。まず、シーンがライトの視点からシャドウ マップと呼ばれる特別なテクスチャにレンダリングされます。次に、そのシャドウ マップを用いて、画面上に見える表面がライトの視点からも見えるかどうかをテストします。シャドウ マップには多くの制限とアーチファクトがあり、シーン内のライトの数が増えるとたちまちコストがかかってしまいます。
ステンシル シャドウ ボリュームの基本は、シーンのジオメトリを光から遠ざけるように押し出し、そのジオメトリをステンシル バッファにレンダリングすることにあります。その後、ステンシル バッファの内容を使用して、画面上の特定の表面がシャドウであるかどうかを判断します。ステンシル シャドウは常に不自然なほど鮮明ですが、一般的なシャドウ マップの問題に見舞われることはありません。
NVIDIA RTX テクノロジが導入されるまで、レイ トレーシングはシャドウの計算に使用するには、コストがかかりすぎていました。レイ トレーシングは、光の物理的な振る舞いをシミュレートする、グラフィックスにおけるレンダリング手法です。画面上にある表面からライトまでの光線 (レイ) を追跡 (トレース) することで影の計算が可能になりますが、光が 1 点から来る場合は、この計算が難しいことがあります。また、シーン内に多数の光がある場合、レイトレース シャドウはたちまちコストが大きくなってしまいます。
複数のライトからのソフト シャドウを計算するために必要な光線の数を減らすために、さらに効率的なサンプリング方法が開発されました。その一つが ReSTIR と呼ばれるアルゴリズムで、レイトレーシングを使用してインタラクティブなフレームレートで、数百万のライトから直接光とシャドウを計算します。
パス トレーシングとは
間接光とグローバル イルミネーションには、さらに多くの手法が存在します。最もわかりやすいのがパス トレーシングと呼ばれる手法で、目に見える表面ごとにランダムな光のパスをシミュレーションします。これらのパスには、ライトに到達して完成シーンに影響を及ぼすものと、そうではないものがあります。
パス トレーシングは、マテリアルやライトの数学的モデルの精度に匹敵する、シーン内のライティングを完全に表現する結果を生成できる最も正確な方法です。パス トレーシングは、計算に非常にコストがかかる可能性があるものの、リアルタイム グラフィックスの「聖杯」とも称されています。
直接光と間接光はグラフィックスにどのように影響するか
直接光はリアリズムの基本的な外観を提供し、間接光はシーンをより豊かで自然に見せます。
多くのビデオ ゲームで採用されている間接光の手法の 1 つが、遍在するアンビエント ライトを使用することです。この種の光は一定である場合もあれば、格子状に配置されたライト プローブ上で空間的に変化する場合もあります。また、シーン内の静的オブジェクトを覆うテクスチャにレンダリングすることもできます。この手法を「ライト マップ」といいます。
多くの場合では、アンビエント ライトはアンビエント オクルージョンと呼ばれる表面周囲のジオメトリの作用によってシャドウが生成され、画像のリアリズムを向上させるのに役立ちます。
直接光、間接光、グローバル イルミネーションの例
直接光と間接光は、1990 年代以降、ほぼすべての 3D ゲームに何らかの形で存在しています。人気のタイトルでライティングがどのように実装されたかを示すマイルストーンを、以下に紹介します。
- 1993 年: 『Doom』は、直接光が初めて見られたタイトルの 1 つでした。このゲームでは光の強度をセクターごとに変えることができ、テクスチャの明暗を調整することや、薄暗い部分や明るい部分、またはちらつきのあるライトをシミュレーションするために使用されました。
- 1995 年: 『Quake』は、ゲームの各レベルで事前に計算されたライト マップを導入しました。このライト マップにより、アンビエント ライトの強度を調整できました。
- 1997 年: 『Quake II』ではライト マップに色が追加されたほか、投射物や爆発による動的なライティングも追加されました。
- 2001年: 『Silent Hill 2』では、ピクセル単位のライティングとシャドウ マッピングが導入されました。『Shrek』ではディファード ライティングとステンシル シャドウが使用されました。
- 2007年: 『Crysis』では、ピクセル深度を用いてライティングの変化を感じさせる、動的なスクリーンスペース アンビエント オクルージョンが見られました。
『Crysis』 (2007 年)。画像提供 MobyGames.com
- 2008年: 『Quake Wars: Ray Traced』は、レイトレース リフレクションを初めて使用したゲームのテクノロジ デモになりました。
- 2011年: 『Crysis 2』は、スクリーンスペース データを再利用してリフレクションを計算するためによく用いられる手法である、スクリーンスペース リフレクションを初めて採用したゲームになりました。
- 2016年: 『Rise of the Tomb Raider』は、ボクセルベースのアンビエント オクルージョンを使用した初のゲームになりました。
- 2018年: 『Battlefield V』は、商用の PC ゲームとして初めて、レイトレース リフレクションを使用したゲームになりました。
- 2019年: 『Q2VKPT』 はパス トレーシングを初めて実装したゲームとなり、後に『Quake II RTX』へと発展しました。
- 2020年: 『Minecraft with RTX』では RTX によるパス トレーシングが使用されました。
リアルタイム グラフィックスのライティングの次なる課題
リアルタイム グラフィックスは、シーンがますます複雑になる中で光をより完全にシミュレーションする方向に向かっています。
ReSTIR により、アーティストがゲームで複数のライティングを使用できる可能性は劇的に広がります。その新しいバージョンである ReSTIR GI は、同じアイデアをグローバル イルミネーションに適用し、より多くのバウンスと少ない誤差のパス トレーシングを可能にします。また、ノイズの少ない画像をより高速にレンダリングできます。さらに、パス トレーシングを高速化し、もっと使いやすくするために、新たに多くのアルゴリズムが開発されています。
レイ トレーシングでライティング効果の完全なシミュレーションを使用すると、レンダリング画像にノイズが含まれることがあります。そのノイズを除去すること (デノイズ) も、現在研究が活発化している分野です。
リアルタイムのフレームレートで動きが多く、複雑かつ非常に細かいシーンを採用しているゲームでライティングを効果的にデノイズするための、さらなるテクノロジの開発が進んでいます。この開発では、2 つの目的に向かって取り組みが進められています。つまり、ノイズの発生を抑える高度なサンプリング アルゴリズムと、より困難な状況にも対応できる高度なデノイザーです。
直接光および間接光に関する NVIDIA のソリューションから、今後も目が離せません。詳細は、ゲーム開発向け NVIDIA リソースにアクセスしてご覧ください。
グラフィックスの詳細について、NVIDIA at SIGGRAPH ‘22 をご覧ください。また、NVIDIA の CEO とシニア リーダーによる NVIDIA の特別講演で、最新のグラフィックスについての発表もご視聴ください。