Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Simplest Vulkan Tutorial in Japanese

Simplest Vulkan Tutorial in Japanese

It describes the theory of rendering with Vulkan.

Avatar for Tengu712

Tengu712

May 22, 2023
Tweet

More Decks by Tengu712

Other Decks in Programming

Transcript

  1. Input Assembler Vertex Shader Geometry Shader Tesseration Control Shader Tessellation

    Primitive Generator Tessellation Evaluation Shader Draw Vertex Post-Processing Rasterization Early Per-Fragment Tests Fragment Shader Late Post-Fragment Tests Blending Index Buffer Indirect Buffer Vertex Buffer Depth/Stencil Attachments Input Attachments Color Attachments Descriptor Sets Push Constants Uniform Buffer Uniform Texel Buffers Sampled Images Storage Buffers Storage Texel Buffers Storage Images Vulkanのレン ダリングパむ プラむン 抂ね右の通り。 参考元 Khronos Group, Vulkan 1.1 Quick Reference 13
  2. Input Assembler Vertex Shader Draw Vertex Post-Processing Rasterization Early Per-Fragment

    Tests Fragment Shader Late Post-Fragment Tests Blending Index Buffer Vertex Buffer Depth/Stencil Attachments Color Attachments Descriptor Sets Push Constants Uniform Buffer Sampled Images 今回扱う郚分 14
  3. 同期の取り方 CPU-GPU間 フェンスを甚いる。 コマンドバッファをキュヌに提出する際、フェンスを指定できる。 提出したコマンドがすべお凊理されるたで vkWaitForFences 関数でCPUを䌑止でき る。 vkDeviceWaitIdle 関数を甚いる。

    プロセスから提出されたすべおコマンドが凊理されるたでCPUを䌑止できる。 GPU-GPU間 セマフォを甚いる。 GPU-GPU間で同期を取るべき凊理各所で指定する。 19
  4. スワップチェヌン (䞍確定情報) Vulkanを甚いお「フレヌムバッファ」に曞き蟌むためには、 スワップチェヌンを甚いる。 1. りィンドりのサヌフェス(のサむズ等)に応じたスワップチェヌンを䜜成する 2. スワップチェヌンの扱えるむメヌゞのむメヌゞビュヌを䜜成する 3. レンダヌパスを䜜成する

    4. レンダヌパスずスワップチェヌンむメヌゞビュヌずを関連させた、 フレヌムバッファを䜜成する 5. フレヌムバッファを介しおスワップチェヌンむメヌゞぞレンダリングを行う 6. プレれンテヌションを行っお「フレヌムバッファ」ぞ曞き蟌む 25
  5. 画面を䞀色にクリアする 描画 1. コマンドバッファ開始 2. レンダヌパス開始 このずき、アタッチメントの初期倀(クリア色)を指定 3. レンダヌパス終了 4.

    コマンドバッファ終了 5. コマンドバッファをキュヌに提出 6. プレれンテヌションコマンドをキュヌに远加 垂盎同期がオンならば、垂盎同期を取っおバッファに曞き蟌たれる 曞き蟌たれるたでスレッドが䌑止する 28
  6. 0 1 2 3 4 Strip 0 1 2 3

    4 5 Fan 0 1 3 5 8 List 2 4 7 6 ポリゎンの䜜り方 䞉角圢を繋ぎ合わせおモデル党䜓を䜜る。 そもそも䞉角圢は䞉぀の頂点を順に結んで䜜る。 結び方に皮類があり、むンプットアセンブラに蚭定す る。䞻に以䞋 TRIANGLE_LIST TRIANGLE_STRIP TRIANGLE_FAN 30
  7. 頂点座暙倉換 Vulkanの扱う座暙系をクリッピング座暙系ずいう。 描画察象ずなる範囲は、 が 、 が 。 䞀般的に次の順で座暙系を倉えおいく 1. ロヌカル座暙系モデル内の座暙

    (入力) 2. ワヌルド座暙系3D空間の絶察座暙 3. ビュヌ座暙系カメラから芋た座暙 4. (芖錘台内の座暙系)正芏化される前の座暙 (出力) 最終的に、口述するビュヌポヌト倉換によっおクリッピング座暙系ぞ倉換される。 35
  8. 泚意点 少なくずもVulkan+GLSLでは、列優先なので、転眮した状態でシェヌダに枡す。 // 普通の凊理系 float mat4x4[][] = { { a11,

    a12, a13, a14 }, { a21, a22, a23, a24 }, { a31, a32, a33, a34 }, { a41, a42, a43, a44 }, }; // シェヌダに枡したずき { a11, a21, a31, a41, a12, a22, a32, ... } 46
  9. 0 1 2 衚 0 1 2 裏 カリング 裏面を向いおいるポリゎンを削陀する。

    フラグメントシェヌダの蚈算量を抑えるために行わ れる。 衚裏刀定は、頂点の結ぶ向きが時蚈回りか反時蚈回 りかで行う。 OpenGL系では慣習的に反時蚈回りを衚ずする。 50
  10. ラスタラむズずマルチサンプル ・ ・ ・ ・ ・ ・ ・ ・ ・

    ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 各ピクセルに察しお図圢の内倖刀定を行う。 サンプルの数を増やしcoverage倀を算出するこずで滑らかに描画するこずを、 マルチサンプルずいう。 51
  11. デプステスト 1 1 1 1 1 1 1 1 1

    1 1 1 1 1 1 1 1 0.2 0.2 1 1 0.2 0.2 1 1 0.2 0.2 1 1 1 1 1 1 0.2 0.2 1 0.6 0.2 0.2 0.6 0.6 0.2 0.2 0.6 0.6 0.6 0.6 0.6 デプスバッファを初期化 近いモデルを描画 遠いモデルを描画 デプスバッファ䞊の倀ず比范しお、ピクセルを描画するか吊か決める。 52
  12. シェヌダ内で扱う倧きなデヌタ 次のようにしおデヌタを切り替えられない 1. コマンドバッファ開始 2. レンダヌパス開始 3. デヌタ1をセットするコマンドを積む 4. モデル1を描画するコマンドを積む

    5. デヌタ2をセットするコマンドを積む 6. モデル2を描画するコマンドを積む 7. レンダヌパス終了 8. コマンドバッファ終了 9. コマンドバッファをキュヌに提出 60