このトークでは、簡単な光線追跡をSwiftを使ってゼロから作る際に直面する障害についてお話します。光線追跡法は、アニメーションフィルム産業を席巻する、Pixarのあの悪名高いRendermanの3Dレンダリング技術の基礎となっています。これは、光線の物理モデルと、オブジェクトと表面の相互作用によるものです。
昨今では、NVIDIAのRTXのような、より強力で特化したハードウェアによって、リアルタイムでの光線追跡の分野には新たな関心が寄せられています。 著名なプログラマーであるJohn Carmackさえ、コンピューターグラフィックと光線追跡の未来について尋ねられた際、「全ての道はローマに続く」と述べています。
私は、伝統的なグラフィックラスタライザーに取り組むのを楽しむ一方で、いつも、物理的にモデリングされた光に興味を持ち、それにまつわるプロセスについて学びたいと思ってきました。
ここでは、私がどのようにシンプルな場面を描画する光線追跡をプログラムしたかについて話します。これは、多芸なSwiftを試すのにいい機会となるでしょう。
20分のプレゼンの中で答えていきます。質問があればZOZOブースへ来てください。
まずは動画を見てください
これはピクサーアニメーションで使われた技術と同じものを使っています。
レンダリングテクニック、ray tracingを使っています。
なぜSwiftでやるのか?
今までやったことがないことをやりたかった。
基本言語としてどうなのか、いちからray tracerを作りました。
根本的な数式とSwiftで書くとどうなるか
いつ光線が交差するか、シーンに何千も光線を投げるので、どれが球体にヒットするかを計算する
球体表面をヒットするtを求める
これを2時方程式にしていくことが出来る
放射線状を交差するときに解がでてくる
1,2,もしくは0
Swiftで見ていくと
判別式を使ってみていく、どれだけの解があるかを表す。
distance checkで3D空間での交差点を見つける
興味があればGithubをチェックしてください。数学的にわからなくても心配しないでください。自分の領域を知るために時間を費やすことは貴重です。もっと話したければZOZOブースに来てください。