#はじめに
この記事ではSIGGRAPHのレイトレーシング講座であるIntroduction to Ray Traicingの内容や、実際にやってみて気づいたことを紹介しています。
レイトレーシングを学習し始めようという人、もしくはすでにしている人の一助となれば幸いです。拙い部分が多々あるとは思いますがご容赦ください。
#目次
#概要
レイトレーシングの基礎を学べる講座で、スライド形式の資料と動画があります。
リンク↓↓
スライド資料
動画(Youtubeのリスト)
内容としてはタイトル通り入門編といった感じで、レイトレーシングの基礎を1から説明してくれます。ただし**全部英語(日本語版無し)**です。資料はともかく動画は字幕無いと厳しいかもしれない。あとある程度プログラミングや数学の知識は必要です。
一方、回によってはサンプルプログラムも配布されてて、資料と照らし合わせれば十分学べるような構成にもなっていますので、英語苦手でもおそらく大丈夫です(かくいう筆者も英語は苦手…)。
#内容
全7回で、ざっくりと
- レイトレーシングの概要
- 球の描画
- 球の描画+(色の)明るさ+テクスチャマッピング
- マテリアル(ランバート反射・スペキュラー反射)
- マテリアル+PDF
- マテリアル+PDF
- 影+ライト+等々
というような構成になっています。Class3のテクスチャマッピング等ほんの少ししか触れられていない内容もありますのでご注意ください。
ここでPDFはもちろん文書のフォーマットではなく確率密度関数を意味していて、大体レイトレだと反射したレイが各方向にどのくらいの確率で向かうかの分布だと思っています(違ってたらすみません)。
また、これはこの教材に限った話ではないと思いますが、初見かつ英語だと調べてもあまり出てこなかったりしてめんどくさい数学表現がいくつかありますので以下に少しだけ記載します。
- dot(A . B) = AとBの内積
- where = ここで、
- PDF = 確率密度関数
- normal = 法線
ちなみに第五回ともなると結構きれいな画像を作るだけの知識が得られます。例としてサンプルプログラムを実行したものを以下に載せます。
サンプルプログラムいじって遊ぶだけでも楽しいです。
#使用言語・動作環境
使用言語はGLSL(シェーダー用の言語)で、ShaderToyというWebサイト上で動かすことを前提としています(アカウント登録が必要)。
配布されているサンプルプログラム(スライド資料にリンクが記載)もShadertoy上にあります。
##ShaderToyの注意点
ShaderToyでは一度の処理ですべてのピクセルを描画します。なのでmain関数(ShaderToyではmainImage関数)でwidth*heightのようなfor文を書く必要はありません(最初ひっかかった)。
このようなShaderToyの基礎知識や使い方に関してはこちらのサイトが参考になりました。
次に、ShaderToyはweb上で直接コーディング&実行出来て非常に便利なんですが、わりと重かったりします。加えてサイト自体が異様に重くなって何もしてないのにコーディングすらままならなくなったこともあります(原因不明、おま環?)。
なのでコーディングのしやすさ等も鑑みて、VScodeを使っている人はVScode上でShaderToyを動作させるといいかもしれません。以下に詳細を書きます。
###VScodeでShaderToy
-
何かコードを書きます(サンプルプログラム)。GLSLの拡張子は特に決まってない?らしいですが、ここでは.vsとしています。
-
コード書いたファイルを開いた状態でF1を押すと、一番上に「Shader Toy: Show GLSL Preview」と出てくるのでEnterを押すと右側にプレビューウィンドウが出てきます。以上です。
#さらなる高みへ
この資料をある程度修了したら、有名ですが週末レイトレーシングをやるのがおすすめです(学生版は無料!)。全体はまあまあ長いのですが、こちらは日本語版があるので意外とサクサクいけるかもしれません。
使用言語がC++なので使ったことない人はまずそこからになってしまうかもしれませんが、長いだけあって説明も丁寧なので今回の資料では物足りない人やしっかり復習したい人は是非やってみてください。
注意点として、しばしばプログラムに誤植があるのでエラーが出たときは資料記載の本人のコードを参照しつつコーディングすると良いかもしれません。
#おわりに
筆者自身レイトレーシングに特別詳しいわけでもない上初投稿なので、何か気になる点および間違っている点がありましたらコメントにて教えていただけると幸いです。
最後まで読んでいただきありがとうございました。