レイ トレーシングの先駆者が明かす、グローバル イルミネーションに巡り会うまでの経緯

投稿者: J. Turner Whitted

編集者: みなさんはレイ トレーシングのことを聞いたことがないかもしれませんが、見たことはあるはずです。このグラフィックス レンダリング技術は、現実世界での光の働きを模倣するもので、ほぼすべての近代映画において、特殊効果を織り込む手法として採用されています。NVIDIA では RTX リアルタイム レイトレーシング技術を通じて、この洗練された手法をより速く、より簡単に利用できるようにし、映画のような品質をゲームや製品デザインの分野でも実現可能にする取り組みを推進しています。今、NVIDIA では、この技術の先駆者の 1 人である J. Turner Whitted 氏が知る、レイ トレーシングの発展に関する数多くストーリーを共有したいと考えています。現在、NVIDIA Research に所属する Whitted 氏は、現代のレイ トレース法コンピューター グラフィックスの基礎を築いたと高く評価されている論文「An Improved Illumination Model for Shaded Display」の執筆者です。

レイ トレーシングとグローバル イルミネーション

みなさんの多くが高校の物理で習ったように、レイ トレーシングという考えは何世紀も前からありましたが、コンピューター グラフィックスのグローバル イルミネーションの歴史は、比較的浅いものです。

Henri Gouraud や Bui Tuong Phong らが提唱した初期のコンピューター グラフィックスのシェーディング モデルでは、光源と表面のある点との空間関係にもとづいて反射が計算されていました。その後、Jim Blinn は、表面の微細構造の相互反射を説明した Ken Torrance の論文を参考にして反射モデルを構築しました (後日、そのモデルは、Rob Cook と Ken Torrance 自身によって、広く普及した Cook-Torrance shading model へと発展しました)。さらにそのすぐあとに発表された Blinnと Martin Newell が発表した論文では、光源を周辺環境の 360 度テクスチャ マッピングに置き換えた環境マッピングについての記述が紹介されています。

私は、この環境マッピングの発展に興味を抱きました。光沢のあるティーポットのレンダリングとその表面に映されているドアと窓には、私が想像していた、コンピューターで生成されたイメージを凌駕するリアルさがありました。私はそのイメージを何時間も凝視し、これをさらに改良することは可能なのかと考えました。環境マッピングには、レンダリングされているオブジェクトの近くにあるオブジェクトの反射を正確にレンダリングできないという、大きな制限がありました。


Turner Whitted 氏の 1979 年のシーグラフ (SIGGRAPH) 向け論文に掲載されていたイメージ。ニュージャージー州ホルムデルにあるベル研究所の建物に似せた構造物で、Whitted はこの場所で論文を書き上げました。

Phong のモデルの効果は明らかに部分的なものであり、Torrance のモデルとその派生モデルはきわめて小規模なものです。Blinn と Newell のモデルをその大きさから「グローバル」と分類するのが自然であるように思われました。その結果、「グローバル イルミネーション」という用語が生まています。その当時は、環境マップの限界に左右されることなく、いかにそれを導入するかということが課題となっていました。

レイ トレーシングがグローバル イルミネーションの当然の選択肢だという理由

きわめてシンプルなレイ トレーシングは、コンピューター グラフィックスにグローバル イルミネーションを導入するため、当然の選択であるべきでした。イメージ生成のためのレイ キャスティングは、IBM の Arthur Appel が先がけとなり、MAGI の Robert Goldstein とその仲間たちによって商業化されていました。MAGI は当初、タンク内のラジエーションをトレースするために、マルチバウンスのレイ トレーシングを利用していました。キャリア初期の頃、私は海洋音響学に関わっており、海洋の深さを変えることで屈折し、表面から反射される音をレイ トレーシングしたダイアグラムがあったのを覚えています。最終的には、そのダイアグラムの記憶が私の脳裏に浮かび上がり、Blinn と Newell が始めたグローバル イルミネーションの手法を改良する方法がはっきりと閃いたのです。

私がレイ トレーシングの採用をためらったのは、性能についての懸念があったからです。リアルタイム インタラクション用のコンピューター グラフィックスと映画用のグラフィックスには、いつも少しばかり違いがあります。General Electric の月着陸シミュレーターは、宇宙飛行士を追うために、どうしてもリアルタイムで作動する必要がありました。この制約は、David Evans と Ivan Sutherland のフライト シミュレーターおよびユタ大学の関連調査でも課題となりました。Henri Gouraud のスムース シェーディングは、ほぼ費用なしで、リアルタイムで実現しました。Bui Tuong Phong の学位論文のなかのあまり知られていない章のなかには、リアルタイムシェーディングの回路構成についての記述もあります。もっとも、Phong のシェーディングはリアルタイムでは実現できませんでした。

コンピューター グラフィックスの世界を劇的に変えたのは、フレーム バッファの登場でした。フレーム バッファにより、CRT のリフレッシュ レートでイメージをレンダリングするのではなく、あらゆるスピードでレンダリングを行い、静的なイメージをスクリーン上で見ることが可能となりました。また、Ed Catmull のサブディビジョン アルゴリズムと Z バッファを組み合わせることにより、複雑な曲線を持つ表面を、ミリ秒とはいきませんが数分でフレーム メモリに任意にレンダリングすることが可能となりました。Blinn と Newell の環境マッピングの所要時間は、フレーム当たり数十分でした。より低いレートでよりリアルなものを作るという、この傾向は、より低いレートのものを試してやろうという勇気を私に与えてくれました。

シャドウ、屈折を加える

1978 年、ベル研究所のコンピューター システム リサーチ研究所に Digital Equipment の PDP-11/45 ミニコンピューターと 1 ピクセル当たり 9 ビットのフレーム バッファが置かれました。これらのリソースとプログラミング言語 C の組み合わせは、Blinn と Newell のスキームのレイ トレーシングを改良するための理想的な環境となりました (最初の C プログラムを書く前に、Brian Kernighan と Dennis Ritchie のプログラミング マニュアルをもっとよく読むべきでした。アセンブリ言語のプログラマーだった私は、C では再帰処理が可能であることを理解していなかったのです。その代わり、私は、わざわざ自身のスタックを構築し、言語自体に備わっている再帰処理を使わず、マルチバウンスの再帰的なレイ トレーシングプログラムを手作業で書きました)。

最終的には、相互反射する球体のイメージがスクリーン上に現れました。Newell も Frank Crow も、初期のイメージにチェッカーボードを入れていましたので、私もそれを真似る必要があると感じました。ここまでは問題なし。この時点で、光源までの追加のレイをトレースするのは、簡単でした。それによって現れるシャドウには少し時間がかかりましたが、追加のコーディングはさほどではなく、やってみるだけの価値はありました。

コーディングを少し代えることで、リスト化されていたレイがツリー化されるようになりました。コンピューター サイエンスのバックグラウンドのない電気技術者兼ハードウェア設計者にとってみれば、これは、これまで取り扱ったことのないデータ構造でした。にもかかわらず、これはうまくいきました。


1979 年、Whitted 氏がコンピュータで生成した、
相互に反射し合う球体の画期的なイメージにより、
グローバル イルミネーションにおける
レイ トレーシングの価値が明らかにされました。

そこで、もしそこまでできるのなら、さらに踏み込み、高校の物理で習ったような屈折を付け加えたらどうだろう、ということになったわけです。これはけっこう苦労しましたが、すばらしい成果が生まれました。

状況に応じたスーパーサンプリングという救済策

想像できるかもしれませんが、これらの積み重なった機能の実行時間は、とんでもないものとなりました。イメージごとのレンダリング時間を推定するために、私は解像度を 64 で割って 512×512 に減らし、時計で時間を測定しました。その時間に 64 をかけると、フル解像度のレンダリングの時間がある程度正確に推測できました。ただし、フル解像度では目に見えるジャギーを減らす必要があり、スーパーサンプリングがそのための唯一の現実的なアプローチでした。そのときには、推定レンダリング時間は、さらに 16 倍長くなり、まさにパニック状態となりました。

私は、シーグラフ会議に提出する論文のドラフトを書いており、その論文に含まれるイラストのレンダリングを行っていました。論文提出の期限は間近に迫っていましたが、16倍の時間がかかるスーパーサンプリングを採用したため、推定レンダリング時間は、提出期限を越えてしまいました。スーパーサンプリングを状況に応じて使うという、そのときに閃いたアイディアには、助けられました。必要な場合に追加のサンプルを加えるだけでよかったからです。この方法は数時間のうちに完了し、イラストをレンダリングしながら論文を編集し、この新しいアイデアを同論文に含めることができました。

数か月後のランチの席で、ベル研究所の幹部から、リアルタイムでレイ トレーシングができるようになるにはどれくらいの時間がかかるか、と訊ねられました。当時、私たちの新しい VAX-11/780 は、1 つの画面のピクセル当たりの計算時間が 60 分の 1 秒でしたので、私は、Cray スーパーコンピューターをずらりと並べ、ピクセルごとに1台を割り当て、それぞれの上に赤、緑、青の電球をつけることを提案しました。それは、冗談だと受け取られました。しかし、それは冗談ではなかったことがのちにわかったのです。

リアルタイムのレイ トレーシング

レイ トレーシングに関する、私の 1979 年の初期の論文では、複数のプロセッサでタスクを分担する方法についての記述があります。その後、レイ トレーシングの話のなかで、私は、「驚異的並列 (embarrassingly parallel)」という用語を耳にするようになりました。前述の初期論文のなかでも、球体が他の球体のなかに内包される場合の加速化構造のヒントが書かれていました。それから 2 年も経たないうちに、私は Steve Rubin とコンビを組み、階層的なバウンディング ボリュームについての彼のアイデアをレイ トレーシングに応用しようとしました。この試みはうまくいき、私たちは、チェッカーボードの上に浮かぶ球体よりも複雑なシーンをレンダリングできるようになりました。しかし、まだリアルタイムではありませんでした。


光と影: 窓のなかのこのボトルは、バウンディング ボリューム階層を使ったレイ トレーシングの加速を紹介した、1980 年のシーグラフ向け論文に掲載されました。

その後の数年間、私は授業用にわかりやすい 2 つのレイ トレーシング教材を執筆しましたが、基本的に私の関心は他のことに移っていました。しかし、他の研究者たちが、加速化手法で代役を務め、実用的ではなかったアルゴリズムを実用的なものに転換してくれました。そのときには、さらなる発展があり、イメージ品質は、球体とチェッカーボードの時代より大幅に進化していました。

このような進化を支えたのは、ムーアの法則の発展と並行処理の実用化でした。コンピューター グラフィックスのリップ バン ウィンクルのように、私はおよそ 40 年後に再び目を覚まし、リアルタイムのレイ トレーシングが当たり前のことになっているのを目撃したのです。一体、どうしたのだろう? 何人かのとても賢い人々がそのために懸命に努力をしたのはわかりました。