Raytracing Quiz

レイトレ合宿3!!!アドベントカレンダー第一回目の記事です。


こんにちは!レイ、飛ばしてますか?

第一週なので準備運動として、 レイトレ初心者に向けたレイトレクイズ を用意しました。
※問題は今年のレイトレ合宿参加者に正真正銘の初学者がいなくなってしまったこと…

わかったつもりで、その実よくわかっていないことが後で判明することがよくあるのがレイトレです。わかってる風の人が実は1980年代のレイトレの話をしているということもよくあるのがレイトレです。ちなみに今年は2015年だそうです。

ほとんどが私が過去に疑問に思った事柄のトレースなので偏りはあると思いますが、最初に疑問に思うことは人によってそれほど幅はないと思います。わからないこと、よく理解していないことはどんどん調べましょう。答えをよく理解していない問題も結構あります。教えて偉い人。

基本

  1. 輝度、照度、光束、光度ってなに?関係性は?(英語では何と呼ぶ?)
  2. レイってなに?単位は何?結局レイを飛ばして何をしてるの?
  3. 「ピクセルの色」って単位は何?
  4. 「ピクセルの色」ってどう計算されるべきなの?
    ピクセルの四角の中心の色でいいの?ピクセルの四角の中の平均でいいの?
    そもそも四角の中で計算を完結させる根拠はあるの?
  5. Turner Whittedってだれ?Jim Kajiyaってだれ?Eric Veachってだれ?
  6. レンダリング方程式ってなに?
    「ぼくのかんがえたさいきょうのレンダリング方程式」みたいなのはありえるの?
  7. GIってなに?
  8. Whittedと呼ばれるレイトレーサーってGIって呼んでいいの?
  9. GIって結果に幅があるのはありえるの?
    「ぼくのかんがえたさいきょうのGI」みたいなのはありえるの?
  10. なんで同じレンダリング方程式を解いているのに、結果が違うの?違うように見えるだけ?
  11. BRDF,BTDF,BSDFってなに?
  12. cos項ってなに?どこからきたの?なんで重要なの?

交差

  1. たいていのレイトレーサーで一番処理時間が取られるのはどこ?そしてそれはなぜ?
  2. ポリゴンがあるシーンは計算量がO(ポリゴン数xレイ数)とかになりそうな気がするんだけど、そんな大量の計算どうやってるの?
  3. 三角形とレイの交差判定ってどうやるの?どんな種類があるの?どんな違いがあるの?
  4. レイが交差したところから再度レイを発生するときの自己遮蔽はどうやって防ぐの?どんな種類があるの?どんな違いがあるの?
  5. 自己遮蔽を防ぐための「浮かし」度合いってどうやって決めるの?解析的に決める事はできるの?
  6. AABBとレイの交差判定ってどうやるの?どんな種類があるの?どんな違いがあるの?
  7. BVHってなに?なんでそんなに亜種の種類があるの?なんで躍起になって皆取り組んでいるの?
  8. SAHってなに?なんでそんなことをしないといけないの?
  9. アニメーションするメッシュのBVHって毎回再構築する必要があるの?
  10. Octreeってなに?BVHとの違いはなに?
  11. kd-treeってなに?なにに使うの?
  12. Subdivision surfaceってなに?なんでそんなにどんどん分割するのに躊躇しないの?
  13. BVHがバグってて遅い気がする。どうやってデバッグすればいいの?
  14. 曲面に対して交差判定を行うにはどうすればいいの?
  15. バンプマップとかレイがサーフェイスの下をめり込んでしまう場合がありえそうだけどどうしたらいいの?

統計・数学

  1. モンテカルロ積分ってなに?
  2. スティルチェス積分ってなに?
  3. ノイマン級数ってなに?
  4. ヤコビアンってなに?どこで使うの?
  5. 一致性、不偏性ってなに?なんでそんなにこだわってるの?
  6. 分散ってなに?なんでそんなにこだわってるの?
  7. E(X),V(X),D(X),Cov(X)って何?関係性は?
  8. そもそもなんでサンプルを沢山取れば取るほど、真値に収束するの?
  9. CLTってなに?なんで重要なの?
  10. チェビシェフの不等式ってなに?CLTとの違いは?
  11. 測度ってなに?
  12. PDF,CDF,PMFってなに?
  13. 任意の確率分布に従う乱数を生成するにはどうしたらいいの?どういう方法があるの?どういう違いがあるの?
  14. 棄却法ってなに?どういうときに使うの?
  15. コンピューターで行う以上レイを飛ばす回数は有限回にしないといけないだろうけど、現実世界ではそうはなっていない気がするんだけど数学的にはどうやってそれを解決してるの?
  16. ロシアンルーレットってなに?
  17. ルーレット確率ってどういう風に決めるといいの?上げ下げすると推定量はどうかわるの?計算量はどう変わるの?
  18. スプリッティング(Splitting)ってなに?なんでそれをしても問題ないの?
  19. 円の中に分布する乱数は厳密に一様分布する変換よりも、一様性が少し崩れているConcentricMappingの方が有用なのはなぜ?
  20. 通常、1時間掛けてレイトレをやった結果と、2時間掛けてレイトレをやった結果のノイズはどの程度違うの?法則性があるならその法則を超えることはできるの?
  21. なんで物体表面で毎回レイを増やす方法(分散レイトレ)はメジャーじゃないの?
    なんでそれをせずに毎回1サンプルで問題ないの?
  22. 小さな光源のみのシーンの収束が凄く遅い気がする。なんでそうなるの?どうすればいいの?
  23. 針の穴を通すような位置にある光源はレイが滅多に届かなそうだけどどうやってまともに扱うの?
  24. 重点サンプリングってなに?なんでそんなに重要なの?
  25. 制御変量法って何?
  26. レイの方向を恣意的に決めると推定の結果が数学的におかしくなる気がするんだけどどうするの?
  27. MISって何?
  28. MISのウェイト戦略が色々あるのはなぜ?なにが違うの?
  29. フォトンマッピングが、一致性を満たすのはどういうとき?それは実際あり得るの?
  30. パストレとフォトンマッピングのノイズの出方が違うのなぜ?
  31. 何千万ピクセルもある環境マップを全て舐めて「積分」するのどう考えても非効率なんだけどどうするの?
  32. Heckbertの表記法ってなに?
  33. SDSパスってなに?なんでそんなに重要なの?
  34. L(S|D)+LEのように光源に一度戻るようなパスを考慮していないような実装が多いけれども問題はないの?
  35. メトロポリスヘイスティング法ってなに?どういうときに使うの?
  36. 変異戦略がいろいろあるのはなぜ?どういう根拠で作るの?
  37. 低食い違い量列ってなに?どういう種類があるの?どういう違いがあるの?

光学

  1. 幾何光学と、波動光学ってなに?
  2. 回折ってなに?
  3. 屈折ってなに?
  4. 収差ってなに?
  5. 偏光ってなに?
  6. 複屈折ってなに?
  7. 完全拡散面ってなに?
  8. 完全鏡面ってなに?実際ありえるの?
  9. D項、F項、G項ってなに?どんな種類があるの?どんなことを仮定しているの?
  10. ヘルムホルツ・ラグランジュの不変量ってなに?
  11. プールの中から見上げたら、プールの上の景色はどうみえる?輝度はどうなるの?そしてそれはなぜ?
  12. DoFってなに?なんで発生するの?
  13. CoCのサイズは距離に関してどのような関数形になるの?
  14. 絞り値ってなに?絞り値を変えるとCoCはどうなるの?そしてそれはなぜ?
  15. 画角はどのようにして決まるの?
  16. レンズフレアってなに?なんで発生するの?
  17. スネルの法則ってなに?なんでそんなことが起こるの?
  18. なんでレイトレは波動光学をあまり考えなくていいの?どういうときに考えないといけないの?
  19. 色温度ってなに?相対色温度ってなに?なんでそんなものが存在するの?
  20. XYZ色空間、UV色空間ってなに?なんでそんなものが存在するの?
  21. 本来は連続関数で表されるスペクトルを三次元のRGBで扱って、なんで大丈夫なの?
    ほんとうに大丈夫なの?
  22. 本来は連続関数で表されるスペクトルを一次元の色温度で扱っても大丈夫な場合があるのはなぜ?
  23. 光をスペクトルで表した場合の利点はなに?
  24. そもそも連続関数で表されるスペクトルをどうやってコンピューター上で表現するの?
  25. ピンホールカメラモデルってなに?何を仮定しているの?
  26. 薄レンズモデルってなに?何ができるの?何を仮定しているの?
  27. IORってなに?アッべ数ってなに?吸収係数ってなに?
  28. ビネットってなに?なんで起こるの?cos4乗則ってなに?
  29. 実像と虚像の違いってなに?
  30. 色収差ってなに?なんでおこるの?どうやって防ぐの?
  31. ザイデルの5収差ってなに?なんで起こるの?
  32. 色消しレンズってなに?
  33. イメージプレーンってなに?現実世界での撮像素子との違いはなに?
  34. 露出と言う概念があるレイトレーサーとないレイトレーサーでは、なにが違うの?

その他

  1. PBRTのRってなに?(よくある間違い:Rendering)
  2. アナモルフィックレンズフレアが大好きな映画監督と言えば誰?
  3. (近視の人限定)裸眼の状態で目の前に、指で小さな輪を作って除くと遠くが見えるようになるけどなぜ?([答え]()) https://www.google.co.jp/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&q=hancecci&oq=hancecci&aqs=chrome..69i57.2757j0j7から探す
  4. 最近のアニメでよく使われているレイトレ的効果を思いつく限り上げてください。

結び

これらに対して一通り答えが出せるなら、
「なんかレイを適当に反射させればいいんだな。お、なんか鏡っぽくなったしw」
「なんかレイを沢山飛ばせばいいんだな、GPGPUとかクラウドレンダリングとかしよう!!」
みたいな発言が石器時代の人のものに見えるのかもしれません。

今年のレイトレ合宿は、本当の初心者がいなくなってしまったので、参加者にはあまり有用ではないかもしれませんが、実装する上での(精神的な)Tipsをまとめます。自戒を込めて。

  1. 正確な結果か検証できる状態を保とう
  2. 単体テストを書けるものは書こう。
  3. 解析解が存在するものを単体テストに利用しよう。
  4. 参照するレンダラーがあるならそれと見比べよう。
  5. assertを置けるところは置こう。
  6. グランドトゥルースを用意できるものは用意しておこう。
  7. 一気にやるのではなく、小さく積み上げよう。

  8. 安易にプラクティカルに走るのはやめよう

  9. 安易にスケールパラメーターやオフセットパラメーターを導入するのはやめよう。
    やるとしても、「何を誤魔化しているのか」をしっかり説明できる範囲に抑えよう。

  10. 入門書であるPBR本がなぜ1000ページもあるのか考えよう。

  11. レイトレは、とてつもなく巨大な分野。巨人の肩の上に立とう

  12. レイトレは特殊なハードウェアやAPIの上で実現するものではなく、脳内にあるものの転写だけでも動きます。高いハードや高級な機能だけではなく、レイトレへの理解度がレイトレーサーの性能に影響を与えます。ハードの違いで100倍早くなることはあまりなくても、アルゴリズムの違いで100万倍収束が早くなることは有り得るので、正確に理解するように努めよう。

おまけ

私がツイッター検索からノイズを取り除いたレイトレ情報を得るときに使っている検索文字列を大公開します。