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


テック 2018.08.12

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

(※本記事は、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のモデルをその大きさから「グローバル」と分類するのが自然であるように思われました。その結果、「グローバルイルミネーション」という用語が生まています。その当時は、環境マップの限界に左右されることなく、いかにそれを導入するかということが課題となっていました。

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

きわめてシンプルなレイトレーシングは、コンピュータ グラフィックスにグローバルイルミネーションを導入するため、当然の選択であるべきでした。イメージ生成のためのレイキャスティングは、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年後に再び目を覚まし、リアルタイムのレイトレーシングが当たり前のことになっているのを目撃したのです。一体、どうしたのだろう? 何人かのとても賢い人々がそのために懸命に努力をしたのはわかりました。

(参考)NVIDIA Blog


VR/AR/VTuber専門メディア「Mogura」が今注目するキーワード