Vulkan & 雑談
はじめまして、初投稿です。
最近、グラフィックスAPIのVulkanを勉強しているのでそのことを書きます。
Vulkanってなんだ
Vulkan is a new generation graphics and compute API that provides high-efficiency, cross-platform access to modern GPUs used in a wide variety of devices from PCs and consoles to mobile phones and embedded platforms.
Vulkanは、PCやコンソール、モバイルフォン、組み込みプラットフォームといったものに使われている様々な種類のモダンなGPUにアクセスできる、高効率な、新しい世代のグラフィックス・コンピュートAPIです
パソコン・プログラムに詳しくない人向けに説明すると、
・グラフィックスAPI:コンピュータグラフィックスをプログラムで扱う場合に使うもの
・Vulkan:グラフィックスAPIの中で新しいやつ
パソコン・プログラムにそこそこ詳しい人向けに説明すると、
・グラフィックスAPI:GPUを操作するためのAPI群
・Vulkan:KHRONOS GROUPというところが作ったグラフィックスAPI
グラフィックス系にめちゃくちゃ詳しい人は間違いがあったら指摘してください。
Vulkan開発環境
OS : Windows10 Home
Vulkan : 1.1.108
Vulkanで何をしたのか - その①
「Vulkan Programming Vol.1 - スラリンラボ」という書籍をひたすら読む & ひたすら写経してました。
こちらの本文中で使われているソースコードは公開されています↓
まともに動作するソースコードがある…というのはとてもとてもありがたいですね…ソースコードが一番のリファレンスです。もちろん本文の解説もありがたいですが。
写経した結果、できたのが↓です。VulkanでVRMモデルの表示ができました。
Vulkanで何をしたのか - その②
レイマーチングやりました。
レイマーチングをやった理由としては
・バッファの用意(Discriptor?)がよくわからんので勉強したかった
・レイマーチングはバッファさえ用意できればそれなりに面白い絵が作れそうと思った
って感じですね。
ソースコードはGithubにあげておきました↓
Vulkan学習今後の課題
まずは初期化のところ(デバイスの設定)のところが全くわかっていないのでそこを理解しないと行けないですね。あとは複数パス、マルチスレッドなどでしょうか
レイマーチング作成の課題としては、uniformバッファを用意するときに値をすべて `vec4` で用意したのですが、`vec4` じゃなくてもいいんじゃない?ってところが多々あるので、直したいです。なぜか`vec4`じゃないとまともに動作しないんですよね…。この辺のことは↓の記事を読めばわかるかもしれません
あとウィンドウの作成などは GLFW を利用したのですが、GLFWは全く触ったことがないので、こちらも勉強しないとですね。
長期的な目標としては、「CEDEC2018 - ハイエンド3Dグラフィックスプログラマの育成と議論~育成の実例を交えて」 にて紹介されているテクニックを網羅したいですね。かなり難易度高そうですが、実際に業務でレンダリングエンジンを作っているレベルの方が実用的なテクニックを紹介してくれているので、挑戦してみたいですね。
ここから雑談
「勉強したことを公開する場所が欲しいなー」と思ってNoteに書くことにしました。
本当は、もっとしっかり勉強したあとに「マンガでわかるグラフィックスプログラミング」とかやりたいな~とか思ってたのですが、正直、今の学習進捗速度だといつ発表できるかわからんという悲しい問題があったので、進捗報告から始めることにしました。ひょっとしたらそのうちマンガ形式になっていくかもしれません。というか、そうしたい。
実は技術ブログ(?)をやるのは初めてではないのですが、前にやったときは2,3個記事を書いたら飽きてやめてしまいました。
今回はそうならないといいなー(棒