AndroidでVulkan事始め
株式会社Aiming
藤井 章暢
アジェンダ
• 自己紹介
• Vulkanとは?
• Vulkanの特徴
• Androidでこと始めるには
• Vulkanの対応状況
• まとめ
自己紹介
• 名前:
– 藤井 章暢
– ふじい あきのぶ
• 職業:
– エンジニア
• 好きなもの:
– ゲーム、犬、きれいな絵
• その他:
– Facebookで色々つぶやいています
Vulkanとは?
What is Vulkan?
Vulkanとは?
• 「Open GL」などのAPI策定を行っている
「Khronos Group」が発表した
グラフィックスAPI
• Windows、Linux、Androidに対応
– Macは対応してません・・・
– Metalを使えということですね、わかります
Vulkanとは?
• 2016年2月16日
LunarG社から Windows、Linuxの
Version1.0 SDKをリリース
– 1ヶ月に2~3回アップデートしている
• Android NDK, Revision 12から
正式サポート開始(2016年6月)
• API Level 24(Android 7.0)以上必要
– 大抵の端末はまだ対応していない
Vulkanの特徴(メリット編)
Features of Vulkan
Low Level API
• ハードウェアに近いAPI
• コマンド発行のコストが低い
マルチスレッド対応
• マルチスレッド前提のAPI設計なので
CPU処理を分散させやすい
OpenGLは・・・?
• マルチスレッド向き設計ではなかった
ので、1コアが頑張らなければならない
ことがざらにあった。
Vulkanは・・・?
• 各スレッドがCommandBufferに
描画コマンドを積み込んで、
CommandQueueに積み込めば分散可能
SPIR-Vに則ったシェーダ仕様
• VulkanはSPIR-Vという中間言語に
則った仕様でシェーダが動いている
何がメリット?
• 決まったフォーマットがあるので
事前にシェーダをコンパイルしておける
– OpenGLはランタイムでコンパイルする仕様
なので、無駄なオーバーヘッドがかかってた
• SPIR-Vのフォーマットさえ守っていれば
コンパイラに流し込んで動かせる
何がメリット?
• KhronosGroup/glslang
– https://github.com/KhronosGroup/glslang
• SPIR-Vフォーマットで出力できれば
元の言語はなんでもいい
• その気になれば
自分の好きな言語でシェーダーが書ける
Vulkanの特徴(デメリット編)
Features of Vulkan
ざっくりとした違い
• Khronos Vulkanがリリースされたようなのでメモ
• http://qiita.com/eaglesakura/items/6ac27f2157fb18a98531
移植には向かない
• Vulkanに載せ替えたからと言って
速くなるわけではない
– CPU処理を速くするものなので
描画自体が速くなるわけではない
– 余計なオーバーヘッドを下げるには
設計から見直す必要がある
きっちり設計した
レンダラーシステムが必要
• すべての描画設定をプログラムで
制御する必要がある
– OpenGLは途中でブレンドステートや設定を
変更するのは容易
– 対してVulkanは諸々の設定がまとまりなので
ちょっとだけ変更がすごく面倒
自前で管理しないといけない
ものが非常に多い
• ドライバがやってくれていたものを自前で管理する必要がある
– グラフィックメモリ、アロケータ、Etc…
結局どういう人向け?
• 描画処理でかかるオーバーヘッドを
減らしてCPU側に処理時間をかけたい人
– CPU側で頑張る画像処理アプリなど
結局どういう人向け?
• 最新技術を取り入れたい人
– いち早く取り込んで新しい技術の検証に
使いたい場合は自分で取り込むのが最善
• 自社エンジンや自社フレームワークに
組み込みたい人
– 既存のエンジンやフレームワークの対応を
待つのはどうしても時間がかかる
Androidでこと始めるには
Getting Start with Android
Androidでこと始めるには
• まずは公式のサンプルを動かそう
– googlesamples/vulkan-basic-samples
– https://github.com/googlesamples/vulkan-basic-samples
• 必要環境:
– Android Studio 2.2.2以上
– Android SDK API Level 24以上
– Android NDK Revision 12以上
Androidでこと始めるには
• SaschaWillems/Vulkan
– https://github.com/SaschaWillems/Vulkan
– 超優秀なサンプル
– Vulkanの対応する全プラットフォームの
サンプルがあります
– 一部フレームワーク化されているので
ライブラリ作成の参考にもなります
Androidじゃないけど・・・
• akinobufujii/VulkanSamples
– https://github.com/akinobufujii/VulkanSamples
• 藤井が作ったWindows版のサンプルです
• みんな大好き、男気一本ソース
– 汚くてすみません・・・(´・ω:;.:...
• 煮るなり焼くなり好きにしてください
– Android版も公開予定!(予定は未定)
Vulkanの対応状況
Correspondence situation of "Vulkan"
Unity
• Unity5.6からVulkan APIをサポート
– 記事によるとレンダリングパフォーマンスが
最大60%向上したらしい
Unreal Engine 4
• GithubにVulkanに対応した
ソースコードを公開中
– Unreal Engine 4のアカウントと
Githubのアカウントを紐付けないと
ソースコードは見れない
• YouTubeでデモを公開中
– https://www.youtube.com/watch?v=FnKu7MLB7vQ
– Galaxy S7上でのデモ
Cocos2d-x
まとめ
Summary
まとめ
• スマホにも低レベルのレンダリングAPIが
用意されてきた
– ただし、実用化されるにはまだ掛かりそう
• 有名なエンジンやフレームワークも
対応を見せ始めている
• 今のうちに触っておけば、
実用化されるときに困らないかも
知れない
– ただし敷居は高い、めっちゃ高い
ありがとうございました!

Androidでvulkan事始め