NVIDIA特別イベント「GeForce Gaming Celebration」を振り返る
CG界の聖杯「リアルタイムレイトレーシング」に手をかけたGeForce RTX 20シリーズを理解する【前編】
2018年08月23日 06時00分更新
2018年8月20日18時(中央ヨーロッパ夏時間)、ドイツはケルンで開催されているゲーム展示会「Gamescom 2018」に合わせ、NVIDIAが特別イベント「GeForce Gaming Celebration」を開催、Pascalの後継となる最新アーキテクチャー「Turing」を採用した最新GPU「GeForce RTX 20シリーズ」として、「GeForce RTX 2070」及び「GeForce RTX 2080」、「GeForce RTX 2080 Ti」を発表した。
すでにGeForce RTX 20シリーズのスペックや価格に関しては、ジサトライッペイによる速報記事で十分カバーされているので、改めてここでは触れない。また、詳細なアーキテクチャーやマルチGPU、熱設計といったテクニカルな情報については、後日別記事で詳しくカバーする予定だ。
今回の発表はおよそ1時間40分をかけた大長編だったが、前半は8月14日にカナダで開催された「SIGGRAPH 2018」の内容の繰り返し(ジョークもほぼ共通)。そして、後半が新しいGeForceのためのものだった。今回はGeForce RTX 20シリーズの誕生した背景と実ゲームにおける対応などを解説したい。
CGにおける2つの表現方法、ラスタライズとレイトレース
コンピューターグラフィックスはざっくり2通りの表現方法がある。1つめは我々が普段PCゲームなどでお目にかかっている「ラスタライズ」法によるもの、そしてもう1つが「レイトレース」法(レイトレーシング)によるものだ。
どちらの技法でもポリゴンで構成されたオブジェクトをシーンに配置し、質感や光源を設定。シーン中の仮想的カメラから見た映像を、PCが必死に計算した結果がディスプレー上に表示される。ただ“どのように計算するか”が異なる。
ラスタライズ法というのは、大雑把に言えば「計算量を端折ってもそれっぽく見せる」ためのテクニックだ。オブジェクトを構成するポリゴンすべてを計算するのではなく、不要なポリゴンの処理は端折ることで負荷を減らすのである。
単純にカメラの視界(もう少し専門的に言えば「視錐台」と呼ばれる領域)に入っていないポリゴン情報を削除する。あるいは、カメラから見えない側のポリゴンを無視する技法もあれば、ポリゴンの前後関係(Z値)を見て、あるポリゴンの背後にまわったポリゴンはすべて省略する技法まで様々なものがある。
こうしてポリゴンを省略したのち、今度はポリゴンごとにどんな色にするのか、テクスチャーや照明の効果を加味しながら計算し、それを画面上のドットに反映させるというわけだ。以下にマイクロソフトのレイトレーシング解説記事から、わかりやすい図を抜粋して紹介しよう。
こうしたラスタライズ法で作られたイメージは、いくらリアルリアルと連呼しても所詮は「それっぽいもの」だ。20年前のゲームも今のゲームも、それっぽさの度合いが違うだけで、基本となる技術は変わらない。GPUとDirectXの発展によって可能な表現が増え、さらに技法そのものも進化した結果、現在のPCゲームのグラフィックはフォトリアルに近い出来になってきている。
だが、ラスタライズ法には大きな欠点がある。それはカメラの範囲にないオブジェクトや光源の影響を考慮することができないことや、正確な影の表現だ。例えば、カメラの背後にある樹木が、カメラに映らない光源(例えば太陽)の影響で地面に柔らかい影を落とすようなシーンをリアルタイムで表現したシーンを考えてみよう。ラスタライズ法でこれを行なうのは非常に難しい。
読者の中には「〇〇というゲームでそんなシーンを見たぞ?」という人もいるだろう。ラスタライズ法でもカメラ外に置かれたオブジェクトの影響を処理する技法は確かに存在する。ただこれらの技法を使う場合は、それ用の処理(シェーダー)を回す必要がある。ラスタライズ法は処理を端折るための技術なのに、その限界を突破するには正反対の作業をする必要があるのだ。
そこで登場するのがレイトレース法だ。レイトレース法はシーンの描画に際し、光を物理として扱う。カメラからレイ(光)を飛ばし、なにかに衝突したらそこでどんな風に見せればよいのかを計算する。レイが衝突した地点から別のオブジェクトにレイを投げれば、物体の反射なども処理できる。光の動きを計算して描画するので、カメラの範囲外にあるオブジェクトの影響もちゃんと考慮される。
光の反射もレイトレース法の得意とするところだ。例えば、水たまりに周囲の風景が写り込んでいる「現実の」風景を考えてみよう。今のゲーム(ラスタライズ法)でもこれに近い表現はできるが、水たまりの近くを通るキャラクターを正確に描写することはできない。
ラスタライズ法では事前に周辺の環境データをもとに計算しておいたテクスチャーを水たまりに貼っておくだけ。これでかなりそれっぽく見えるが、リアルタイムで動くキャラクターの場合、そうはいかない。ここではたまたま水面の例を挙げたが、ツヤツヤな車のボディーやショーウインドーに映り込む映像も同じことだ。
だがレイトレース法なら、レイの動きをシミュレートするため(レイの反射は何回まで追跡、などという計算量を抑える仕掛けはある)、水たまりの近くをキャラクターが歩けば、その状態がそのまま水面に映り込む。レイの動きを考慮するため、カメラの視界外で起こった爆発の光も映り込む。
水は水らしく、金属は金属らしく、よりリアルに描画するのがレイトレース法だが、同時にラスタライズ法で苦心して表現していたことを「レイの計算」に置換することも可能なのだ。
もっとわかりやすい例をひとつ出そう。オークションに出品された品物の写真をよく見たら、パンイチ親父が映り込んでいて騒然、という話が時々ある。もしこの世がラスタライズ法で見えていたら、カメラのうしろにいるパンイチ親父はレンダリング最初の段階において、処理する必要のないデータとして捨てられるため映り込まない。
だが現実はレイトレース法と同じく、パンイチ親父の皮膚で反射した光の一部は、出品する商品の表面にあたり、さらにその一部がカメラに飛び込んでくる。出品する品物の上にパンイチ親父が映り込んでしまう理由はこれだ。
つまり、NVIDIAはパンイチ親父を作り出そうとしている……のではなく、光の物理現象が生み出すリアルなシーンをPCゲームに取り込もうというのだ。これまでレイトレース法でCGを生成するには、超高額なワークステーション(後述するDGXステーション)をフル稼働させてなんとか生成してきた。だがTuringを使えばそれがリアルタイムで、かつ一般的なPCでできるという。まさにNVIDIAはこれまでのCG研究者が夢見ていた「リアルタイムレイトレーシング」という聖杯に手をかけたのだ。