Unity Shader Programming Vol.06 (v.1.0.0)【PDF】
- Unity Shader Programming Vol.06 (v.1.0.0)【PDF】¥ 1,500
- Unity Shader Programming Vol.06 (v.1.0.0 サンプル)【PDF】¥ 0
Unity でシェーダプログラミングを始めたいけど、公式の資料や散見する様々な資料では難しいという人に対し、小さく、簡単に、サンプル付きでまとめた資料です。 総ページ数:108 本文中のサンプルはオープンソースで管理しています。合わせて購入の検討に利用してください。 https://github.com/XJINE/UnityShaderProgramming_06_Sample
この資料の内容
この資料では大量のメッシュをリアルタイムに描画する技術について解説します。バッチングやインスタンシングと呼ばれる技術です。これらについて知ることは、オブジェクトの実装方法とその適切な描画方法を判断するために役に立ちます。あるいは、パフォーマンスを意識しながら絵作りするためには必須の技術です。 またComputeシェーダを使った、レンダリングとは異なるGPUの使い方についても触れています。バッチングやインスタンシングと組み合わせることで大量のメッシュを動かしながら描画できるようになります。 これらの技術を真に使いこなすためには、ここで解説するよりもさらに高度な知識や技術を必要としますが、入門に十分な内容を詰め込んでいます。
目次
はじめに 第 1 章 バッチング ―― 1.1 Statsの簡単な見方 ―― 1.2 静的バッチング ―― 1.3 異なるメッシュのバッチング ―― 1.4 マテリアルとバッチングの関係 ―― 1.5 MaterialPropertyBlockとバッチングの関係 ―― 1.6 バッチングとSetPass calls ―― 1.7 Transformとバッチングの関係 ―― 1.8 動的生成されたオブジェクトのバッチング ―― 1.9 頂点数の制限 ―― 1.10 カリングとバッチングの関係 ―― 1.11 動的バッチング / Dynamic Batching ―― 1.12 捕捉:バッチングの使い方 第 2 章 MeshRendererを使わないメッシュの描画 ―― 2.1 Graphics.DrawMesh ―― 2.2 Graphics.DrawMeshNow 第 3 章 GPUインスタンシング ―― 3.1 シェーダをインスタンシングに対応させる ―― 3.2 インスタンシングとバッチング ―― 3.3 VertexシェーダでインスタンスIDを参照する ―― 3.4 インスタンスIDの自動割り当て ―― 3.5 FragmentシェーダでインスタンスIDを参照する ―― 3.6 インスタンスにパラメータを渡す 第 4 章 Compute/Structured Buffer ―― 4.1 ComputeBuffer ―― 4.2 StructuredBuffer ―― 4.3 StructuredBufferを参照して描画する ―― 4.4 ComputeBufferの破棄 ―― 4.5 補足:Material.Set~Array ―― 4.6 任意の構造体を渡す ―― 4.7 値を更新する 66 ―― 4.8 シェーダ側の構造体の定義 ―― 4.9 構造体を使った描画 第 5 章 MeshRendererを使わないインスタンシング ―― 5.1 Graphics.DrawMeshInstanced ―― 5.2 DrawMeshInstancedとバッチ数の関係 ―― 5.3 Graphics.DrawMeshInstancedProcedural ―― 5.4 Graphics.DrawMeshInstancedIndirect ―― 5.5 補足:Graphics.DrawMeshでもインスタンシングできる 第 6 章 Computeシェーダ ―― 6.1 カーネル・スレッド・グループ ―― 6.2 Computeシェーダの実装(シェーダ側) ―― 6.3 SV_GroupID, GroupThreadID, DispatchThreadID ―― 6.4 Computeシェーダの実装(スクリプト側) ―― 6.5 Computeシェーダの実行と結果の確認 ―― 6.6 異なるカーネルの実行 ―― 6.7 RWTexture2D ―― 6.8 グループ・スレッド数 ―― 6.9 スレッド数の取得 ―― 6.10 Computeシェーダからテクスチャを更新する 第 7 章 Computeシェーダとインスタンシング ―― 7.1 バッファとデータの用意 ―― 7.2 Computeシェーダに任意の型を定義する ―― 7.3 描画用シェーダの実装 ―― 7.4 パーティクルの更新と描画 第 8 章 Append/Consume Buffer ―― 8.1 Computeシェーダに3種のバッファを用意する ―― 8.2 1つのバッファを2種類のバッファとして共有する ―― 8.3 プールされたパーティクル数の取得 ―― 8.4 パーティクルシェーダの実装 ―― 8.5 シーンの実行と確認 おわりに
想定する読者と方針
この資料はUnityの基本的な扱いについては知識があり、シェーダプログラミングを経験したことがない方を読者に想定しています。あるいは、学習の補助的な資料として役立てることを想定しています。 この資料のよい点は (1) もっとも小さいサンプルからステップバイステップ形式で内容が整理されていること (2) それぞれのステップでサンプルが用意されていることです。 技術的な解説のほとんどはUnity公式やその他の資料から確認できますが、多くの場合に、それらは学習の順序を考慮していません。一貫した資料を用いて学習する一番のメリットは、さまざまな資料を集め、それらを取捨選択しながら順序立てる負担を軽減できることにあります。 一方で、この資料では高度な応用技術やその詳細を解説しません。特に、シェーダプログラミング以外のCGに関する詳細な解説や数学的な内容は、その多くを割愛しています。 これらは「シェーダプログラミングの入門」に当たっては不要であり、より詳細な情報は、それらを専門に扱う資料を参照した方がよいためです。 したがって、数学的な内容から順序立てて学習したい方、高度な技術や表現技法について学習したい方には、この資料は不向きであるといえます。
感想・要望・その他のお問い合わせ
要望、感想、誤字脱字などのご指摘、その他のお問い合わせについては専用フォームでお伺いします。折り返しのご連絡等については必ずのお約束をしかねる体制であることご了承ください。 【問い合わせフォーム】 https://goo.gl/forms/mOiWo6JuPz848deh1
価格について
価格は (1) 学習のために順序立てて整理する (2) 最小限のサンプルを考えて用意する (3) 執筆して管理する、などの要因から決定しています。 価格は、特に新しい情報が追加されるときに改定されることがあります。あるいは、広く広報するなどの目的のために、一時的に改定することがあります。 新しいバージョンがリリースされるとき、既に同じものを購入されている方については、基本的には追加料金なしに入手できるようにしています。ただし電子的な管理が可能なもの、著しく内容が変更されないものに限ります。 上記について、予めご了承ください。
更新履歴
ver.1.0.0 (2021.03.12) ―― 初回リリース。