2019-07-13_ヘッダーイラスト

Vulkan進捗報告、あるいは開発環境構築

Vulkan学習の進捗報告です。

単なる進捗報告だとVulkan習得のためにならないと感じているため、学習したことを簡単にまとめようかと思います。今回まとめるのは、タイトルにある通り、開発環境構築の話です。

参考文献

参考文献についてご紹介します

Vulkan Tutorial
* メインの参考文献です。基本的にこちらの内容をもとに開発を進めています

API without Secrets: Introduction to Vulkan
* Intel が提供しているチュートリアルです。2016年発行で少し古いですが、説明がとても詳しいです。ハードウェアレベルでの実装の解説などがあります。

Vulkan Programming Vol.1 - すらりんラボ
* 以前参考にしていた本です。日本語であることと、Vulkanの基礎が網羅されている点から、一番最初に読む本としておすすめします。

Vulkanの特徴

Vulkanの特徴について解説します。Vulkanの特徴について知ることは、本当にVulkanを学習する必要があるのかということを判断するために必要です。

Vulkanはプラットフォームに依存しないAPIである

Windows、Linux、Androidなど、クラスプラットフォームでの開発が可能です。

Vulkanは低レベルでの制御が可能なAPIである

OpenGLなどに比べて、低レベルの制御が可能であるため、アプリケーション毎に細かく最適化できます。これにより、より良いパフォーマンスを出すことが可能です。その反面、学習に多大な時間がかかるため、万人向きのAPIとは言えません。コンピュータグラフィックスに強い興味があるプログラマー向けになっています。
旧来のOpenGLやDirect3Dはすぐさま廃止になる予定はありません。もし、コンピュータグラフィックスよりゲーム開発に興味がある場合は、OpenGL/Direct3Dを使用することも検討してください。
また、UnityやUnrealEngineを使用するのも良い手段です。

Vulkan開発を行うための前提条件(ハードウェア・ツール類)

* Vulkanに対応しているグラフィックカードとドライバー
* C++の経験(RAII  initializer lists
* C++ 11がコンパイルできる環境(VisualStudio 2013+, gcc 4.8+)

Vulkan開発を行うための前提条件(知識)

基礎的な3DCGの開発経験、または3DCGのアルゴリズム/数学の理解が必要です。3DCGの基礎については、次の参考文献を参照してください。

Learning Modern 3D Graphics Programming
Ray tracing in one weekend
Physically Based Rendering:From Theory To Implementation

以下はVulkanを使用しているゲームエンジンのプロジェクトです。設計などの参考にしてください

Quake
DOOM 3

開発環境構築

こちらのチュートリアルを開始するための開発環境構築方法をまとめます。Windows10での開発環境を想定しています。

VisualStudioでプロジェクトを作成する

とりあえず、VisualStudio2017でプロジェクトを作成します。

VisualC++ > Windowsデスクトップ > Windowsデスクトップウィザード

プロジェクト設定は以下のように設定してください

VulkanSDKインストール

LunarG - VulkanSDK からSDKをダウンロード & インストールします

VulkanSDKのインストールが完了すると、以下の環境変数が追加されます

VK_SDK_PATH
VULKAN_SDK

プロジェクトにVulkanSDKを追加する

VisualStudioのプロジェクトにVulkanSDKを追加します。

まずはインクルードディレクトリを追加します。プロジェクトのプロパティを開いてください。次に画像を参考にして、インクルードディレクトリの設定を行ってください

次に、ライブラリディレクトリの設定を行います。画像を参考に、ライブラリディレクトリの設定を行ってください

ライブラリのリンクを設定します。画像を参考に設定をおこなってください

最後に、言語設定をISO C++17にします

GLFWをインストールする

Vulkanはプラットフォームに依存しないAPIであるため、各プラットフォームごとのウィンドウを生成する機能は用意されていません。ウィンドウを生成するためには、GLFWというライブラリを使用してウィンドウを作成します。GLFWはウィンドウ生成だけでなく、他のプラットフォーム固有の機能も抽象化されています。

VisualStudioのプロジェクトでGLFWをインストールするには、NuGetを利用すると便利です。

ソリューションエクスプローラーからソリューションを右クリックし、NuGetパッケージの管理を選択してください

検索入力欄に"GLFW"と打ち込み、GLFWパッケージをインストールします。

GLMをインストールする

GLMは線形代数の演算を支援するライブラリです。こちらもNuGetを利用してインストールします。NuGetの検索入力欄に"glm"と入力して検索してください

main.cppを追加する

以下のmain.cppを追加し、Build & Runしてください

#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>
#include <iostream>
int main() {
    glfwInit();
    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
    GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);
    uint32_t extensionCount = 0;
    vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
    std::cout << extensionCount << " extensions supported" << std::endl;
    glm::mat4 matrix;
    glm::vec4 vec;
    auto test = matrix * vec;
    while(!glfwWindowShouldClose(window)) {
        glfwPollEvents();
    }
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}

ウィンドウが出たら成功です。

ここから雑談

とりあえず、Vulkanの開発を行うまでの環境構築についてざっと解説しました。しかし、noteはこういうチュートリアルをまとめるにはあんまり向いていませんね…

今後は、Githubのwikiの方にまとめていこうかと思います。noteにも投稿する予定ですが、noteの方には簡単な概要だとか感想だとかマンガだとかをのせていこうかと思います。

この記事が気に入ったらサポートをしてみませんか?