2014-01-21 2 views
2

Это своего рода глупый вопрос, но я новичок в программировании шейдеров, поэтому, пожалуйста, со мной.
Я понимаю, что (по крайней мере, используя hlsl в .fx для проекта xna) каждый метод может иметь несколько проходов, и каждый проход связан с определенным состоянием устройства и его функцией вершин и пиксельных шейдеров. Теперь мой вопрос: учитывая, что проходы в технике выполняются один за другим, означает ли каждый проход полный проход через конвейер рендеринга? Для istance, если у меня есть методика с двумя проходами, корректно следующее утверждение: Первый проход принимает данные для приложения (VertexBuffer) и проходит по конвейеру, чем второй проход принимает то, что первый выплюнул и идет в другой раз по трубопроводу.HLSL Multi-pass

ответ

1

Обычно проходы независимы друг от друга. Все проходы будут использовать ту же входную геометрию (обычно определяемую буфером вершин). То, что они делают с этой геометрией, может варьироваться.

E.g. у вас может быть техника с двумя проходами. Первый проход рисует объект обычным способом. Второй проход не будет рисовать объект, а нормали - как маленькие линии. Результатом является объект с нормалями, представленными в виде строк.

Аналогично несколько проходов могут использоваться для широкого спектра эффектов, таких как мех, свечение, ореол ... Имейте в виду, что результат контура обычно является цветом. Если вы хотите использовать этот результат в качестве входных данных для другого шейдера, вам нужно переписать конвейер (т. Е. Установить новые входные объекты, шейдеры ...).

+1

Спасибо за ясный ответ, но теперь у меня есть сомнения: в чем разница в создании шейдера с двумя проходами вместо создания двух шейдеров только с одним? Это только для того, чтобы сохранить чистоту и дать ощущение связи с этим эффектом? – Geoffrey91

+0

Да, это в основном суть. Большинство кодов для визуализации объекта включают нечто вроде 'для каждого прохода в технике {apply pass, render object}'. Это более читаемо, чтобы делать это так, а не каждый раз применять разные шейдеры. Кроме того, эта функциональность может быть инкапсулирована в методе. –