Saya telah melakukan bagian yang adil dari pemrograman game 3D untuk (mantan) majikan saya, dan juga di mesin kustom saya sendiri untuk game indie saya sendiri.
Awalnya, saya mulai dengan Direct3D 9, dan D3DX9, yang cukup banyak melakukan segalanya untuk saya, dan tidak mengharuskan saya untuk berpikir dalam hal shader sama sekali.
Setelah itu, saya menulis Direct3D 9 shader pertama saya, tetapi kebanyakan menggunakan satu shader yang sangat sederhana untuk semua yang saya lakukan.
Dalam iterasi terbaru dari mesin permainan saya, saya pindah ke Direct3D 11, dan dengan itu saya membuat banyak shader. Saya melakukan skinning GPU, partikel yang dihitung GPU, banyak efek pencahayaan dan pasca pemrosesan, semuanya dalam GPU. Hal yang sangat keren.
Sejauh ini saya hanya menggunakan vertex dan pixel / fragmen shaders. Meskipun masih ada banyak hal yang belum saya lakukan, saya percaya saya memiliki pengetahuan yang kuat tentang apa yang dilakukan vertex dan pixel / fragmen shaders, dan bagaimana semua itu cocok dengan keseluruhan pipa 3D.
Mengejar perkembangan yang lebih baru, saya menjadi sangat tertarik dengan tahap shader yang lebih baru. Yaitu, Geometry Shader, dan yang lebih baru, Hull dan Domain shader.
Saya belum pernah menggunakan tahapan ini, tetapi dari apa yang saya ketahui, Geometry shader, jika diaktifkan, dijalankan setelah vertex shader, satu kali untuk setiap vertex yang diubah (atau sekali per primitif?) Dan memungkinkan Anda untuk membuang simpul (dan primitif?) , dan buat yang baru (yang saya kira kembali ke awal pipa?).
Dugaan saya adalah bahwa penggunaan utama dari shader geometri adalah untuk secara terprogram menghasilkan geometri dalam GPU. Penggunaan yang umum adalah untuk membuat paha depan billboard berdasarkan pada satu titik, tapi saya tidak benar-benar memvisualisasikan banyak skenario umum selain menghasilkan fraktal dan hal-hal lain yang Anda dapat menghasilkan 100% secara sistematis.
Sedangkan untuk Hull dan Domain shaders, sepertinya itu terkait dengan tessellation (membuat permukaan lebih halus dari permukaan kasar?), Dan harus digunakan bersama-sama atau tidak sama sekali. Istilah "tambalan" juga tampaknya umum di sini.
Adakah yang mau menjelaskan kepada saya, secara praktis, untuk apa tahap shader new-ish ini, bagaimana mereka masuk ke dalam pipa 3D, dan dalam kasus apa saya harus mempertimbangkan menggunakannya?