私は(元)雇用主のために3Dゲームプログラミングの公平な分配を行いました。また、独自のインディーゲーム用に独自のカスタムエンジンでプログラミングを行いました。
最初は、Direct3D 9とD3DX9から始めました。これらはほとんどすべてを行い、シェーダーの観点から考える必要はまったくありませんでした。
その後、最初のDirect3D 9シェーダーを作成しましたが、ほとんどすべてを1つの非常にシンプルなシェーダーで使用しました。
ゲームエンジンの最新の反復では、Direct3D 11に移行し、それによって多くのシェーダーを作成しました。GPUスキニング、GPU計算パーティクル、多くの照明効果、後処理効果をすべてGPUで行いました。本当にクールなもの。
これまでのところ、頂点シェーダーとピクセル/フラグメントシェーダーのみを使用しました。まだ行っていないことはまだたくさんありますが、頂点シェーダーとピクセル/フラグメントシェーダーが何をするのか、それが3Dパイプライン全体にどのように適合するのかについて確かな知識があると思います。
最近の開発に追いついて、新しいシェーダーステージに非常に興味を持ちました。つまり、ジオメトリシェーダー、さらに新しいハルシェーダーとドメインシェーダーです。
私はこれらのステージを使用したことはありませんが、知っていることから、Geometryシェーダーは、有効になっている場合、頂点シェーダーの後に実行され、変換された各頂点に1回(またはプリミティブごとに1回)、頂点(およびプリミティブ?)を破棄できます、新しいものを作成します(パイプラインの最初に戻ると思いますか?)。
私の推測では、ジオメトリシェーダーの主な用途は、GPUでジオメトリをプログラムで生成することです。一般的な使用法は、単一の頂点に基づいてビルボードクワッドを作成することですが、フラクタルや100%プログラムで生成できる他のものを除いて、他の多くの一般的なシナリオを実際に視覚化しません。
ハルシェーダーとドメインシェーダーについては、テッセレーション(粗い表面からより滑らかな表面を作成する?)に関連しているようで、一緒に使用する必要があるか、まったく使用しない必要があります。ここでは「パッチ」という用語も一般的なようです。
これらの新しいシェーダーステージの目的、3Dパイプラインにどのように適合するか、どのような場合にそれらを使用することを検討する必要があるのか、実際の用語で誰かに説明してもらえますか?