Отложено затенение с помощью вычислительного шейдера, несколько цепочек обмена?
Hy снова. Я собираюсь добавить отложенное затенение в мой движок dx11, но у меня есть вопрос архитектуры. Я думал о том, чтобы сначала визуализировать gbuffer с помощью MRT, передать его в вычислительный шейдер, отправить и затем вывести результат. Мой вопрос заключается в том, нужно ли мне создать две цепочки подкачки, одну для рендеринга gbuffer, и одну uav, для рендеринга вычислительного шейдера в backbuffer и представления или есть другой способ сделать это?. Чего я здесь пытаюсь избежать, так это использовать fullscren quad и отображать на нем выходные данные cs. Слишком много накладных расходов. Заранее спасибо.
1 ответ
РЕДАКТИРОВАТЬ: Я должен добавить, что вы получаете предупреждения некоторых штатов, делая это, поэтому используйте с осторожностью.
В конце концов, две цепочки обмена не нужны. Сначала вы создаете свой буфер с флагом DXGI_USAGE_UNORDERED_ACCESS. Затем создайте цель рендеринга. Визуализируйте вашу сцену для этой цели, передайте ее в вычислительный шейдер в качестве Texture2D и передайте буферный буфер как RWTexture2D в вычислительный шейдер. Тогда просто отправьте CS, настоящее и готово! Вы получили вывод CS на экране.