Próbuję renderować do dwóch tekstur za pomocą jednego przebiegu przy użyciu SDK C++ directx 11. Chcę, aby jedna tekstura zawierała kolor każdego piksela obrazu wynikowego (co normalnie widzę na ekranie podczas renderowania sceny 3D), a inna tekstura zawierała normalny dla każdego piksela i głębokości (3 zmienne dla normalnego i 1 zmiennoprzecinkowe) na głębokość). W tej chwili mogę stworzyć dwa cele renderowania i przekazać pierwsze przejście jako kolory, a następnie przekazać normalne i głębokie do każdego celu renderowania. Wydaje się to jednak stratą czasu, ponieważ w pierwszym przebiegu mogę uzyskać informacje o kolorze, wartości normalnej i głębokości każdego piksela. Czy istnieje sposób, aby jakoś wyprowadzić dwie tekstury za pomocą cieniowania pikseli?Renderowanie do wielu tekstur z jednym przejściem w DirectX 11
Każda pomoc zostanie doceniona.
P.S. Myślę, że coś podobnego do RWTexture2D lub RWStructuredBuffer w pixel shader. Nieco tła: Będę potrzebował dwóch obrazów do dalszego przetwarzania w module cieniującym Compute. Co wywołuje boczne pytanie o synchronizację: ponieważ moduł cieniujący pikseli (w przeciwieństwie do modułu cieniującego Compute) zapisuje każdy piksel po jednym na raz, jak powinienem wiedzieć, kiedy moduł cieniujący pikseli jest gotowy i nakazuje procesorowi Compute, aby rozpoczął przetwarzanie obrazu?
Dzięki. Zwłaszcza w przypadku linków. Nie możesz zacząć wyobrażać sobie, jak bardzo są pomocne. Dzięki jeszcze raz. Nawiasem mówiąc, przez "bufor głębi" rozumiesz wartość SV_Depth dla pixel shadera? (Myślę, że gdzieś to czytam, ale nie jestem zbyt pewny.) +1 i przyjęta odpowiedź. – l3utterfly
Brak problemów. SV_Depth to, jeśli chcesz napisać własną wartość głębokości, jest to przydatne w niektórych przypadkach (głębokość od raytracerów PixelShader lub niektórych manipulatorów Texture Array). Chodzi mi o to, że zasób DepthStencil może być również powiązany z widokiem Shader Resource View, więc ponieważ wiążesz również bufor głębi z twoją sceną, możesz równie dobrze go użyć, to nic nie kosztuje) – catflier