Vulkan進捗報告、あるいはSwapchainについて
Vulkan学習の進捗報告です。
前回まで
前回は開発環境構築について解説しました。
前回の反省として、noteはこういった技術説明には向いてないという気づきがありました。そこで、Githubのwikiの方に書くことにしました。
いきなりSwapchainから書き出したのは、すでに学習が進んでいてSwapchainのチャプターに入っていたためです。これ以前のまとめはいずれ作ります。(お盆休みの宿題かな?)
まぁ、とにかくこれからはGithubのwikiにまとめを書いていきますのでよろしくおねがいします。
ここから雑談
VulkanとかDirect3D12とかの学習をしようとすると、参考文献の最初の方によく書かれているのが
Vulkan or Direct3D12 は難しいから覚悟しておけ
といったことです。
実際 Vulkan Tutorial には「Vulkanはグラフィックスプログラムに強い興味がある人向けだから単にゲーム作りたいだけならUnityとかUnrealEngine使え(意訳)」と書いてあるし、DirectXTK12のGetting Started には「先にDirectX11やれ」と書いてあります。
自分がグラフィックスAPIの学習を開始したときもこういったアドバイス(?)に悩まされました。先に古いグラフィックスAPI(OpenGL or DirectX11)を学習したほうがいいのかなと。
その後、WebGLとDirectX11はちょっとだけやりましたがすぐやめてしまいました。やめた理由は以下の2つです。
* 参考文献が古くてサンプル通りに実装しても動かないことがある
* 将来的に使いそうな予感がしない
そしてVulkanの学習を開始してしまいました。
Vulkanの学習をしてわかったのは、Vulkanなどの低レベルグラフィックスAPIが難しいのはハードウェアやOSの知識を要求される点にあるということです。
例えば、GPUのグラフィックスパイプライン処理、GPUへの命令群・アセットは一旦CPU側が用意してメモリに積んでおいてからGPU起動をかけるといったフロー、レンダリング結果を画面に表示するためどうやってレンダリング結果をウィンドウ制御にわたすか、といったようなことを理解していないとVulkanは理解できないでしょう。
WebGLなどはVulkanほどハードウェアの知識は要求されないので、WebGLの学習はVulkan学習のためにあんまり役に立たなかった、というのが私の感想です。
Vulkanが難しいのは事実ですが、単に難しいというだけではなんのアドバイスにもなっていないので、Vulkanを理解するために必要な前提知識とそれを習得するためのフローを整備できるといいですね。この学習フロー、めちゃくちゃ長くなりそうですが…