2025/11/21 23:28 I learned Vulkan and wrote a small game engine with it

ロボ子、Vulkanでゲームエンジンを作った人がいるのじゃ!しかも3ヶ月で完成させたらしいぞ。

3ヶ月ですか!すごいですね。Vulkanは学習コストが高いと聞きますが…。

そうじゃな。記事によると、その人はOpenGLから始めて、Blinn-Phongライティングとかシャドウマッピングを実装したらしいぞ。段階的に進めるのがコツじゃな。

なるほど、いきなりVulkanから入るのではなく、OpenGLで基礎を固めるのが良いんですね。

その通り!それに、バイクシェッド(些細なことにこだわりすぎること)を避けて、本当に必要なものだけを実装するのも重要らしいぞ。

確かに、最初から完璧を目指すと時間がかかりすぎますね。必要な機能から順番に実装していくのが効率的ですね。

記事によると、DirectXはAAAゲームに、WebGL/WebGPUはWebに、MetalはmacOS/iOSに適しているらしい。その人はWindows/Linux向けの小規模3Dゲーム開発にVulkanを選んだみたいじゃ。

プラットフォームによって最適なAPIが違うんですね。WebGPUはOpenGL/WebGLよりも優れているけど、Vulkanほど自由度が高くない、と。

そうそう。Vulkanを学ぶには、vkguideが役立つらしいぞ。私も今度見てみようかの。

私も参考にさせていただきます!ちなみに、そのエンジンは何という名前なんですか?

EDBR(Elias Daler’s Bikeshed Engine)と言うらしい。コードはGitHubで公開されているぞ。19k行のコードで構成されていて、そのうち6.7k行がグラフィックス関連らしい。

結構な規模ですね!フレームのレンダリング順序も細かく記載されていますね。スキニング、CSM、ジオメトリ+シェーディング、深度解決、ポストFX、UI…。

推奨Vulkanライブラリも参考になるのじゃ。vk-bootstrap, Vulkan Memory Allocator (VMA), volk…ふむふむ。

GfxDeviceクラスは、Vulkanコンテキストの初期化とか、スワップチェーンの作成と管理を行うんですね。重要な部分ですね。

シェーダーはビルド時にプリコンパイルされて、glslcが使われるのか。ユニフォームは記述子セットにグループ化されて、プッシュ定数とバインドレス記述子を使って複雑さを軽減…なるほど。

描画ステップは「パイプライン」クラスに分離されているんですね。VK_KHR_dynamic_renderingを使ってレンダリングパスとサブパスを回避、プログラマブル頂点プル(PVP)とバッファデバイスアドレス(BDA)を使用…。

バインドレステクスチャを使ってテクスチャスロットの制限を回避するのは賢いな。動的データは、GPU上のN個のバッファをスワップするか、CPU上にN個のステージングバッファを持つGPU上に1つのバッファを使用…。

デストラクタの代わりに明示的なクリーンアップ関数を使用、同期は手動で管理され、パイプラインバリアが使用される…。

多数のスプライトは、1回のドローコールで描画され、頂点座標とUVはgl_VertexIndexを使用して生成されるのか。スケルトンアニメーションのスキニングは、コンピュートシェーダーで行われるのか。面白いな。

ゲームロジックとレンダラーは分離され、描画コマンドが使用されるんですね。シーンはBlenderで作成され、glTFとしてエクスポートされる、と。

エンティティプレハブはJSONで記述されるのか。フォワードレンダリングにより、MSAAを簡単に実装できるのは良いな。

UIシステムはRobloxのUI APIに触発されたんですね。Dear ImGuiは便利な開発ツールだけど、sRGBの問題があるから、カスタムバックエンドが使用される、と。

Jolt Physicsが物理演算に使用され、enttがエンティティコンポーネントシステムに使用されるのか。openal-soft, libogg, libvorbisがオーディオに使用され、Tracyがプロファイリングに使用されるのか。色々使ってるのじゃな。

Vulkanに切り替えることで、グローバル状態がなくなり、APIがより使いやすくなり、抽象化が減り、検証エラーが改善され、RenderDocでのデバッグが可能になり、GPUとOS間の一貫性が向上し、より優れたシェーディング言語を使用できるようになり、グラフィックスパイプラインのあらゆる側面をより細かく制御できるようになった、と。

Vulkan、奥が深いぞ!よし、私もVulkanで何か作ってみるかの!まずは…おやつじゃ!

博士、おやつも大事ですが、その前に少しはコードを見てみましょうよ…って、もう行っちゃった。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。