カテゴリー別アーカイブ: Apple

CppCon 2017 : Design Patterns for Low-Level Real-Time Rendering

CppCon 2017でDesign Patterns for Low-Level Real-Time Renderingというセッションがあったようですね.

Design Patterns for Low-Level Real-Time Rendering(スライドアリ)
https://cppcon2017.sched.com/event/BgtO?iframe=no

Vulkan, Direct3D 12, Metalといった並列処理対応グラフィックスAPIにおいて

  • メモリ管理
  • コマンドリスト
  • Descriptors
  • リングバッファ
  • 並列コマンドレコーディング
  • GPU処理の並列化とメモリのスケジューリング

などの話題がメインのようです.

参考文献などを見ているとやはりGDC 2017のEA DICEのFrameGraphの影響は大きそうですね.

書籍: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

NXT:新しいWeb向けグラフィックスAPI

GoogleのGitHubのリポジトリにNXTという新しいWeb向けグラフィックスAPIのリポジトリが公開されていました.

https://github.com/google/nxt-standalone

Googleのオフィシャルというよりは実験的なプロジェクトのようでANGLEから新しく設計したプロトタイプのようですね.

Chromium向けで,D3D12, Metal, Vulkanの世代のような考え方(…に加えてOSごとにバックエンドになる)を取り入れたりSPIR-Vを導入したりという部分はANGLEから変わる部分かと思います.

WebKitから新しいブラウザ向け3DグラフィックスAPI WebGPUが発表

WebKitから新しいブラウザ向け3D グラフィックスAPIのWebGPUが発表になっています.

Next-generation 3D Graphics on the Web
https://webkit.org/blog/7380/next-generation-3d-graphics-on-the-web/

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

WebGLが,OpenGL ESをベースにしていますが,WebGPUはD3D12,Metal,Vulkanの世代のAPIの設計に近いローレベルAPIになるようですね.

現時点では,AppleがWebKitを主導する分Metalに近い印象ですね.シェーダに関してもMetal Shading Languageのようですが,DXILやSPIR-Vへの対応自体は否定してないようです.

Appleの環境,OS XやiOSなどではMetalベースのアプリケーションが多くあるので,そうしたものをSafariに持って来る上では,WebGLでは都合が悪くなってきているのかもしれませんね.

bgfx : Direct3D12からOpenGL, WebGL, Metal, Oculusに対応するオープンソースのグラフィックスライブラリ

GithubでbgfxというグラフィックスライブラリがライセンスはBSD 2-Clauseで公開されています.

https://github.com/bkaradzic/bgfx

このライブラリは”Bring Your Own Engine/Framework”スタイルと言ってますが,サポートするAPIや言語が幅広いです.

対応グラフィックスAPIは以下です.

  • Direct3D 9
  • Direct3D 11
  • Direct3D 12 (WIP)
  • Metal (WIP)
  • OpenGL 2.1
  • OpenGL 3.1+
  • OpenGL ES 2
  • OpenGL ES 3.1
  • WebGL 1.0

対応言語も以下に対応しています.

  • C/C++ API documentation
  • C#/VB/F# language API bindings
  • D language API bindings
  • Go language API bindings
  • Java language API bindings

Who is using it?の項目でを見るとすでにいくつかのゲームやゲームエンジン,ツールで使用されているようでキューブマップ作成のオープンソースのツールcmftStudioなどでも使用しているようです.

cmftStudio
https://github.com/dariomanesku/cmftStudio

サンプルについては下記にまとまっていますが,一通り基本的なものはあるようです.

https://bkaradzic.github.io/bgfx/examples.html

これだけ幅広い環境をサポートするとシェーダの記述方法が気になりますが,GLSL風の文法の言語で記述して付属のコンパイラを使うことで各ターゲット向けを出すようです.

https://bkaradzic.github.io/bgfx/tools.html#shader-compiler-shaderc

Oculusにも対応しているようです.GithubのWho is using it?にAirMechというタイトルが紹介されているのがありますが,こちらのタイトルには「AirMech VR」というOculus対応版がありE3やTGS 2015, CEDEC 2015などでCrescent Bayのデモなどでおなじみですね.

https://www.carbongames.com/airmech/home.html

オープンソースなので自分でゲーム作りに活用するほかに,クロスプラットフォームのグラフィックスライブラリ作成の学習用にソースを見るというのもいいかもしれませんね.

なお,開発者のBranimir Karadžić氏は意見を募集中だそうです.

Your opinion on BGFX
https://www.gamedev.net/topic/671959-your-opinion-on-bgfx/

SIGGRAPH 2015 Moving Mobile Graphics のコース資料が公開に

SIGGRAPH 2015の”Moving Mobile Graphics”のコース資料が公開になっています.

Moving Mobile Graphics
https://community.arm.com/events/1155

モバイル特有の最適化(帯域幅の狭さをどうするか?)などのハードウェアよりな話から,Angry Birds Go!やFrostbiteのモバイル版の話題(Metalの話題があります),Unityの人のPBRのモバイル向けの最適化の話などのセッションがあるようです.

UnityのAras Pranckevičius 氏のSIGGRAPH 2015のセッションスライドが公開に

UnityのAras Pranckevičius 氏のSIGGRAPH 2015のセッション”Porting Unity to new graphics APIs”のスライドが公開になっています.

Porting Unity to new graphics APIs
http://aras-p.info/texts/files/201508-SIGGRAPH-PortingUnityToNewAPIs.pdf

このセッションはUnityのグラフィックス処理の内部処理をDirect3D12,Vulkan(一部の話だけ),Metal(これも一部の話題)に対応させていく話を書いています.

Direct3D12に関しては,単純なDirect3D11からの置き換えではパフォーマンスが良くなるとは限らないようですね.

実は遅い遅いと言われるDirect3D11でも,枯れてる分すでにドライバで最適化などされてて、新しいAPIでもAPIの特徴にあった最適化した書き方をしない状態では負けることもあるようですね.

Direct3D12の新機能は,描画の効率化するために様々な選択肢があるので,エンジン開発者が色々と試行錯誤しながら良い方法を見つけて行く必要がありそうですね.