Как работают многоходовые шейдеры в HLSL? - PullRequest
5 голосов
/ 22 июля 2011

Я новичок в шейдерах и HLSL, сделав достаточно с классом BasicEffect. Я понимаю, как работает конвейер, особенно для шейдеров только с 1 проходом. Однако, в случае двухпроходных или N-проходных шейдеров, я не совсем понимаю, как объединяются результаты 2 (или N) выходов шейдеров.

Не могли бы вы объяснить, как происходит комбинация? И, если возможно, пример, где вы бы предпочли использовать многопроходные шейдеры, а не несколько однопроходных шейдеров?

Ответы [ 2 ]

6 голосов
/ 22 июля 2011

Многопроходные шейдеры просто ДОБАВЛЯЮТ результаты к предыдущему проходу (-ям). Их можно использовать для поддержки нескольких источников света, особенно если в модели шейдера графического процессора недостаточно инструкций для поддержки необходимого количества источников света за один проход.

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

[EDIT] КАК согласно комментарию Мельхиора Блаусанда, правильнее будет сказать, что вывод каждого прохода объединяется с текущим значением в соответствии с текущей операцией смешивания и режимами смешивания где текущее значение является результатом объединения всех предыдущих проходов. Для многопроходных шейдеров характерно использование режима наложения ADD для объединения нескольких источников света. Также обратите внимание, что альфа-канал можно комбинировать с различными режимами наложения для цветовых каналов.

0 голосов
/ 20 ноября 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...