今年もqiita アドベントカレンダーが始まりました。皆さんの興味のある分野は、c++、python、html、unity、UE4...と様々なものがあると思います。
ここは、地道に一人で、vulkan プログラムに関するチュートリアルを書いていく場所です。それでもよろしければ25日間よろしくお願いします。
##概要
このアドベントカレンダーは25日間かけてvulkan purogramingを入門していきます。vulkan purogramingに関する日本語の記事や、書籍が少ないため、入りにくい世界ではありますが。自分がグラフィクスエンジニアになるための窓口になれたら嬉しいです。
##vulkanとは
vulkanの前世代Openglは(1992年)IBMのPowerpc、pc98が流行っていた時代に登場しました。現在では、intelのcoreシリーズ、AMDのRyzen等のメニーコアCPUが主流ですが当時は、1コアのCPUが主流でした。multicore cpuができたのは2004年です。ほんとに最近のことですね。openglは、過去の遺産との互換性を維持するため、多くの弱点がある。これらのレガシーな環境をリセットして、新しくマルチスレッドや、シェーディング中間言語対応といった、近代的な技術が投入されたapiがvulkanです。vulkanはドイツ語で火山を意味するらしい.
##Openglの弱点?
####1.マルチGPU
Directxの場合DXGIアダプターを列挙することで複数のGPUを搭載したシステムで任意のGPUを選択して使用することができる。これによりGPGPU演算を実行させ、アプリケーションの並行処理させ、処理性能を向上させるいった使い方ができる。OpenGLでは、GPUを選択的に使用したり、それぞれのGPUに対して操作を行うことは、標準化されていない。nvidia SLIに対応したGPUを用いてSLI構成を行うことで、GPUドライバー側で分散処理させることはできるが、SLIは主にOpenGLやDirectxのグラフィックスレンダリングを自動的に分散処理して高速化する技術のためSLI環境下でのGPGPUは、多くの制約や注意点がある。SLIでは、ハードウェアメモリーのミラーリングが行われるため、2つのGPUをつないでもGPUメモリーの合計値にならない。
####2.GPGPU機能と、レンダリングコンテキスト機能
Opengl apiは必ずウィンドウを作成してから出ないとコンピュートシェーダーを利用することができない。つまり、スクリーンを必要としない処理でも、必ずウィンドウを生成しなければいけない
####3.マルチスレッド対応
Directxでは、マルチスレッドを活用して描画パフォーマンスを向上させる仕組みが導入されているが。Openglでは、相当機能をサポートしていない。
Directxでは、デバイスインターフェースがセーフスレッドのため、サブスレッドからのソース生成や、複数のスレッドからの同時生成に標準で対応している。しかしOpenglでは、レンダリングコンテキストを生成したスレッドのみがリソースを扱えるようになっているため、サブスレッドでリソース生成を行うには、wglShareLists()といったプラットフォーム依存のAPIを利用して明示的にコンテキストの共有を行うことが必要である
*1 DXGI: windowsから見たグラフィクスデバイスインターフェース
*2 Nvidia SLI: 複数のグラフィクスデバイスを並列動作させ、出力を一つにまとめて、描写処理を高速化させる技術
##まとめ
openglは、互換性を保つために変えられない部分が多くある。特にGPGPUとマルチスレッド対応について、Directxと比べて更新の対応が難しい部分がある。そのため新apiとしてVulkanを開発することによってこれらの新しい技術を搭載したlinux、windows、Mac OS、androidその他環境でも使えるオープンなグラフィクスapiを作ろうとしている。
その他気になることがありましたら、コメント、メール、twitterで連絡ください
##参考書
######書籍
Vulkan Cookbook
Learning Vulkan
Vulkan Programming Guide: The Official Guide to Learning Vulkan
Introduction to Computer Graphics and the Vulkan API
######youtube
The Khronos Group
Niko Kauppi
NvidiaDeveloper
Qualcomm Developer
連絡先
tweeter: tositada_nakada
mail: nakadasanda@outlook.com
寄付
paypal: tositada_nakada
Amazon: 欲しいものリスト