2012-11-20 42 views
5

Bütün gün boyunca buradaydım ve bundan vazgeçmeye başlıyorum. Bilgi işlem gölgelendiricileri hakkında pek fazla bilgi bulamıyorum. En iyi kaynak "Direct3D 11 ile Pratik Çözümleme ve Hesaplama" idi ve ne yazık ki çok fazla yardım değildi. Bazı teorileri anlamama yardımcı oldu ama hala nasıl bir şey uygulayacağımı bilmiyorum.Gölgelendiricileri hesaplayın, boru hattına nerede oturuyorlar?

Bu kitapta oluşturulan parçacık sistemine benzer bir şey üzerinde çalışıyorum. Parçacık sistemim hariç, temel olarak sadece 3 boyutlu bir ızgarada (yerçekimi/kuvvetler/vb. Gibi) görünen parçacıklar olacaktır. Bu eğitim amaçlıdır, eğer bu çalışmayı yaparsam, geri kalanını ben halledebilirim.

Neyi anlamadığım, bilgi işlem gölgelendiricisinin boru hattına nasıl sığdığıdır. Ne yapmam gerektiğini anladığımı düşünüyorum ama nasıl çalıştığımı bilmiyorum.

Bir şekilde hesaplama gölgelendiricisini tüm parçacık konumlarıyla dolu bir tamponla doldurmam gerekiyor. (1024x1024x1 tamponu). Daha sonra, her bir konum vertex shader'ım için bir köşe noktası olarak çıktılamak için bu hesaplama gölgelendiricisine ihtiyacım var ve boru hattının geri kalanı da bundan sonra standarttır (vertex shader tüm dönüşümleri yapar, geometri gölgelendiricim bir dörtlü ve köşelerimdeki pikselleri genişletir) shader bunu yapar).

Bunun doğru olup olmadığını bilmiyorum, ama doğru görünüyor. Ve olsa bile, bunu yapmak için nasıl gideceğime dair hiçbir fikrim yok. Hesaplama gölgelendiricinin çıktısını köşe gölgelendiricisine nasıl aktarabilirim? Başlangıçta hesaplama gölgelendiricisini nasıl başlamalıyım? Compute shader'ın parçacıkların tamponunu atmamasını nasıl sağlarım? (Aksi takdirde, partikülleri her seferinde tedarik etmek zorunda kalırdım, bu da (sonunda) hareket eden parçacıklarla bir parçacık sistemi yapmanın amacını, vb., CPU üzerinde yapmak zorunda olduğum gibi)

Pek çok bilinmeyen var ve bu gölgelendiricilere yazmaya bile başlamamı beklediğimi sanıyordum. Adım taşları bulamıyorum.

+0

Doğrudan boru hattının geri kalanına sığmaz, bağımsız bir şeydir. Arayüz, açık nedenlerle olsa da, aynı şeylerin çoğunu kullanır. Sonuçlar ve girdiler, boru hattının kullandığı ve aynı zamanda boru hattı ile birlikte kullanılmasını çok iyi hale getiren grafik kartı nesneleridir. – jcoder

+0

Bilgisayar gölgelendiricileriyle, herhangi bir grafik öğesinden bağımsız olarak, yalnızca iki arabelleği sayı dizileriyle doldurarak ve toplamlarını içeren bir üçüncü sayı oluşturmak için bir hesaplama gölgelendiricisi oluşturan ve bunu yazdırmak için CPU'ya geri okuyarak, basit bir işlem yapmaya başladım ... Bir parçacık yükünün konumlarını güncellemek için bunu nasıl uzatabileceğinizi görebiliyorsunuz - ve bu pozisyonları CPU'ya geri okumak gerekmeyecek, grafik pipleline programı verileri doğrudan girdi olarak kullanabiliyor. – jcoder

+0

Bu kitap gibi bir şey http://www.amazon.co.uk/Introduction-Game-Programming-DirectX-ebook/dp/B0085CDJY4 gibi tam olarak ihtiyacınız örneklerini içerdiğinden tavsiye ederim. (Bazen bazı adımları atıyor gibi gözükse de, iyi bir kitap buldum) – jcoder

cevap

3

Hesaplama gölgelendiricisi, grafik denetiminin bir parçası değildir. Bu, GPGPU'nun kolay bir aracıdır, bu nedenle grafik aygıtın hesaplama gücünü, partizanlık gibi görsel olmayan amaçlar için daha kolay bir şekilde kullanabilirsiniz. Parçacık sisteminiz için kullanmak isterseniz, önce parçacık pozisyonlarını bir hesaplama gölgelendiricisi ile hesaplamanız gerekir. Daha sonra, normal koddaki çıktıyı, oluşturulacak bir köşe yazıcısına doldurursunuz. AFAIK çıktıyı çıktı işlemine yönlendirmek için doğrudan bir yol yoktur, ancak hesaplama gölgelendiricilerine çok aşina değilim. Sizin için ilginç bağlantılar belki de documentation ve example burada. Grafik çerçevesi bu page'da gösterilmektedir.