Хороший пример многопроходного эффекта?

В XNA (и Direct3D вообще AFAIK) вместо создания отдельных шейдеров вершин и фрагментов вы объединяете потенциально много связанных шейдеров в «Эффекты». Когда вы приступаете к использованию эффекта, вы выбираете «технику» (или повторяете все их), а затем каждая «техника» имеет несколько «проходов». Вы просматриваете каждый проход, который выбирает соответствующий вершинный и фрагментарный шейдер, и вы рисуете геометрию.

Что мне интересно, так это то, для чего вам понадобится несколько проходов? Я понимаю, что в первые дни 3D у вас была только одна единица текстуры, а затем у вас было 2, и этого часто было недостаточно, если вы также хотели сделать картографирование окружающей среды. Но на современных устройствах, даже в мобильном классе, вы можете отбирать 8 или более текстур и делать столько вычислений освещения, сколько захотите в одном шейдере.

Может ли более опытный пример предложить практические примеры того, где требуется многопроходное рендеринг, или это просто чрезмерное проектирование со стороны XNA /Direct3d?

9 голосов | спросил U62 5 AM00000020000004331 2010, 02:00:43

6 ответов


5

В любое время, когда вы выполняете эффекты после обработки на множестве захваченных буферов, разумное время будет использовать эффект многопроходного режима, то есть изоляцию, размывание движения, SSAO, цветение. Идея заключалась в том, что первый проход будет состоять в том, где вы выведете все необходимые буферы, и каждый последующий проход будет обрабатывать каждый эффект после процесса.

Как Раньери упомянул о примере XNACC, они используют несколько проходов, чтобы отобразить огромное количество огней. Хотя в этом примере они выполняют один и тот же проход, только один раз для каждого света.

Имейте в виду, что Shader Model 2 и ранее не могут обрабатывать в любом шейдере почти столько же инструкций, как Shader Model 3 или 4, но еще одна причина разделить эффект на несколько проходов - для поддержки старого оборудования.

ответил brett 12 AM000000120000003831 2010, 00:11:38
4

Как указывалось в других ответах, многопроходное рендеринг (рисование одной сетки несколько раз с разными шейдерами /параметрами), как было предложено в других ответах, безусловно, все еще используется, в основном для освещения и специальных эффектов

D3DX Эффектные проходы могут использоваться для такого рода вещей. Но он также может быть реализован с использованием нескольких шейдеров /эффектов.

Первоначальное намерение проходов заключалось в том, чтобы помочь реализовать сложные шейдеры на аппаратном обеспечении нижнего уровня (pre-shader-2.0), где ограничения на количество этапов текстуры и инструкции шейдеров за проход были весьма ограниченными.

В примере многопроходного освещения есть ли значительный прирост производительности при использовании пропусков вместо переключения эффектов?

ответил bluescrn 6 AM00000010000002331 2010, 01:14:23
3

В дополнение к освещению, о котором говорили все, другое важное использование этого - размытие . Горизонтальные и вертикальные изображения выполняются в отдельных проходах (так чтобы получить размытие 9x9, для каждого выходного пикселя нужно выбирать только 18 пикселей вместо 81). Это используется для цветения /HDR, глубины резкости, свечения и т. Д.

ответил Robert Fraser 10 PM00000020000002031 2010, 14:04:20
1

Пример на веб-сайте создателей XNA использует несколько проходов для вычисления освещения от многих (сотен) источников света.

ответил drxzcl 5 AM00000020000002331 2010, 02:14:23
1

Как сказал Раньери, вы можете использовать несколько проходов для нескольких огней, например, с одним материалом, который может иметь «эмбиентный» проход, аддитивный проход на очковый свет, другой проход для каждого прожектора, а затем пропуск с пропускной способностью для умножения в диффузной текстуре (я использовал такую ​​настройку в прошлом, и речь идет о наиболее гибком способе работы с шейдером освещения, который я видел, не попадая в отложенное затенение).

Кроме того, я считаю, что большинство меховых шейдеров используют несколько проходов.

ответил Riley Adams 5 AM00000020000002631 2010, 02:29:26
0

Теневые карты для создания теней могут быть выполнены с использованием многопроходного режима. Просто заметьте, что некоторые многопроходные эффекты могут быть сделаны за один проход, если видеокарта поддерживает одинаковое количество текстурных блоков, как количество проходов. Итак, если у вас недостаточно текстурных блоков, вам придется использовать несколько проходов. Одна из фиксированных аппаратных платформ (например, игровых консолей), вероятно, вы можете кодировать только с использованием мульти-текстурирования, потому что вы знаете количество текстурных единиц. Но для ПК существует бесконечное количество аппаратных конфигураций. Если вы хотите иметь самый широкий доступ к потребителям, вы, вероятно, захотите разбить некоторые из своих более сложных эффектов на несколько проходов, чтобы пользователи с более низким уровнем аппаратного обеспечения (т. Е. Не имели столько текстурных блоков на графическом процессоре) все еще могли см. эффект. Вкратце, теневые карты создаются путем создания теневой карты сцены с точки зрения света за один проход. Затем текстура теневой карты смешивается с сценой с другими текстурами сцены.

ответил zooropa 12 PM00000040000005131 2010, 16:25:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132