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


9

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

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

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

Ответы:


5

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

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

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


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

4

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

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

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

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


3

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


Возможно, но большинство я думаю, что реализации размытия будут использовать один и тот же шейдер для горизонтального и вертикального проходов - и просто передавать смещения выборки (как константы шейдера или данные на вершину)?
Bluescrn

1
@bluescrn - Bloom обычно рассматривается как эффект 4 прохода: один для выделения ярких областей и уменьшения масштаба, один для размытия по горизонтали, один для размытия по вертикали, другой для объединения / увеличения размытого изображения с оригиналом. В то время как параметры шейдера могут использоваться для управления ими, потребуется разветвление, чтобы различать все, кроме двух проходов размытия
Роберт Фрейзер


1

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

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.