Computer Graphics」カテゴリーアーカイブ

Ray Tracing GemsのKindle版が無料に

Ray Tracing GemsのKindle版が無料になっています.

RTG free on Kindle; consider Google Play for books
http://www.realtimerendering.com/blog/rtg-free-on-kindle-consider-google-play-for-books/

もともと出版社のサイトで電子版が無料で公開されていましたが,AmazonのKindle版も無料にということのようです. Kindleの次に無料で公開という候補としてGoogle Play Booksも検討されているようですね.

出版社のページ
https://link.springer.com/book/10.1007/978-1-4842-4427-2

DirectX Developer BlogのVariable Rate Shadingの記事と解説

DirectX Developer BlogでVariable Rate Shading(VRS)の概要を説明した記事が公開になりました.GDC 2019ではセッションも開催されます.

Variable Rate Shading: a scalpel in a world of sledgehammers
https://devblogs.microsoft.com/directx/variable-rate-shading-a-scalpel-in-a-world-of-sledgehammers/

Variable Rate Shading はシェーダがピクセルを塗る際に,1ピクセル単位ではなく複数ピクセルをまとめて塗ることでシェーダの呼び出しを抑制します.これによりVRなどでユーザーがあまり見ないスクリーンの端の方の処理を間引いたり,ジオメトリの起伏がなく法線が均一な部分はシェーディングがまとめられるので処理の軽量化ができます.

Direct3D12では以下の3つの単位でシェーディングレートを変更することができます.

  • Per draw…Draw単位での制御
  • Within a draw by using a screenspace image…スクリーンスペース画像での制御
  • Or within a draw, per primitive …プリミティブ単位での制御

ハードウェアごとにTier 1とTier 2の2段階のサポートの違いがあるようです.Tier 1では上の3つのシェーディングレートのうちPer drawだけをサポートするようです.

記事ではCivilization VIでTier 1とTier 2の比較と解説をしています.
Civilization VIのTier 1 では海や平地などの起伏が少ない部分(法線が均一と思われる)は2×2のVRSを使い,建物やユニットやUIなどが1×1としているようです.この実装でのパフォーマンス向上は20%のようです.Tier 2ではエッジ検出のフィルタを事前にかけて高周波な部分を高精細に描く必要があると判断するようです,山岳は1×1で通常のシェーディングをするということをしているようで,記事ではシェーディングレートを赤(1×1)と青(2×2)で可視化してしています.これによりTier 1より山岳は詳細になり,14% パフォーマンス向上がしたようです.

最初に,サポートするGPUはNVIDIAとIntelからということになるようです.記事ではIntelのGen 11でTier 2まで実装した例になっています.APIのリリースは今年中ということのようです.PIX for Windowsも最初からサポートされるようです.

高解像度でのシェーディングや低スペックGPUでのパフォーマンス向上は各社悩みがありますので,各種ゲームエンジンもサポートしていくようです.

Ray Tracing Gems記事”Hybrid Rendering for Real-Time Ray Tracing”が単体で公開

Ray Tracing Gemsに掲載される記事”Hybrid Rendering for Real-Time Ray Tracing”が単体でEA SEEDのサイトで公開されています.

Hybrid Rendering for Real-Time Ray Tracing
https://www.ea.com/seed/news/hybrid-rendering-for-real-time-ray-tracing

VK_NV_cooperative_matrix : GeForce RTXシリーズのTensor CoreをVulkanで使用できるようにする拡張

NVIDIAのTuring CoreのGPUより搭載されたTensor CoreをCompute Shaderで使用して演算するための拡張の仕様が公開になっています.

VK_NV_cooperative_matrix仕様書
https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_NV_cooperative_matrix

この拡張は,Cooperative matrix型というあらたな行列型をCompute Shader使えるようで,行列の各要素はfloat16,float32,float64,sint8,sint16,sint32,sint64,uint8,uint16,uint32,uint64と8bitから64bitの精度が指定できます.この行列の演算に関しては,TuringアーキテクチャのGeForce RTXシリーズに搭載された Turing Core を使用することができるようです.

Compute Shaderで使用できるということでMLやDLのような用途でなくても良さそうなので,グラフィックス処理に使うということもできそうです.

なお,拡張の仕様は上記のドキュメントで公開され,下記のタスクリストを見るとドライバも対応になったようですが,SPIR-Vやシェーダコンパイラの対応などがまだのようです.

Task list for VK_NV_cooperative_matrix release
https://github.com/KhronosGroup/Vulkan-Docs/issues/923

使用方法に関するサンプルや下記のリポジトリに公開されています.ベンチマークになっているので,パフォーマンスについても見ることができます.シェーダを変更するための
glslangValidator.exe についても情報があります.

シェーダをSPIR-Vバイナリにしたものはリポジトリにありますので動かすことはできるんではないかと思います.

vk_cooperative_matrix_perf
https://github.com/jeffbolznv/vk_cooperative_matrix_perf

NVIDIAの開発者向けサイトでRay Tracing Gemsが先行公開

NVIDIAの開発者向けサイトでRay Tracing Gemsが先行公開されています.

The Authoritative Book on Real-Time Ray Tracing Has Arrived
https://news.developer.nvidia.com/the-authoritative-book-on-real-time-ray-tracing-has-arrived/

Ray Tracing Gems Preview
https://developer.nvidia.com/books/raytracing/raytracing_gems_preview

数日おきに公開される記事が増えるようで, 今回の先行公開はNVIDIAの開発者向けサイトの登録がいりますが, 最終的に電子版はサンプルコードとともに最終的には全部無料公開されるようです.

書籍:Ray Tracing Gemsの目次と表紙が公開に

昨年,出版が発表されたRay Tracing Gemsの目次と表紙が公開になっています.

目次
http://www.realtimerendering.com/raytracinggems/

Real-Rendering “Ray Tracing Gems” nears completion
http://www.realtimerendering.com/blog/ray-tracing-gems-nears-completion/

GemsとつくとTipsを集めたものになりがちですが,今回はレイトレーシングの基礎的な部分やDXRの概要を紹介するような記事などもあるようですね.

Syysgraph 2018のEA SEED の発表 Modern Graphics Abstractions & Real-Time Ray Tracingのスライド

Syysgraph 2018のModern Graphics Abstractions & Real-Time Ray Tracingスライドが公開になっています.

Modern Graphics Abstractions & Real-Time Ray Tracing
https://www.ea.com/seed/news/syysgraph-2018-modern-graphics-abstractions-real-time-ray-tracing

今年のHalcyonの発表は色々とありましたが,集大成的な発表になっています.

  • Vulkan版対応の話
  • Render Graphの話
  • マルチGPUでのGPUの仮想化
  • Machine Learning対応
  • アセットパイプライン
  • シェーダ
    • マルチプラットフォーム対応
    • Wave / Subgroup対応
  • レイトレーシング
  • ハイブリッドレンダリング
  • Transparent Shadow
  • Transparency & Translucency
  • GI
  • デノイズ

WHLSL : Web向け高級シェーダ言語

ブラウザ向け3Dは現在WebGLが使われていますが,WebKitやMozillaやGoogleなど様々な次世代APIが検討されています.

そこで使うシェーダ言語の1つとしてHLSLをベースにしたWHLSLの開発が進んでいますが,その詳細を解説した記事があります

Web High Level Shading Language
https://webkit.org/blog/8482/web-high-level-shading-language/

WHLSLに関しては,SIGGRAPH 2018のBoFのHLSL Realtime Shading Languageで知りました.BoFの説明ではW3Cというのがありますね.

SIGGRAPH 2018のBoFリスト
https://s2018.siggraph.org/conference/conference-overview/birds-of-a-feather/

さて,今回は,WebKitの話ですが,WebKitではAppleを中心にWebGPUというAPIが提案され現在開発が進んでいます.

WebGLはOpenGLをベースにしていましたが,WebGPUはMetal, Direct3D12, VulkanなどのAPIの設計をWebに持ってくるようなイメージですね.

AppleはWebGPUの実装をMetalベースで提案していましたが,他のOS環境に関してはDirect3D12やVulkanでの実装を行ってよいようでした.シェーダ言語に関しては,Metal Shadering Laungage(MSL)で提案していましたが,今回の記事を見ているとMSLはなくなったように思えます.

プロポーザル
https://webkit.org/wp-content/uploads/webgpu-api-proposal.html#shadinglanguage

今回の記事では,HLSLの構文を参考にしたWHLSLが説明されています.HLSLを参考にしているのはシェーダプログラマの人口が多いというところになりそうです(MSLやGLSLやSPIR-Vなど採用されなかったものについては記事に書いてあります).

ここで注意しないといけないのがWHLSLはHLSLと単語が共通ですが,HLSLの仕様がまるまる採用されておらず,言語仕様的には別な言語になっているようですね.Web High Level Shading Launguageということです.

ベクトル型や組み込み関数などは共通するようですが,HLSLでサポートする仕様とはいくつかの点が違いますがそれを挙げていきます(順不同.これが全部ではないです).

  • Cスタイルの暗黙の型変換はサポートしない
    • エラーの原因.Swiftなどと近いアプローチ
  • enumのサポート
    • 実行時のコストがかからず便利だから
  • 構造体
    • HLSLやCと一緒
    • 継承,virtual,アクセス制御,privateはサポートしない
  • プリプロセッサはサポートしない
    • 理由:プリプロセッサでシェーダのバリエーションを増やす手法はHLSLでは使われるが保守性が悪い
  • セーフポインタ
    • 既存のCPUコードの移植しやすさを考えて
      • 機械学習やComputer Vision,信号処理の人たちがコードをもっていきやすいように
  • 配列の参照
  • プロパティ
  • プリプロセッサの未サポート
    • HLSLでは1つのシェーダコードのバリエーションを増やすために使われるが保守性の悪さ
    • シェーダ読み出しの仕組みが違うのではサポートしない
    • 代わりにSPIR-Vのspecialization constantsにあたるものがある
  • セマンティクスのサポート
    • シェーダステージ間をやりとりするためにHLSLと同じくある
      • ただし,グローバル変数ではなく関数のパラメータ入力と出力の形式になる

だいぶ作業が進んでるなという印象ではありますが,ブラウザ上での実装はセキュリティの問題など配慮すべきことが多いためまだまだ時間がかかりそうではありますが,WebGLよりもよりパフォーマンスを引き出せるものというのを期待したいところですね.