カテゴリー別アーカイブ: Computer Graphics

書籍:Metal Programming Guide: Tutorial and Reference via Swift

OpenGLの赤本を出版している出版社から”Metal Programming Guide: Tutorial and Reference via Swift”が出るようですね。

出版社の紹介ページ
https://www.pearson.com/us/higher-education/program/Clayton-Metal-Programming-Guide-Tutorial-and-Reference-via-Swift/PGM1255392.html

目次を見ているとPart IIIでは画像処理,Machine VisionといったGPUの応用処理のほかにMetal特有のニューラルネットワーク関連のGPUアクセラレーションの話題が載るようですね.

CUDAなどではこうしたフレームワークがありますが,世代の近いDirect3D12やVulkanではこうしたフレームワークはないのでMetal特有の話題ということで興味深いですね.

Part III: Data Parallel Programming

Chapter 15: The Metal Compute Pipeline
Chapter 16: Image Processing in Metal
Chapter 17: Machine Vision
Chapter 18: Metal Performance Shaders Framework
Chapter 19: Neural Network Concepts
Chapter 20: Convolutional Neural Networks

Shader Model 6 Wave Intrinsicsサンプル

Shader Model 6 Wave Intrinsics サンプルを起動してみました.

https://github.com/Microsoft/DirectX-Graphics-Samples/tree/master/Samples/Desktop/D3D12SM6WaveIntrinsics

このサンプルでは,付属のCompileShader_SM6.batでシェーダをdxc.exe(HLSL 6.0用シェーダコンパイラ)でシェーダをコンパイルする必要があります.

Visual Studio 2017と10.0.15063.0のWindows 10 SDKがインストールされていれば下記にコンパイラがあると思います.

C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\dxc.exe

ビルドを実行すると1~9までのレンダリングモードがあります.これでWave(NVIDIAならWarp, AMDならWavefront)やLane(Wave内の1スレッド)の処理を可視化します.

WaveやLaneなどの用語を再確認したい方は下記の記事のTerminologyを参照ください.

https://msdn.microsoft.com/en-us/library/windows/desktop/mt733232(v=vs.85).aspx

今回はすべての処理がピクセルシェーダで実装されています.

今回,GeForece GTX 1080で実行していますがWave内のLaneの数はGPUベンダーごとに違うのでAMDでは違う結果になると思います.

1.通常の描画

これがまず基本になります.Wave処理ありません.

2.Color Pixels by lane indices

これはカラー塗ってるピクセルのところをLaneのインデックスを表示しています.0~Wave数までのグラデーションになっているます.Wave内のLaneの割り当てられ方がわかります.

3.Show first lane (white dot) in each wave.

これは,Waveの単位の中で最初のLaneを白ピクセルで表示ています.

4.Show first(white dot)  and last(red dot) lanes in each wave.

これは前述のWaveの最初のLaneが白,最後とのLaneが赤で表示しています.

5.Color Pixels by active lane ratio (white = 100%; black = 0%)

カラーピクセルのあActive Laneの比率の可視化です.白が100%で黒が0%です.

6.Broadcast the color of the first active lane to the wave

これは,実行されてる最初のActive Laneの色をWave内のほかのLaneにブロードキャストしてその色を出力しています.

7.Average the color in a wave.

Wave内のLaneの色の平均を出しています.

8.Color pixels by prefix sum of distance between current and first lane.

これは,シェーダを見た感じでは現在のピクセルの座標値とWaveの最初のLaneの距離を取りその値をWavePrefixSumでLane内のすべての値で和をとっています.そのあとに,Wave内のActive Laneを取得して割って色を出しています.

9.Color pixels by their quad id

これ以前は,Wave単位で処理してましたがここでは2×2のLaneのQuad単位の処理を行っています.この処理では,Quad内の左上,右上,左下,右下と位置によって出力色を変えて出しています.

Direct3D12のサンプルにCreators Updateの新機能のサンプルが追加

Direct3D12のサンプルにCreators Updateの新機能のサンプルが追加されています.

https://github.com/Microsoft/DirectX-Graphics-Samples

今回追加されているのは,

  • D3D12 Depth Bounds Test
  • Shader Model 6 Wave Intrinsics

の2つです.

Depth Bounds Testに関しては,以前の世代のAPIではGPUで使用できた機能ではありますが,Direct3D12で使用可能になった機能です.

Shader Model 6 Wave IntrinsicsはShader Model 6.0の新機能Wave Intrinsicsの使い方のサンプルです.Wave IntrinsicsはCompute ShaderやPixel Shaderでスレッドグループ共有メモリなどを使用せずにほかのシェーダスレッドと値の交換などができる機能です(Pixel Shaderではもともと使用できませんでしたが).

https://msdn.microsoft.com/en-us/library/windows/desktop/mt733232(v=vs.85).aspx

Wave IntrinsicsはもともとはGPUベンダーの拡張やCUDAなどで使用できていましたが,HLSL 6.0より標準機能になります.

SIGGRAPH 2017 Open Problems in Real-Time Renderingのコース資料

Open Problems in Real-Time Renderingのコース資料が徐々に公開されています.

Open Problems in Real-Time Rendering
http://openproblems.realtimerendering.com/s2017/index.html

“Real-Time Rendering”ということで,ゲームやゲームエンジンの開発にかかわるような人が抱える問題や課題,将来予測などの4つのセッションがあります.

特に今回はPBR, GI, Compute, Deep Learningの活用というテーマに分かれています.

  • Physically-Based Materials: Where Are We? by Sébastien Lagarde (Unity Technologies)
  • A Certain Slant of Light: Past, Present and Future Challenges of Global Illumination in Games by Colin Barré-Brisebois (Electronic Arts SEED)
  • Future Directions for Compute-for-Graphics by Andrew Lauritzen (Electronic Arts SEED)
  • Deep Learning: The Future of Real-Time Rendering? by Marco Salvi (NVIDIA)

SIGGRAPH 2017コース Physically Based Shading in Theory and Practiceの資料が公開開始

SIGGRAPH 2017コース Physically Based Shading in Theory and Practiceの資料が公開開始になっています(この記事執筆時点ではすべてが公開されているわけではありません).

SIGGRAPH 2017 Course: Physically Based Shading in Theory and Practice
http://blog.selfshadow.com/publications/s2017-shading-course/

今年のセッションは以下の6つのセッションですね.

  • Real-Time Line- and Disk-Light Shading (Eric Heitz and Stephen Hill)
  • Physically Based Shading at DreamWorks Animation (Feng Xie and Jon Lanz)
  • Volumetric Skin and Fabric Shading at Framestore (Nathan Walster)
  • Practical Multilayered Materials in Call of Duty: Infinite Warfare (Michał Drobot)
  • Pixar’s Foundation for Materials: PxrSurface and PxrMarschnerHair (Christophe Hery and Junyi Ling)
  • Revisiting Physically Based Shading at Imageworks (Christopher Kulla and Alejandro Conty)

OpenGL 4.6が公開に

SIPPRAPH 2017の中でOpenGL 4.6の仕様が公開になったようです.

Khronos Releases OpenGL 4.6 with SPIR-V Support
https://www.khronos.org/news/press/khronos-releases-opengl-4.6-with-spir-v-support

OpenGL 4.6ではSPIR-Vのサポートが必須になったようです.

拡張も追加されていますが,ドローコール削減のために役立つGL_ARB_indirect_parametersやSubgroup処理などが入るようですね.

NVIDIAのセッションで紹介しているものがありました.

VSCodeでglTFのプレビューができるglTF Extension for Visual Studio Code

VSCodeでglTFのプレビューができるglTF Extension for Visual Studio Codeが公開されています.

glTF Extension for Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=cesium.gltf-vscode

VSCode上でglTFのJSONを編集しつつBabylonJS,Cesium,ThreeJSの3つのWebGLベースのエンジンで3Dモデルをプレビューすることができます.プレビュー以外にもデータの変換やチェック向きの機能もあるので便利そうですね.

Baikal Renderer:AMD RadeonRaysベースのオープンソースレンダラ

GPU OpenでBaikal RendererというAMD RadeonRaysベースのオープンソースのレンダラが紹介されています.

Baikal Renderer: Open-source Radeon ProRender backend
http://gpuopen.com/baikal-renderer-open-source-radeon-prorender-backend/

RadeonProRender-Baikalリポジトリ
https://github.com/GPUOpen-LibrariesAndSDKs/RadeonProRender-Baikal

RadeonRaysはレイトレ-シングのライブラリですが,Baikalはマテリアルやライト,ジオメトリなどの高機能なレンダラになっているようです.