Vulkan (API)

Vulkanとは



Vulkan(ヴァルカン)は、クロノス・グループによって策定された、次世代のグラフィックスおよびコンピュートAPIです。PC、コンソールゲーム機、スマートフォン、組み込みシステムなど、幅広いプラットフォームに対応しており、オープンスタンダードかつロイヤリティフリーで利用できます。2016年2月16日にVulkan 1.0の仕様が公開されました。

Vulkanは、グラフィックスハードウェアのより深い層を制御することを目的としており、これによりオーバーヘッドを削減し、ハードウェアのポテンシャルを最大限に引き出すことが可能です。AppleのMetalやMicrosoftのDirect3D 12といったローレベルAPIと競合しますが、Vulkanはプラットフォームに依存しないため、様々なデバイスやオペレーティングシステムに対応できる点が大きな特徴です。

Vulkan登場の背景



Vulkanが登場する以前は、OpenGLおよびOpenGL ESがクロスプラットフォームなグラフィックスAPIとして広く利用されていました。しかし、OpenGLは古いハードウェア設計をベースにしているため、最新のGPUハードウェアとの乖離が進んでいました。また、OpenGLハードウェアを高度に抽象化しているため、移植性や開発の利便性は高いものの、AAAタイトルゲームのような高負荷なソフトウェアではオーバーヘッドが大きく、ハードウェアの性能を十分に引き出せないという課題がありました。

描画効率の低下は電力効率の低下にもつながるため、モバイルデバイスでは特に深刻な問題でした。そこで、SIGGRAPH 2014で、OpenGLを刷新し、ゼロから再構築する次世代標準3D API規格(glNext)の策定が発表されました。この際、マルチスレッド対応やシェーディング中間[[言語]]などの近代的な技術の導入が示されました。

GDC 2015では、新規格の名称が「Vulkan」となることが発表され、Direct3D 12と同様のコマンドキューベースのマルチスレッドレンダリング機能や、OpenCLとのプログラミング基盤共通化のためのSPIR-V中間表現の導入が明らかにされました。また、AMDのローレベルグラフィックスAPIであるMantleの要素技術がVulkanに取り込まれることも発表されました。

Vulkanという名称の由来は公式には発表されていませんが、同綴のドイツ語で「火山」を意味する単語であるという説が一部で取り上げられています。

2015年8月には、GoogleがAndroidでのVulkanサポートを発表し、2016年2月16日にはVulkan 1.0の正式仕様がリリースされました。主要なGPUベンダーもVulkan対応ドライバーの提供を開始し、Android 7.0 (Nougat) からOSレベルでのサポートが開始されました。

Vulkanのパイプライン



Vulkanはパイプライン方式を採用しており、グラフィックスパイプラインとコンピュートパイプラインの2種類があります。

グラフィックスパイプライン



グラフィックスパイプラインは、3Dモデルの描画処理を行う一連の操作です。複数のシェーダーステージ、固定機能パイプラインステージ、および1つのパイプラインレイアウトで構成されます。Primitive Shading モードの場合、以下のステージを経由します。

1. Input Assembler
2. Vertex Shader (頂点シェーダー)
3. テッセレーション(Tessellation Control Shader, Tessellation Primitive Generator, Tessellation Evaluation Shader)
4. Geometry Shader (ジオメトリシェーダー)
5. Vertex Post-Processing(クリッピング、座標標準化など)
6. Rasterization (ラスタライズ)
7. Early Per-Fragment Tests
8. Fragment Shader (フラグメントシェーダー)
9. Late Per-Fragment Tests
10. Blending

コンピュートパイプライン



コンピュートパイプラインは、1つの静的コンピュートシェーダーステージと1つのパイプラインレイアウトで構成されます。

シェーディング言語



VulkanのシェーダーはSPIR-Vで記述されます。SPIR-Vは他の高級シェーダー言語から事前にコンパイル可能です。Vulkanでは、OpenGLと同様にGLSLが最初の高レベルシェーディング言語としてサポートされています。また、Vulkan SDKに付属するオフラインシェーダーコンパイラーglslangValidatorでは、HLSLで書かれたソースコードも入力として使用可能です。

開発環境



Vulkanの公式ソフトウェア開発キット(SDK)として、LunarG社がLunarG Vulkan SDKをリリースしています。このSDKはWindows、Linux、macOSに対応しており、macOSではMoltenVKを間接的に利用しています。また、Vulkan対応デバイスドライバーや独自のSDK開発を希望するベンダー向けに、ICDローダーやアーキテクチャに関するドキュメントがGitHubで公開されています。

Androidでは、Android NDKリビジョン12以降でVulkan 1.0に正式対応しています。Android 10では、OpenGL ES実装に加えて、VulkanバックエンドのANGLEを利用したOpenGL ES 2.0互換実装も利用可能です。

補助ライブラリ



  • - GLFW: OpenGL向けのマルチプラットフォームライブラリですが、バージョン3.2以降でVulkanにも対応しています。
  • - vulkan-cpp: Googleが提供するVulkan用のC++向け抽象化ライブラリです。
  • - V-EZ: AMDが提供するVulkan用の簡略化ミドルウェアです。
  • - Anvil: AMDが提供するVulkan用フレームワークです。
  • - Falcor: NVIDIAが提供するVulkanおよびDirectX 12用のレンダリングフレームワークです。
  • - Vulkan Memory Allocator: AMDが提供するVulkan用メモリ管理ライブラリです。
  • - ANGLE: OpenGL ES互換レイヤーで、Vulkanなどのバックエンドを利用できます。

言語バインディング



  • - Vulkan-Hpp: Vulkan APIのC++バインディングです。
  • - VulkanSharp: Vulkan APIの.NETバインディングです。

互換レイヤー



  • - MoltenVK: Vulkan APIをAppleのMetal API上で使用するための互換レイヤーです。
  • - Dzn: Microsoftが開発を推進する、Vulkan APIをDirect3D 12 API上で使用するためのMesaバックエンドです。

MoltenVK



AppleのmacOS/iOSではVulkanがネイティブサポートされていませんが、Metal APIを利用してVulkanを実現するMoltenVKが開発されています。MoltenVKはオープンソース化されており、macOS/iOSでもVulkanを利用できるようになりました。

ベンダー横断のサポート



Vulkanは、初期の仕様ではOpenGL ES 3.1またはOpenGL 4.x以上をサポートするハードウェアで動作するとされていましたが、現在はVulkanをサポートするための新しいグラフィックスドライバーが必要となる場合があります。

Intel、NVIDIA、AMD



主要なGPUベンダー3社は、LinuxおよびWindows向けのドライバーを提供しており、Vulkan 1.2は比較的新しいハードウェアでサポートされています。AMD、Arm、Imagination Technologies、Intel、NVIDIA、Qualcommも、実際のハードウェアでVulkan 1.1ドライバーをサポートしています。

Google Android



多くのAndroidデバイスはOpenGL ESをサポートしていますが、Vulkanの対応状況はハードウェア、デバイスドライバー、OSバージョンに依存します。Android 7.0以降でVulkan 1.0を、Android 9.0以降でVulkan 1.1をサポートしています。

Apple



2021年6月現在、AppleデバイスによるVulkan APIのネイティブサポートはありません。MoltenVKを使用することで、iOSおよびmacOSでVulkanを利用できますが、いくつかの制限があります。

Qualcomm



Qualcomm SnapdragonプラットフォームのAdreno GPUは、Vulkan 1.0をサポートしています。SDKはAndroid Studio IDEをベースとしており、Android NDKが必要です。

脚注



関連項目




外部リンク



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。