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

レイトレ合宿6 レンダラー紹介 / Renderer Introduction, Ray Tracing Camp 6

shocker_0x15
September 01, 2018

レイトレ合宿6 レンダラー紹介 / Renderer Introduction, Ray Tracing Camp 6

レイトレ合宿6 ( https://sites.google.com/site/raytracingcamp6/ )で提出した作品のレンダリングに用いたレンダラーの紹介です。

NVIDIAのOptiXを活用したGPUレンダラーです。光輸送アルゴリズムとしてはPath Tracing with MISを使用、マテリアルとしてはスタンダードなものに加えてUE4かFrostbiteのようなBRDFを実装しています。

https://twitter.com/Shocker_0x15

shocker_0x15

September 01, 2018
Tweet

More Decks by shocker_0x15

Other Decks in Technology

Transcript

  1. レイトレ合宿6 2018/09/01-02
    https://sites.google.com/site/raytracingcamp6/
    VLR
    @Shocker_0x15

    View full-size slide

  2. 今回の技術的ポイント
    再びGPUレンダラー!
    - OptiXによる実装
    - Full-Featured Path Tracer
    - デュアルシーングラフ

    View full-size slide

  3. 2018年3月ごろ:
    ... GDCでDXR発表されたし触ってみよう
    手元PC (MacBook Pro Retina 2013, GT 750M)で動かず!
    ... 環境もまだ安定してなさそうだしHLSLも書きたくないなぁ
    (そもそも今思えばレイトレ合宿の環境で動くのか?)

    View full-size slide

  4. NVIDIA OptiX
    かのピクサーがLookdev用のレンダラーに使っていたり
    有名どころのレンダラーのGPU実装も
    バックエンドに使っていたりするらしい
    あれ…OptiX最高なのでは…?
    シェーダー構成もDXRと極めて近いし
    CUDAという安定してそうな環境かつ強力な文法で書ける
    OptiX最高なのでは…?

    View full-size slide

  5. 書きました

    View full-size slide

  6. Full-Featured Path Tracer
    GPU実装だからといって機能は妥協したくない
    - シーングラフ
    (これはOptiXがある程度担保してくれる)
    - 任意形状の光源・EnvLight
    - 多様かつ複雑なマテリアル
    - Lambert, Ideal Specular BRDF/BSDF
    - UE4 BRDF
    - …
    - 実用的な光輸送アルゴリズム実装
    Path Tracing with MIS

    View full-size slide

  7. ※動画ファイルでした

    View full-size slide

  8. デュアルシーングラフ
    Scene + AS
    Transform A Transform B
    ObjectGroup + AS
    (Transform C)
    Mesh A ObjectGroup + AS
    (Transform D)
    Mesh B Mesh C
    OptiXは任意の深さのシーングラフ
    (articulate scene graph)を作成可能
    だがAcceleration Structureは
    パフォーマンスの観点より
    二階層に留めることが推奨されている
    でもレンダラーを使う側の気持ちとしては
    自由な数の階層を使いたい

    View full-size slide

  9. デュアルシーングラフ
    ユーザー視点のシーングラフの裏で二階層に変換したシーングラフを構築
    Scene
    Transform A Transform B
    ObjectGroup
    (Transform C)
    Mesh A ObjectGroup
    (Transform D)
    Mesh B Mesh C
    Scene + AS
    Mesh A Mesh B Mesh C
    Tr
    AC
    Tr
    ACD
    Tr
    BC
    Tr
    BCD
    ObjectGroup
    + AS
    ObjectGroup
    + AS
    ユーザー視点 内部

    View full-size slide

  10. BVHの構築とトラバースは面倒を見てくれるので楽
    トランスフォームがある場合も透過的に扱える
    しかし
    光源側からの経路のサンプリングが絡み始めると途端に面倒に
    例: 任意メッシュの光源のNEEやライトトレーシング
    透過的に扱えていたトランスフォームを全部自前で処理する必要がある
    ナイーブなパストレーシング実装までは簡単
    →ハイブリッドレンダリングで要求される実装も素直そう(DXRも)
    現状CUDAでは使えるアトミックも使えないので
    フォトンマッピング実装などにも難あり?
    Atomicは使えたが、スレッドグループの概念がサポートされない

    View full-size slide

  11. 余談:OptiX ForumのNVIDIAの人すげぇ...

    View full-size slide

  12. ある日フォーラムで質問を投げた

    View full-size slide

  13. 今後の挑戦
    OptiXが実用的なレンダラー実装として使えることが確認できたので
    CPUレンダラーとの統合
    https://github.com/shocker-0x15/SLR
    OptiX AI Denoiserの利用
    Full-Featuredレンダラーとしての機能拡充
    例: SSSやボリュームレンダリング

    View full-size slide