Upgrade to Pro — share decks privately, control downloads, hide ads and more …

軽率にレイトレする

 軽率にレイトレする

第31回学生LTにて登壇する予定の資料

にー兄さん

November 08, 2019
Tweet

More Decks by にー兄さん

Other Decks in Programming

Transcript

  1. 軽率にレイトレする
    にー兄さん@第31回学生LT

    View full-size slide

  2. 写真・SNSへの投稿OKです

    View full-size slide

  3. Today’s Agenda
    自己紹介
    レイトレとは?
    レイトレの理論
    レイトレの愉しみ

    View full-size slide

  4. 自己紹介
    にー兄さん(@ninisan_drumath)
    ・筑波大学情報科学類(coins)2年
    ・普段はxR開発やモーションキャプチャ開発をしている
    ・最近は言語自作とかシェーダとか勉強したい(しろ)
    ・VTuberオタク
    ・学生LTは登壇3回目
    ・今回のテーマは一回話したことがある...(前よりも詳しく頑張ったつもり)

    View full-size slide

  5. にー兄さん(@ninisan_drumath)
    自己紹介

    View full-size slide

  6. !!注意!! この資料は初心者が作ったものです!!
    誤植等あるかもしれませんがご了承ください...。マサカリも研がないで...。

    View full-size slide

  7. レイトレとは?

    View full-size slide

  8. レイトレ入門
    レイトレーシングの略。光線追跡法。
    一般に、仮想的なレイ(光線)を発射してその
    挙動を追跡することで3DCGなどのシーンを
    レンダリングする手法の事
    ● レイマーチング(スフィアトレーシング)
    ● 古典的レイトレーシング
    ● (双方向)パストレーシング

    View full-size slide

  9. ゲームへの応用
    ● レイトレーシングに最適化されたグラフィックボード
    「RTX」シリーズがリリース
    ● Minecraftがレイトレ対応を発表
    ● ゲームエンジン(UnityやUE4)が
    レイトレ用のレンダリングパイプラインを実装

    View full-size slide

  10. レイトレの理論

    View full-size slide

  11. 古典的レイトレーシングのアルゴリズム
    for each pixels
    ray = ray from uv
    color = trace(ray)
    trace(ray)
    for each object in scene
    if ray intersects an object
    if the object is nearest in the scene
    return color(ray, object)
    color(ray, object)
    if shadow ray intersects light
    L = BRDF * (normal,ray) * (phi/r^2)
    if material is specular
    L+=trace(new ray)
    return L

    View full-size slide

  12. 理論はワカランけど 最小構成でレイトレしたい
    すべての物体の材質はランバート面
    いいね?ポリゴンなんてものは知らない。世界はすべて球で構成されている。
    GI?知らんな。なぜなら光は1回しか反射しないから。
    あ、でも並列化はしたい(唐突な裏切り)
    フォトリアルとは?

    View full-size slide

  13. レイの生成と交差判定
    ピクセルのUV座標→ワールド変換したものが
    光線ベクトルの原点になる
    連立ベクトル方程式 を解く
    球とレイの場合、tについての2次方程式になる
    プログラムの中で一番コストがかかる
    並列化が可能

    View full-size slide

  14. シャドウレイによる可視判定
    交差した点がカメラから見えるかどうかを判定する
    衝突点から各光源にシャドウレイというレイを飛ばし、
    また各オブジェクトと交差判定をする。
    交差しなかったら可視

    View full-size slide

  15. 表面材質の話
    表面材質は拡散、反射、透過などの因子に関して
    角度や入射光の強さによってきまる
    BRDF(Bidirectional Reflectance Distribution Function)という関数のによって扱われ

    View full-size slide

  16. ランバート反射BRDFについて
    ランバート反射する拡散面
    すべての方向で放射輝度が一定 となる理想状態
    BRDFが定数なので助かる

    View full-size slide

  17. 放射輝度の計算
    レイトレーサーは
    放射輝度という物理量を何らかの形で出
    力するのが目的
    レンダリング方程式を解くことによって算出
    される
    前述した制約のおかげでかなり簡単に
    なった
    BRDF 幾何学項 可視項 光源の
    放射輝度
    本家レンダリング方程式

    View full-size slide

  18. レイトレの愉しみ

    View full-size slide

  19. 今回作ったプログラムがこちら
    えっ...これだけ...?
    ワイ君< あ、はい。

    View full-size slide

  20. レイトレの愉しみ
    初心者向けの文献は多分少ない方
    →結構苦労した(2年越しの実現)
    望んだ画像が描画されたときの感動が大きい
    まだまだ勉強することがたくさん(CG沼)

    View full-size slide

  21. CGはニッチなプロたちの宝庫(たぶん)
    数学とマシンパワーで殴ろう(良い子はマネしないでください )
    レイトレ合宿なるコミュニティ活動が毎年行われている
    Qiitaのアドカレも毎年ある

    View full-size slide

  22. レンダラの現状雑感
    みんな大好きBlenderのCyclesレンダラーは(双方向)パストレーシング法
    多くのコンピューターゲームはラスタライザを使っている
    ⇒リアルタイムレイトレーシングが一般的になる未来
    デバイスの性能向上に合わせて高度なレンダリング手法が普及
    並列化や交差判定の最適化アルゴリズムにより速く美麗な画像生成の研究
    GANを用いたポストプロセッシングとかホットな話題らしい

    View full-size slide

  23. まとめ
    ゲームをはじめ、色々な分野でレイトレーシングが導入されている
    最小構成でレイトレは軽率にできる
    CGは沼

    View full-size slide

  24. 軽率にレイトレしよ

    ご清聴ありがとうございました
    @ninisan_drumath

    View full-size slide