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

ラスタライザとレイトレのハイブリッドレンダリングエンジン

 ラスタライザとレイトレのハイブリッドレンダリングエンジン

自作のレンダリングエンジンに関する、社内勉強会の資料です。

TakayukiKiyohara

September 09, 2022
Tweet

More Decks by TakayukiKiyohara

Other Decks in Programming

Transcript

  1. はじめに オリジナルエンジンでレイトレが動いている様子 環境 • CPU : Intel Core i7-11800H •

    GPU : RTX 3070 Laptop • メモリ : 32GB • OS : Windows10/11 • Graphics API : DirectX12
  2. はじめに • Chapter-1 リアルタイムレイトレの発表~現在まで • Chapter-2 シンプルなレンダリングエンジン(ラスタライザ法) • Chapter-3 GPUパイプライン(ラスタライザ法)

    • Chapter-4 複雑なレンダリングエンジン(ラスタライザ法) • Chapter-5 シンプルなレンダリングエンジン(レイトレ―ス法) • Chapter-6 GPUパイプライン(レイトレ―ス法) • Chapter-7 ハイブリッドレンダリングエンジン 目次
  3. リアルタイムレイトレの発表~現在 • 2018年3月19日、GDC2018にて米MicrosoftからDirectX Raytracingが発表 [1] DirectX12のリアルタイムレイトレーシングを行うための拡張APIとして、 DirectX Raytracing( DXR )が発表される

    • 同日、米Nvidiaからリアルタイムレイトレーシング技術を提供するNVIDIA® RTXが発表 [2] DXRの発表と同日にハードウェアレイトレーシングを行うための専用のRTCoreを搭載したGPUが 発表される • 2018年9月20日、GeForce RTX 20シリーズが発売 • 2018年10月2日、Windows 10 October 2018 UpdateにてDXR正式対応が発表 [3] 翌日の10月3日より、配信が開始され利用可能となる • 2018年11月半ば、Battlefield Vのアップデートにて、DXRファーストリリース版が配信 DirectX Raytracingの発表から、対応タイトル発売まで
  4. リアルタイムレイトレの発表~現在 • 2020年3月16日、Xbox seriesXのレイトレ対応とアーキテクチャが公開 [6] 米Microsoftのブログにて、Xbox seriesXのGPUコアがAMD RDNA 2 アーキテクチャベースのも

    のであると公開される [6] • 2020年3月19日、Play Station5の基本スペック公開 [5] PS5のGPUのコアはAMD RDNA 2アーキテクチャベースのものであると発表されている • 2020年10月28日、リアルタイムレイトレーシングをサポートするRadeon RX 6000シリーズを発表 [4] 「AMD RDNA 2 アーキテクチャ」を採用するGPUを発表。ハードウェアレイトレーシングに対応 AMDとコンソールゲーム機の対応
  5. リアルタイムレイトレの発表~現在 • 2018年6月、WWDC2018にてMPS(Metal Performance Shader)を利用したレイトレ―サーが公開 [7] ハードウェアレイトレーシングではなく、コンピュートシェーダーを利用したソフトウェアレイト レ―シングが公開された • 2020年3月17日、Valukanのハードウェアレイトレ対応が発表

    [8] 4月8日暫定版「Vulkan Ray Tracing」が公開された • 2022年6月6日、WWDC2022にてMetal3において、よりモダンなレイトレ対応が発表 NVIDIA、AMDなどが実現しているハードウェアレイトレーシングと同等の仕組みを、Metal3で実 装することを発表した。 • 2022年6月、Armから初のハードウェア・レイトレーシング対応GPU「Immortalis」が発表される [9] 他API(Valukan、Metal)とスマホのレイトレ対応
  6. リアルタイムレイトレの発表~現在 • DLSS(Deep Learning Super Sampling) GeForce RTX™ GPU にのみに搭載されている専用の

    Tensor コア AI プロセッサ使用してのアップ スケーリングAA [10] • FSR(FidelityFX Super Resolution) 2021年6月22日にてAMDから公開された [11] • MetalFX Upscaling 2022年6月、WWDC2022にてDLSS、FSRライクなのアップスケーリングAAが発表された [12] Upscaling AA
  7. シンプルなレンダリングエンジン(ラスタライザ法) ほぼすべてのゲームには、一 定の周 期でループする ゲームループと 呼ばれるものが存 在しています。こ のループのなかで、ゲーム 内 のオブジェクトの

    状 態 の更新処理や描画処理が行われています。 Unityにおいて、このゲームループの実装は強烈に隠 蔽されていて、ゲームループの根本の処理を変更す ることはできません。 ゲームループ
  8. シンプルなレンダリングエンジン(ラスタライザ法) レンダリングエンジンとは1フレームの 絵 を 作 るた めのGPUの絵を作 成するための、GPUに対する命 令 となる描画コマンド(ドローコール)を生成するもので

    す。このサンプルプログラムでは、ゲームオブジェ クトのDraw関数を呼び出している箇所がレンダリン グエンジンと言えます。この関数の内部で描画コマ ンドを作成しています。 レンダリングエンジン レンダリングエンジン
  9. シンプルなレンダリングエンジン(ラスタライザ法) 次 のサンプルコードは 先 ほどのゲームオブジェクト のDraw()関数とUpdate()関数の疑似コードです。 かなりUnityに寄せた疑似コードとなっています。 このUpdate() 関 数

    では、ゲームオブジェクトのワー ルド空間での座標、回転、拡大率からワールド行列 を計算しています。 Draw()関数では_meshRendererというメッシュをレ ンダリングするためのコンポーネントを 保 持 してい たら、_meshRendererのDraw()関数を呼び出してい ます。 GameObjectの中身の疑似コード
  10. シンプルなレンダリングエンジン(ラスタライザ法) • 定数バッファの更新 ◦ メッシュ共通のワールド行列など、その他も ろもろ ◦ マテリアル個別のものもある • プリミティブトポロジーの設定

    • 頂点バッファ/インデックスバッファの設定 • マテリアルごとのリソースの設定 ◦ ディスクリプタヒープ • GPUパイプラインの設定 ◦ Zテスト/アルファブレンディング/カリング シェーダーなどの設定 ドローコールのための最低限の設定
  11. GPUパイプライン(ラスタライザ法) 1. 入力アセンブラ 2. 頂点シェーダー 3. ハルシェーダー 4. ドメインシェーダー 5.

    テッセレータ― 6. ジオメトリシェーダー 7. ラスタライザ 8. ピクセルシェーダー 9. アウトプットマージャー DirectX12におけるGPUパイプライン テッセレーションと頂点増減の ためのステージ。 詳細は割愛します。
  12. GPUパイプライン(ラスタライザ法) 頂 点 バッファ、インデックスバッファ、プリミ ティブのトポロジーの 情 報 から、プリミティブを 構成する頂点データを読み込んで頂点シェーダー に渡すステージ。

    下記の関数がInput Assemblerのための関数。 • _commandList.IASetPrimitive() • _commandList.IASetVertexBuffer() • _commandList.IASetIndexBuffer() 入力アセンブラ( Input Assembler )
  13. GPUパイプライン(ラスタライザ法) ラスタライザで 決 定 された 塗 りつぶすためのピクセルのカ ラーを 決 定

    するためのプログラマブルステージです。プログ ラマブルシェーダーの花形スター選手です。 GLSLやUnityではフラグメントシェーダーと 呼 ばれていま す。 ピクセルシェーダー
  14. 複雑なレンダリングエンジン(ラスタライザ法) 1. プリレンダリング a. レンダリングに必要な事前データの作成などを行う。 2. レンダリング a. 実際の描画処理。シンプルなレンダリングエンジンはここの部分だけ。 3.

    ポストエフェクト a. 2で出来上がった絵に対して、エフェクトをかけていく。カメラアプリの画像加工をイメージする と良い。 4. HUD a. ポストエフェクトをかけたくない2Dなどをレンダリングする。3と4を入れ替えると2Dにまで ポストエフェクトがかかるので注意! forwardレンダリングの典型的な処理
  15. 複雑なレンダリングエンジン(ラスタライザ法) • シャドウマップの作成 ◦ 影生成 • ZPrepass ◦ のちのレンダリングのパスで 無

    駄 なピクセル シェーダーを 走 らせないためにZバッファを 先 に作ってしまう。 • 速度マップの作成 ◦ モーションブラー プリレンダリング
  16. シンプルなレンダリングエンジン(レイトレ―ス法) アルゴリズム概要 1. レイトレワールド(3Dモデルのポリゴン の集合だと思ってください)を構築 2. カメラからスクリーンのピクセルに 向 かってレイを飛ばす 3.

    飛 ばしたレイとレイトレワールドとの 衝 突判定 4. 衝突した場合は計算したサーフェースの カラーをピクセルのカラーとして表示 5. 衝 突しなかった場 合はピクセルカラーを 黒とする
  17. 参考文献 • [1] [GDC 2018]ついにDirectXがレイトレーシングパイプラインを統合。「DirectX Raytracing」が 立ち上がる • [2] NVIDIA

    RTX 技術がリアルタイムのシネマティック レンダリングの夢を実現 • [3] ゲーム表現の革新「DirectX Raytracing」が「October 2018 Update」で正式サポート - 窓の杜 • [4] AMD、リアルタイムレイトレーシング対応「Radeon RX 6000」シリーズ発表 「Big Navi」搭載、 579ドルから - ITmedia NEWS • [5]  PS5の基本スペックが公開。CPUはZen2(8コア16スレッド)3.5GHz(可変)、GPUは10.28 TFLOPs, 36 CUs at 2.23GHzに | ゲーム・エンタメ最新情報のファミ通.com • [6] Xbox Series X: A Closer Look at the Technology Powering the Next Generation • [7] Metal for Accelerating Ray Tracing | Apple Developer Documentation
  18. • [8] グラフィックスAPI「Vulkan」がリアルタイムレイトレーシングに対応。Windowsだけでなく, 【MacやLinuxでも利用可能に • [9] Arm、スマホ向け新型GPU「Immortalis」――ハードウェアレイトレーシングに対応 - ケータイ Watch

    • [10] ネイティブ超えの新DLSSを追加――NVIDIAが「GeForce Experience」をアップデート Radeonで も使える超解像技術も公開(2/2 ページ) - ITmedia PC USER • [11] 西川善司の3DGE:AMDの超解像技術「FidelityFX Super Resolution」は,DLSSのライバルとな り得るのか • [12] MetalFX Upscaling will bring DLSS-like image reconstruction to games on MacOS | Ars Technica • [13] DX12 Raytracing tutorial - Part 1 | NVIDIA Developer 参考文献
  19. • [14] Pocol(2021年)『Direct3D12 ゲームグラフィックス実践ガイド』技術評論社. • [15] 清原 隆行(2021年)『HLSLシェーダーの魔導書』翔泳社. • [16]

    Tomas Akenine-Moller、Eric Haines、Naty Hoffman『リアルタイムレンダリング 第4版』ボー ンデジタル. 参考文献