5. シェーダにデータを与える

この章では、シェーダに計算のためのデータを外から与える方法について学びます。これまでのコードでは、頂点の位置などの数値はシェーダ内に埋め込んでいました。こんな実装はもちろん実用的ではありません。

頂点の座標や色など、モデルを表す情報は、普通はシェーダとは別にデータとして読み込んでシェーダに与えます。

この章では4章までで作成した「三角形を表示する」プログラムを、「外から与えたデータを用いて三角形を描く」ようにすることが目標です。任意のデータを使ってポリゴン=三角形の集合を描くことができるようになれば、モデルの表示などは目前です。

さて、重要なことですがシェーダは普通のプログラムと違い、CPU上ではなくGPU上で動くプログラムです。そのため、普通のメモリ上にある変数の値などは基本的に読み込めません。

シェーダにデータを渡すためには、データをGPUからアクセスできるメモリ(いわゆるVRAMなど)に置いておく必要があります。こうしたGPUからアクセスできるようなメモリのことを、Vulkanにおいてはデバイスメモリと呼びます。

デバイスメモリを自由に操作できるようになるため、この章では「バッファ」の使い方について解説していきます。バッファとは、デバイスメモリ上のデータ列を表すオブジェクトです。デバイスメモリに触るために毎回必ず必要という訳ではありませんが、デバイスメモリ上のデータを指定してシェーダに受け渡したり演算させるためには必要不可欠の存在です。

また、シェーダにデータを読み込ませる際は、目的となるデータの読み込み方をあらかじめシェーダに教える必要があります。このために用意する「説明書き」のようなデータが「デスクリプション」「デスクリプタセット」などです。パイプラインにこれらの情報を付け加えることで、初めてシェーダからデータが読めるようになります。

この章では主に「バッファ」と「デスクリプタ」について説明することになります。

それから、(当然かもしれませんが)シェーダの側も外から読み込んだデータを使うようなプログラムを書く必要があります。この章ではその書き方についても説明していきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です