Hull, Domain ve Geometry gölgelendiricileri ne için kullanılır?


21

İşverenim için 3D oyun programlamacılığındaki payımı ve kendi bağımsız oyunlarım için kendi özel motorlarımdaki payımı yaptım.

Başlangıçta, Direct3D 9 ve D3DX9 ile başladım ki bu benim için her şeyi yaptı ve gölgelendiriciler açısından düşünmemi gerektirmiyordu.

Ondan sonra ilk Direct3D 9 gölgelendiricimi yazdım, fakat yaptığım her şey için çoğunlukla çok basit bir gölgelendirici kullandım.

Oyun motorumun en son yinelemesinde, Direct3D 11'e geçtim ve bununla birlikte birçok gölgelendirici oluşturdum. GPU'da deri kaplama, GPU hesaplanmış parçacıklar, çok fazla ışıklandırma ve işlem sonrası efekt yaptım. Gerçekten harika şeyler.

Şimdiye kadar sadece tepe ve piksel / parça gölgelendiricileri kullandım. Hala yapmadığım birçok şey olsa da, tepe ve piksel / parça gölgelendiricilerin ne yaptığı ve bunların tümünün 3 boyutlu boru hattına nasıl uyduğuyla ilgili sağlam bir bilgiye sahip olduğuma inanıyorum.

Daha yeni gelişmelere ayak uydurarak, daha yeni gölgelendirici aşamaları ile çok ilgilenmeye başladım. Yani, Geometri Gölgelendirici ve hatta daha yenisi, Hull ve Domain gölgelendiricileridir.

Bu aşamaları hiç kullanmadım, ancak bildiğim kadarıyla, Geometri gölgelendiricisi, etkinse, her bir dönüştürülmüş tepe noktası için (veya ilkel için bir kez?) Tepe gölgelendiricisinin ardından çalıştırılır ve köşeleri (ve ilkellerin?) Atmanıza izin verir ve yenilerini oluşturun (ki bu boru hattının başlangıcına geri döndüğünü tahmin ediyorum?).

Tahminim, geometri gölgelendiricinin temel kullanımının GPU'da programlı olarak geometri oluşturmak olduğu yönünde. Yaygın bir kullanım, tek bir köşeye dayanan pano dörtlüsü oluşturmak olacaktır, ancak fraktallar ve% 100 programlı olarak üretebileceğiniz diğer şeyler dışındaki pek çok ortak senaryoyu gerçekten göremiyorum.

Hull ve Domain gölgelendiricilere gelince, bunlar mozaikleme ile ilişkili gibi görünüyor (pürüzlü yüzeylerden daha pürüzsüz yüzeyler yaratıyor mu?) Ve birlikte kullanılmaları veya hiç kullanılmaması gerekiyor. "Yama" terimi burada da yaygın görünüyor.

Herhangi biri bana, pratik anlamda, bu yeni gölgelendirici aşamalarının ne olduğunu, 3D boru hattına nasıl uyduğunu ve hangi durumlarda onları kullanmayı düşünmem gerektiğini açıklar mı?


Bence yanlış yoldan soruyorsun - "ne için kullanılırlar" yerine "ne yapıyorlar? aslında onlarla yapabileceğim.
wondra

@wondra: Neredeyse aynı soru, ancak yaptıklarının teorik açıklaması yerine pratik kullanım örneklerine daha fazla odaklanmak istiyorum. Aslında, MSDN'ye birçok kez okuduğum bir genel bakış var ama yine de benim için ne yapabileceklerini anlayamıyordum. Ben zeki bir varlığım ve A ve B'yi bağlayabilir ve bundan C, D, E ve F'yi anlayabilirim.
Panda Pajama

Bilmiyorum, "pratik kullanım örnekleri" benim için biraz geniş görünüyor. Yine de bir bıçak aldım, ancak bu yorumdan önce sizin için "ne yapıyorlar" konusuna çok fazla odaklanıyor olabilir.

@Josh: Gerçek dünyadaki tüm bu aşamaları kullanıyor musunuz veya kullanıyor musunuz?
Panda Pajama

1
DirectX olmayan bir geçmişe sahip olanlar için (benim gibi) bir FYI, bu ikisine OpenGL ve Vulkan'da "Mozaik kontrol shader" ve "Mozaik değerlendirme shader" denir.
Shahbaz

Yanıtlar:


13

Gövde ve Etki Alanları

Gövde ve alan gölgelendirici aşamaları, GPU'nun mozaik boru hattının bir parçasıdır. Genellikle üçgenler veya dörtlüler (vb.) Olarak tanımlanan düşük detaylı giriş yüzeyi geometrisine dayanan oldukça ayrıntılı yüzey geometrisini hesaplamak için kullanılırlar. Daha düşük detaylı giriş ilkellerine "yamalar" denir ve sonunda var olacak olan gerçek geometriyi temsil etmeyebileceklerini (ancak yapabildikleri halde) not etmeleri önemlidir . Bir yüzey hariç, bir bezier eğrisinin kontrol noktaları gibi düşünün.

Gövde gölgelendiricisi bir giriş yaması alır ve bir çıktı yaması oluşturur (ya da yamalar; bu yamanın alt bölümlerinin genellikle ortaya çıkacağı yer). Yama ile ilgili sabit meta veriler ayrıca, boru hattının sonraki aşamalarında işlenecek olan gövde gölgelendiricisi ve çıktısı içinde hesaplanabilir.

Gövde gölgelendiricisinin çıktısı, uygun tipte döşenmiş, normalize edilmiş alanlar (örn. Dörtlü veya üçgenler) üreten bir (sabit fonksiyon) mozaikleme aşamasından geçer.

Etki alanı gölgelendiricisi, yukarıda belirtilen mozaiklemeden kaynaklanan bir etki alanındaki herhangi bir noktanın gerçek tepe konumunu hesaplamak için bu etki alanlarına karşı yürütülür. Etki alanı gölgelendiricisi böylece bir köşe pozisyonu üretir.

Mozaikleme aşaması, boru hattındaki tepe noktası gölgelendirme aşamasından sonra gerçekleşir.

Geometri Gölgelendiricileri

Geometri gölgelendiricileri, bir şekilde sadeleştirilmiş gövde / alan gölgelendiricileri gibidir. Basitçe girdi köşeleri alırlar ve çıktı köşeleri oluştururlar. Belirli bir giriş köşesi için, birçok çıkış köşesi üretilebilir, bu nedenle "geometri üretmek" için kullanılabilirler.

Geometri gölgelendirici aşaması, köşe gölgelendiriciden sonra ve mozaikleme aşamasından sonra gerçekleşir.

Kullanımları

Geometri gölgelendirici, doğrudan boru hattının rasterleştirme ve parça gölgelendirme fazına beslenmek yerine çıktı tamponlarını akışa yazabilir; Bu, başka bir köşe gölgelendirici aşamasında veya her neyse, ek iş yapmak için bir köşe / gövde / alan / geometri gölgelendirici yinelemesinin bir kombinasyonu tarafından üretilen geometriyi yeniden çalıştırabileceğiniz anlamına gelir.

Ne Gerçekten o adrese denemez yüzden bu kullanabilirsiniz, oldukça geniş, etkin bir-sınırsız bir konudur. Ancak, onları kullanmayı düşünmek için bazı motive edici nedenler gelince ... Bu gölgelendirici aşamaları ile ilgili en büyük şey, her zaman için hafıza veya bant genişliği maliyetini ödemeden potansiyel olarak oldukça fazla bir ayrıntı almanıza izin vermeleridir. Ayrıca işlemciyi CPU'dan GPU'ya taşımak için.

Arazi, bu teknolojinin bazılarını kullanmak isteyebileceğiniz yerlere iyi bir örnektir; çünkü genel olarak hem çok yakın (karakterin üzerinde dururken) hem de çok uzak (mesafedeki dağlar) ve kabiliyetini görmeniz gerekir. Bu gölgelendirici aşamaları aracılığıyla arazi geometrisine "anında" ne kadar yer verdiğinizi kontrol etmek çok güçlüdür. Alternatifler tarihsel olarak ya arazi için her zaman sabit bir ortalama maliyet ödüyordu (en düşük ortak payda yaklaşımı) ya da elle sıkıcı ve farklı GPU hafızasındaki farklı ayrıntı seviyeleri için geometri parçalarını elle sayfalandırıyordu. pahalı.

Makul bir şekilde bölünebilir olan bazı örgü veya model için desteklemeniz gereken gerçekten geniş bir ayrıntı seviyesi yelpazesine sahip olabileceğiniz benzer bir durum, bu gölgelendiricilerle akıllıca bir şeyler yapmak için aday olabilir. Yine de her şey , yüzey stili optimizasyonunu alt bölümlere çevirmiyor . Muhtemelen onları kumaş ve saç için de kullanabilirsiniz.

Daha fazla okumak için, makul bir şekilde hatırlayabileceğim veya buraya girebileceğimden çok daha fazla ayrıntı dahil:


4
Gövde ve etki alanı gölgelendiricilerin Direct3D Özellik Seviyesi 11.0 veya üstü donanım gerektirdiğini ve geometri gölgelendiricilerin Direct3D Özellik Seviyesi 10.0 veya üstü donanım gerektirdiğini unutmayın. Ayrıca, çoğu video kartı tasarımı, geometri gölgelendirici aşamasını özel bir donanıma ihtiyaç duymadan çok az verir, bu nedenle pratikte kullanımları başlangıçta öngörülenden çok daha azdır.
Chuck Walbourn

@ChuckWalbourn: Gerçekten, daha fazla duymak isterim, istersen, ayrı bir cevapta
Panda Pajama
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.