作成者別アーカイブ: masafumi

TuringアーキテクチャのGPUの新機能のOpenGL/Vulkan拡張の記事

NVIDIAのCyril Crassin氏がTuringアーキテクチャのGPUの新機能のOpenGLとVulkan拡張をまとめた記事を書いています.

NVIDIA Turing Vulkan/OpenGL extensions
https://blog.icare3d.org/2018/09/nvidia-turing-vulkanopengl-extensions.html

今回OpenGLとVulkanの拡張として公開されているのは以下の機能です.以前の記事で公開された新機能以外のものも入っています.

  • Ray-Tracing Acceleration
  • Mesh Shading
  • Variable Rate Shading
  • Exclusive Scissor Test
  • Texture Access Footprint
  • Derivatives in Compute Shader
  • Barycentric Coordinates and manual attributes interpolation
  • Ptex Hardware Acceleration
  • Representative Fragment Test
  • Multi-View Rendering

NVIDIAのMesh Shaderの紹介記事

NVIDIAの開発者向けblogでTuringで加わる新機能の”Mesh Shader”の紹介記事が掲載されています.

Introduction to Turing Mesh Shaders
https://devblogs.nvidia.com/introduction-turing-mesh-shaders/

この機能は,OpenGL, Vulkan, Direct3D12からは拡張機能として使用できるようになるようですね.記事ではGLSL環境での使い方が解説されていますのでグラフィックスAPIでの標準化の前から使用できることになりそうですね.

NVIDIA TuringアーキテクチャのGPUの詳細記事やWhitepaper

NVIDIAの開発者向けサイトでGeForce RTXシリーズのTuringアーキテクチャのGPUの技術的な詳細を紹介した記事とWhitepaperが公開されています.

NVIDIA Turing Architecture In-Depth
https://devblogs.nvidia.com/nvidia-turing-architecture-in-depth/

Whitepaper
https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/technologies/turing-architecture/NVIDIA-Turing-Architecture-Whitepaper.pdf

今回のアーキテクチャの刷新は新機軸が多いので読んでおくとよさそうですね.

ラスタライズ向けの新機能の4つですが,これらに関してはおいおい紹介していきます.

  • Mesh shading
  • Variable Rate Shading
  • Texture Space Shading
  • Multi-View Render

このうちMesh ShadingとVariable Rate Shading (VRS)にTwitterで取り上げられてますね.

無料で読めるレイトレーシングの電子書籍の話題

SIGGRAPH 2018はリアルタイムレイトレーシングが話題になりましたが,いくつかの電子書籍が無料で読めるようになっていますので紹介していきます.

Peter Shirley氏のレイトレーシング入門電子書籍がSIGGRAPH 2018やTuring発表のタイミングで無料公開されています.

公開されているのは以下の3冊平易な文章とC++で書けるようになっています.まずは1から書いてみたいという人には良いと思います.

  • Ray Tracing in One Weekend
  • Ray Tracing: the Next Week
  • Ray Tracing: The Rest Of Your Life

https://drive.google.com/drive/folders/14yayBb9XiL16lmuhbYhhvea8mKUUK77W

サンプルのリポジトリ
https://github.com/petershirley

もう1つは,Real-Time Rendering, Fourth Editionの中で収録が間に合わなかったため電子版で公開されるReal-Time Ray Tracingの章です.”Real-Time”がつくこともあり,こちらはGPUレイトレーシングで使わる手法や用語の解説がありますので,OptiXやDXRの使用者などがAPIの中で動いている理論を知るのによいと思います.

書籍全体の情報ページ
http://www.realtimerendering.com/

無料公開のReal-Time Ray Tracingの章
http://www.realtimerendering.com/Real-Time_Rendering_4th-Real-Time_Ray_Tracing.pdf

IntelのCheckerboardレンダリングの記事

IntelのサイトでCheckerboardレンダリングの記事とサンプルが公開されています.SIGGRAPHでもセッションがありました.

Checkerboard Rendering for Real-Time Upscaling on Intel Integrated Graphics, v. 12
https://software.intel.com/en-us/articles/checkerboard-rendering-for-real-time-upscaling-on-intel-integrated-graphics-v-12

サンプルリポジトリ
https://github.com/GameTechDev/DynamicCheckerboardRendering

Direct3D12向けの実装解説で,先行するSonyのPS4 Proで提案されている手法,Rainbow Six Siege,Decima engine,Frostbiteの手法などについても言及されておりPC上で実装が公開されたものとしてはまとまった資料になっていますので実装を学ぶには良いと思います.

Filament : Googleのオープンソースリアルタイムレンダリングエンジン

GoogleがFilamentというオープンソースのリアルタイムレンダリングエンジンを公開しています.

Filament
https://github.com/google/filament

このエンジンはC++とJava/JNIがあり,Android,Linux,macOS,Windowsをサポートします.

バックエンドとしてOpenGL 4.1, OpenGL ES 3.0(Android), Vulkanがあります.macOSはOpenGLかMoltenVkによるVulkanで動作させる形になるようです.

物理ベースのクラスターフォワードレンダリングを採用していますが,ライトの単位なども物理的な単位ベースのようです.

  • Clustered forward renderer
  • Cook-Torrance microfacet specular BRDF
  • Lambertian diffuse BRDF
  • HDR/linear lighting
  • Metallic workflow
  • Clear coat
  • Anisotropic lighting
  • Approximated translucent (subsurface) materials (direct and indirect lighting)
  • Cloth shading
  • Normal mapping & ambient occlusion mapping
  • Image-based lighting
  • Physically-based camera (shutter speed, sensitivity and aperture)
  • Physical light units
  • Point light, spot light and directional light
  • ACES-like tone-mapping
  • Temporal dithering
  • FXAA or MSAA
  • Dynamic resolution (on Android)

将来サポートしたい機能としては以下のような要素があるようです.

  • IES light profiles
  • Area lights
  • Fog
  • Color grading
  • Bloom
  • TAA
  • etc.

Real-Time Rendering 第4版の書籍情報ページが更新

Real-Time Rendering 第4版の書籍情報のページが更新されています.

http://www.realtimerendering.com/

今回の表紙はGDC 2018で発表されたリアルタイムレイトレーシングのデモで使われたスターウォーズのシーンが表紙のようですね.

書籍の目次が公開されていますが,内容が多いので収録が見送られたCollision Detectionと2018年3月に発表されたことで紙に間に合わなかったReal-Time Ray Tracingの章は無料でオンライン上で公開されるようです.

Coarse Pixel Shading with Temporal Supersampling組み込みメモ

はじめに

IntelがI3D 2018で発表した”Coarse Pixel Shading with Temporal Supersampling”(CPS-T)はCheckerboard Renderingに代わる手法になるか気になりまして読んでみました.

Coarse Pixel Shading with Temporal Supersampling
https://software.intel.com/en-us/articles/coarse-pixel-shading-with-temporal-supersampling

この手法は,Checkerboard Renderingと比較して以下のような利点があるとのこですのでその辺見ていきます.

  • Checkerboard Renderingより組み込みが楽
  • Checkerboard Renderingより品質が高い
  • Checkerboard Renderingより速度が速くなるケースがある

手法について

サイトで公開されているデモはMicrosoftのMiniEngineのTemporalBlendCS.hlslを置き換えるような形のものになっています.そのためTemporal Anti-Aliasing(TAA)を実装している環境であれば置き換えが楽にできるようですね.Convert_TAA_to_TS.pdfという移行ドキュメントがデモに入っています.

この手法は,Intelが2011年に発表した”Coarse Pixel Shading”(CPS)の考え方をベースにしていますが,CPSをハードウェアに実装したGPUは現在のところ無いのでいくつか現在のGPUのシェーダで代替できるような回避がされています.

Coarse Pixel Shading
https://software.intel.com/en-us/articles/coarse-pixel-shading

CPS-Tでは,GPU機能のCPSが使えない代わりに1/4の解像度にシェーディングして,前のフレームのレンダリング結果を利用して解像度を復元します.

この復元の手法はTAAに影響を受けてTemporal Supersamplingという手法が生み出されています.このTemporal SupersamplingはTAAのように前のフレームや動きがあるところはMotion Vectorなどを使用しますが,そのほかに低解像度から高解像度化する際の可視性をうる方法としてdecoupled samplingを使用しているということのようですね.

Decoupled sampling for graphics pipelines
http://people.csail.mit.edu/jrk/decoupledsampling/

パフォーマンスについて

論文の中のTable 1と2を見てみます.

Table 1では3つの背景データをライト数変えた結果でBistro(光源は太陽光の1ライトのみ), Sponza(128ライト), San Miguel(128ライト)となります.

Tableの1番左の項目は以下のようなものになります.

  • PS…すべてのピクセルをそのままシェーディングする
  • CBR…Checkerboard Rendering
  • CPS-T…今回の手法

レンダリングの中のZ-prepass, Lighting, Temp-Resolv(PSではTAAの速度)の速度やPS Invoc.(Pixel Shader Invocation.Pixel Shaderの実行回数)などが提示されています.Frame Totalがレンダリングの合計時間です.

Table 1を見て分かることはライトがSunlightのみの状況ではPSが一番速いという結果になっています.逆にライト数が128個のシーンではCPS-Tが勝っています.速度差が大きく出ているのはLightingの個所ですね.なぜ速度差が出るかというとPS Invoc.がCPS-Tが少ないという点にあります.

PS Invoc.が少ない理由としてレンダリングの解像度が1/4になっている点ですね.これによってライトが増えてPixel Shaderの中でライティング計算が増えますが,PSの呼び出し回数が少ないことが効いて速度差がでているわけですね.


Table 1

Table 2はシーンを1つのものに固定してライト数を32~512に変えて比較しています.ライトの数が増えるとごと速度差が出てきます.


Table 2

この結果をみたところPS Invocationの数が少ないことで,1つのシェーダの複雑度が高いケースで速度的なアドバンテージがあることがわかります.

CPS-TはCBRよりもライティングの計算にかかる部分を減らすことで速度を稼ぐというところがポイントになると思います.逆にPSがシンプルであれば速度的なアドバンテージはないとも言えます.

制限

Temporalな手法なので,新たなシーンでは品質の高い絵が出るまで数フレームかかることと動きのあるシーンでは,状況によってはゴーストがでるようなことはあるようですね.サンプルではあまり動的物が少ないので動きのあるものはそれぞれ検証された方がよさそうですね.

おわりに

制限の部分が気になりますが,組み込み自体はTAAを利用しているタイトルでは組み込みは楽かもしれません.CPSに影響を受けていますが,シェーディング自体は1/4でやるだけなのでCPSではなかったりしてTemporal Supersamplingが新しい発明といえるかもしれません.

パフォーマンスのところで書きましたが,速度差がでない環境というのがあるのでモバイルやGPUパワーが弱くシェーダが単純なものの速度を稼ぐには使えないと思います.

しかし,コンソールやPCのハイエンド機などでは面白い手法かもしれないのでTAAをすでに実装しているような環境やCBRの環境では一度載せ替えを試してみるのはいいかもしれませんね.

弱点もありますが,この手法の使いやすさから採用してくるタイトルが今後出てくるかや弱点の改善をした手法などが出てくるかが気になるところですね.

WWDC 18セッション”Metal for Game Developers”の動画とスライド

WWDC 18セッション”Metal for Game Developers”の動画とスライドが公開になっています.

Metal for Game Developers
https://developer.apple.com/videos/play/wwdc2018/607/

スライドの内容としては,

  • マルチコアを活用するコマンドバッファの積み込み
  • MetalでのAsync Compute
  • GPU Driven RenderingとしてMetalでのIndirect Drawなどのテクニックも解説されています
  • iOSデバイスのGPU A11のタイルシェーディングに最適化したレンダリングやプログラマブルブレンディング
  • FortniteのmacOS版,モバイル版のスケーラブルなグラフィックス