(※本記事は、2018年8月1日に、NVIDIA公式ブログに掲載されたJ.Turner Whitted氏の記事を許可を得て転載したものです)

みなさんはレイトレーシングのことを聞いたことがないかもしれませんが、見たことはあるはずです。このグラフィックスレンダリング技術は、現実世界でのの働きを模倣するもので、ほぼすべての近代映画において、特殊効果を織り込む手法として採用されています。

NVIDIAでは RTX リアルタイム レイトレーシング技術を通じて、この洗練された手法をより速く、より簡単に利用できるようにし、映画のような品質をゲームや製品デザインの分野でも実現可にする取り組みを推進しています(Mogura VRの参考記事はこちら)。

今、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度テクスチャ マッピングに置き換えた環境マッピングについての記述が紹介されています。

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


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

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

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

きわめてシンプルレイトレーシングは、コンピュータ グラフィックスにグロバルイルミネーションを導入するため、当然の選択であるべきでした。イメージ生成のためのレイキャスティングは、IBMArthur Appelが先がけとなり、MAGIのRobert Goldsteinとその仲間たちによって商業化されていました。

MAGIは当初、タンク内のラジエーションをトレースするために、マルチバウンスのレイトレーシングを利用していました。キャリア初期の頃、私は洋音学に関わっており、洋の深さを変えることで屈折し、表面から反射される音をレイトレーシングしたダイアグラムがあったのを覚えています。最終的には、そのダイアグラムの記憶が私の裏に浮かび上がり、BlinnとNewellが始めたグロバルイルミネーションの手法を良する方法がはっきりといたのです。

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

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

シャドウ、屈折を加える

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

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

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


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

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

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

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

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

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

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

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


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

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

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

(参考)NVIDIA Blog