5

C++ directx 11 SDK kullanarak tek geçişte iki dokuyu oluşturmaya çalışıyorum. Sonuç görüntüsünün her bir pikselinin rengini (bir 3D sahnesi oluştururken normalde ekranda gördüğüm) ve her bir piksel ve derinliğin normalini içerecek başka bir doku (normal ve 1 şamandıra için 3 şamandıra) içeren bir doku istiyorum derinlik için). Şu an üzerinde düşünebildiğim şey, iki oluşturma hedefi oluşturmak ve ilk geçişi renkler olarak oluşturmak, ikincisi ise her bir görüntü oluşturma hedefi için normalleri ve derinliği geçmek. Ancak, bu zaman kaybı gibi görünüyor çünkü ilk pikselde her pikselin rengini, normalini ve derinliğini öğrenebiliyorum. Öyleyse bir şekilde piksel gölgelendiriciyle iki doku çıkışı için bir yol var mı?Tek geçişte birden çok dokuya yönlendirme directx 11

Herhangi bir yardım için teşekkür ederiz.

P.S. Piksel gölgelendiricide RWTexture2D veya RWStructuredBuffer hatları boyunca bir şey düşünüyorum. Biraz arka plan: Bilgi gölgelendiricide daha fazla işlem için iki resme ihtiyacım var. Bu, bir senkronizasyonla ilgili bir yan soruya yol açar: piksel gölgelendirici (hesaplama gölgelendiricisinden farklı olarak) her bir pikselin birer birer birer kez yazılmasından ötürü, piksel gölgelendiricinin ne zaman bittiğini nasıl anlarım ve görüntü işleme işlemini başlatmak için hesaplama gölgelendiricisine ne diyeyim?

cevap

10

Tek geçişte bunu oluşturmak için MRT (Çoklu Render Hedefleri) kullanmanız gerekir.

Daha sonra aynı anda hem dokular yazmayı gösterir çıktı kullanılarak OMSetRenderTargets

http://msdn.microsoft.com/en-us/library/windows/desktop/ff476464(v=vs.85).aspx

http://hieroglyph3.codeplex.com/ (DefferedRendering) 'de bir örnek var hem hedefleri bağlayabilir.

Hemen temelde pixel shader çıkışı yerine tek renkli bir yapı olacaktır:

struct PS_OUTPUT 
{ 
    float4 Color: SV_Target0; 
    float4 Normal: SV_Target1; 
}; 

Ayrıca DirectX11 içinde siz normal tampon derinlik yazmak gerekmez, sadece derinlik tampon kullanabilirsiniz.

Pixel/Compute shader eşitlemesi için, aynı aygıtta aynı anda bir piksel gölgelendirici ve bir hesaplama gölgelendiricisi çalıştıramazsınız, böylece çizim çağrılarınız bittiğinde, dokular gönderim için hesaplamada kullanıma hazırdır .

+0

Teşekkürler. Özellikle bağlantılar için. Bunun ne kadar yararlı olduğunu hayal etmeye başlayamazsın. Tekrar teşekkürler. Bu arada, "derinlik tamponu" ile piksel gölgelendiricisi için SV_Depth değeri mi demek istiyorsunuz? (Sanırım bunu bir yerlerde okudum ama emin değilim.) +1 ve cevabı kabul etti. – l3utterfly

+0

Probs yok. SV_Depth, kendi derinlik değerinizi yazmak istiyorsanız, bazı durumlarda faydalıdır (PixelShader raytracers'dan elde edilen derinlik veya bazı Doku Dizileri). Demek istediğim, DepthStencil kaynağı Shader Resource View olarak da bağlanabilir, bu yüzden sahnesine bir derinlik tamponu bağlayacağınız için yeniden kullanabilirsiniz, ücretsizdir. – catflier

İlgili konular