はじめに:グラフィックスAPIという縁の下の力持ち
PCでゲームしたり、3Dソフトを動かしたり、最近だとAIのGPU計算したりするとき、裏で何が動いているか考えたことがあるだろうか。
「GPU使ってるんでしょ?」
まあそうなんだけど、もう一歩踏み込んでみると、アプリケーションとGPUの間には「翻訳者」がいる。それがグラフィックスAPIだ。
OpenGL、DirectX、Metal、そしてVulkan。これらはアプリケーションからの「このポリゴン描いて」「この計算やって」という命令を、GPUが理解できる形に変換してくれる。いわば、人間とGPUの間に立つ通訳のような存在である。
で、今日の主役であるVulkan。こいつ、なかなか面白い立ち位置にいる。
Vulkanとは何者か
Vulkanは、Khronos Group(クロノスグループ)という非営利団体が策定したオープンスタンダードなグラフィックスAPIだ。2016年にバージョン1.0がリリースされた、比較的新しめのAPIである。
Khronos Groupって聞いたことあるだろうか? OpenGLやOpenCL、WebGLなんかも策定している団体で、AMD、NVIDIA、Apple、Google、Intel、Valveといった錚々たるメンバーが参加している。つまり業界のオールスターチームが作ったAPIというわけだ。
名前の由来は公式には明かされていないが、ドイツ語で「火山(Vulkan)」を意味するという説がある。OpenGLの次世代版として「glNext」と呼ばれていた時期もあったが、最終的にVulkanという名前に落ち着いた。
OpenGLからVulkanへ:なぜ新しいAPIが必要だったのか
ここでちょっと歴史を振り返ってみよう。
OpenGLは1992年に登場した老舗中の老舗だ。Silicon Graphics(SGI)が開発したIRIS GLをベースに、業界標準として設計された。当時としては画期的で、長年クロスプラットフォームの3DグラフィックスAPIとして君臨してきた。
でも30年以上も経つと、さすがにガタが来る。
OpenGLが設計された頃のGPUは、今とは全然違う構造だった。APIがハードウェアを抽象化しすぎていて、最新GPUの性能を引き出しきれない。CPU-GPU間の同期処理が重い。マルチスレッドに弱い。ドライバのオーバーヘッドが大きい。
要するに、現代のGPUにとってOpenGLは「おせっかいすぎる翻訳者」になってしまった。プログラマーが「ここはこうしたいんだけど」と思っても、OpenGLが勝手に「いやいや、こうしといたほうがいいですよ」と最適化(のつもり)を挟んでくる。
そこでVulkanが登場した。
Vulkanの特徴:低レベルAPIの真髄
Vulkanの最大の特徴は「ローレベルAPI」であることだ。
OpenGLがハイレベル(高い抽象化)なら、Vulkanはローレベル(低い抽象化)。つまり、GPUをより直接的に制御できる。
これを料理に例えてみよう。OpenGLは「おまかせコース」だ。シェフが適当にいい感じにしてくれる。一方Vulkanは「自分で調理場に立つ」感じ。材料の仕入れから火加減まで全部自分で決められる。その分、料理の腕が問われるけど、思い通りの味が出せる。
具体的なメリットをいくつか挙げてみよう。
1. 低いCPUオーバーヘッド
描画命令をGPUに送る際のCPU負荷が大幅に軽減される。ゲームのフレームレートが20〜30%向上したという報告もある。
2. 明示的なマルチスレッド対応
OpenGLはシングルスレッドでの動作が基本だったが、Vulkanは最初からマルチスレッドを前提に設計されている。現代のCPUはコア数が増える一方なので、これは大きい。
3. クロスプラットフォーム
Windows、Linux、Android、さらにはNintendo Switchでも動く。DirectXはWindows専用だけど、Vulkanはオープンスタンダードなので移植性が高い。
4. 統合されたグラフィックス/コンピュートAPI
OpenGLとOpenCLを別々に使っていた処理が、Vulkan一本で済む。レイトレーシングにも対応。
ただし注意点がある。ローレベルAPIゆえに、使いこなすには高度な知識が必要だ。メモリ管理、同期、パイプライン構築...全部自分でやる必要がある。「自由には責任が伴う」というやつである。
Apple Siliconの話:なぜVulkanが「救世主」なのか
さて、ここからが本題。Apple SiliconとVulkanの関係だ。
Appleは2018年にOpenGLを非推奨にした。代わりに独自のグラフィックスAPI「Metal」を推進している。MetalはAppleデバイス専用で、Vulkanと同様のローレベルAPIだ。パフォーマンスも良好。
でも問題がある。MetalはApple専用なのだ。
クロスプラットフォームでゲームやアプリを開発したい場合、Windows向けにはDirectXやVulkan、Mac向けにはMetal、と別々に対応する必要がある。開発者にとってはかなりの負担だ。
そこで登場するのがMoltenVK。
MoltenVKは、Vulkan APIをMetalの上に「被せる」ライブラリだ。Vulkanで書かれたコードをMetal経由で動かせる。Khronos Groupがホストするオープンソースプロジェクトで、Apache License 2.0で公開されている。
つまり、こういうことができる。
- Vulkanで開発したゲームを、そのままmacOSやiOSで動かせる
- 一つのコードベースでWindows/Linux/Mac/モバイルに対応できる
MoltenVKの最新動向
MoltenVKは精力的に開発が続けられている。
2020年12月にMoltenVK 1.1.1がリリースされ、Apple Silicon(M1チップ)への対応が実現した。Apple Siliconの新しいGPUピクセルフォーマットやデバイスプロパティに対応するための調整が行われた。
2023年1月のMoltenVK 1.2.2でVulkan SDK 1.3.239への対応が追加された。
そして2025年5月1日、MoltenVK 1.3がリリース。Vulkan 1.3のサポートが実現した。
最新の1.4系ではVulkan 1.4への対応も進んでいる。
公式リポジトリはこちら:
https://github.com/KhronosGroup/MoltenVK
以下、GitHubの説明から引用。
MoltenVK is a layered implementation of Vulkan 1.4 graphics and compute functionality, that is built on Apple's Metal graphics and compute framework on macOS, iOS, tvOS, and visionOS.
MoltenVK allows you to use Vulkan graphics and compute functionality to develop modern, cross-platform, high-performance graphical games and applications, and to run them across many platforms, including macOS, iOS, tvOS, visionOS, Simulators, and Mac Catalyst, and all Apple architectures, including Apple Silicon.
(和訳)
MoltenVKは、AppleのMetal グラフィックス/コンピューティングフレームワーク上に構築された、Vulkan 1.4のグラフィックスおよびコンピューティング機能のレイヤー実装です。macOS、iOS、tvOS、visionOSで動作します。
MoltenVKを使えば、Vulkanのグラフィックスおよびコンピューティング機能を活用して、モダンでクロスプラットフォームな高性能グラフィカルゲームやアプリケーションを開発し、macOS、iOS、tvOS、visionOS、シミュレーター、Mac Catalystを含む多くのプラットフォーム、そしてApple Siliconを含むすべてのAppleアーキテクチャで実行できます。
実際どれくらい使われているのか
MoltenVKの実績は意外と豊富だ。
ゲーム分野
- Dota 2:Valveが早期からMoltenVKを採用。OpenGLよりもVulkan+MoltenVKのほうがパフォーマンスが良いというベンチマーク結果が出ている
- RPCS3(PS3エミュレーター)、Dolphin(GameCube/Wiiエミュレーター)もMoltenVK対応
開発ツール
- Wine:macOS上でWindowsアプリを動かすWineもMoltenVKによるVulkanサポートを導入
- Qt:クロスプラットフォームGUIフレームワークのQtも、macOSでのVulkanサポートにMoltenVKを使用
3DCGソフト
- Blender:レンダリングバックエンドにVulkanを採用する方針を発表。将来的にOpenGLから移行予定
制限事項と注意点
MoltenVKは万能ではない。あくまでMetalの上にVulkanを「エミュレート」しているので、一部の機能制限がある。
Vulkan 1.0の準拠テストはほぼパスしているものの、Vulkan 1.1〜1.3の一部機能は対応中のものがある。また、古いハードウェアやMetalのバージョンによっては制限事項が発生することもある。
開発者向けの注意点としては、LunarGが公開している「The State of Vulkan on Apple Devices」というホワイトペーパーが参考になる。
https://www.lunarg.com/wp-content/uploads/2024/03/The-State-of-Vulkan-on-Apple-LunarG-Richard-Wright-03-18-2024.pdf
このドキュメントでは、MoltenVKのアプリケーションへの組み込み方法、Vulkan SDKの活用法、App Storeへの提出時の注意点などが詳しく解説されている。
まとめ:VulkanはApple Siliconの「救世主」なのか
正直に言えば、「救世主」というのは少し大げさかもしれない。
AppleがMetalを推進している以上、macOSやiOSでネイティブに最高のパフォーマンスを出したければMetalを使うのが正解だ。MoltenVKはあくまでブリッジであり、変換レイヤーを挟む分のオーバーヘッドは存在する。
しかし、クロスプラットフォーム開発という観点では、MoltenVKの存在価値は非常に大きい。
Vulkanで開発すれば、Windows、Linux、Android、そしてmacOS/iOSまでカバーできる。開発リソースが限られている中小規模のチームにとって、これは魅力的な選択肢だ。
また、既存のVulkanアプリケーションをAppleプラットフォームに移植する場合、MoltenVKがなければ一から書き直す必要がある。その意味で、MoltenVKは「移植の救世主」と言えるだろう。
Apple Silicon Macを使っていて、「このゲームMac版ないんだよな」と嘆いている人も多いと思う。MoltenVKの成熟によって、そういった状況が少しずつ改善されていくことを期待したい。
Vulkan、そしてMoltenVK。地味だけど重要な技術である。
参考リンク
- Vulkan公式サイト: https://www.vulkan.org/
- MoltenVK GitHub: https://github.com/KhronosGroup/MoltenVK
- Khronos Blog - Developing with Vulkan on Apple iOS: https://www.khronos.org/blog/developing-with-vulkan-on-apple-ios
- Vulkan Wikipedia(日本語): https://ja.wikipedia.org/wiki/Vulkan_(API)
- MDN - OpenGLとVulkanの比較(参考): https://developer.mozilla.org/