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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

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

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

Avatar for TakayukiKiyohara

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版』ボー ンデジタル. 参考文献