2011-07-22 13 views
5

Soy nuevo en sombreadores y HLSL, habiendo hecho lo suficiente con la clase BasicEffect. Entiendo cómo funciona la tubería, especialmente para sombreadores con solo 1 pase. Sin embargo, en el caso de los sombreadores de 2 pasos o N-pass, no entiendo muy bien cómo se combinan los resultados de los 2 (o N) sombreadores.¿Cómo funcionan los shaders de múltiples pasadas en HLSL?

¿Puede explicar cómo se realiza la combinación? Y si es posible, ¿un ejemplo en el que preferiría utilizar un sombreador de múltiples pasos en lugar de varios sombreadores de paso único?

Respuesta

5

sombreadores de paso múltiple simplemente AGREGUE los resultados al (los) paso (s) anterior (es). Se pueden usar para admitir múltiples luces, particularmente cuando el modelo de sombreado de la GPU no tiene suficientes instrucciones para admitir el número requerido de luces en una sola pasada.

A menos que realmente lo necesite, no recomendaría usar más de una pasada, ya que complica las cosas como la mezcla alfa y la niebla. Tendrá que configurar sus estados de mezcla de manera diferente en el primer pase para pases posteriores.

[EDIT] AS por cada comentario de Melchior Blausand, es más correcto decir que la salida de cada pasada se combina con el valor actual de acuerdo con la corriente blend operation y blend modes, en el que el valor actual es el resultado de la combinación de todos los anteriores pasa. Es común que los sombreadores de varias pasadas utilicen el modo de combinación ADD para combinar luces múltiples. También tenga en cuenta que el canal alfa se puede combinar con different blend modes en los canales de color.

+1

¡Finalmente! Estaba buscando esa declaración exacta por horas ahora. ¡Muchas gracias! –

+0

De nada. Lástima que el OP no haya regresado para marcarlo como la respuesta;) – Aranda

+1

Dado que ADD es un modo de mezcla, ahora consideraría que esta respuesta es engañosa. Prefiero indicar que los modos de mezcla se pueden especificar por pase. En detalle, se especifican dos miembros de la [enumeración D3DBLEND] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb172509%28v=vs.85%29.aspx). –

0

Bueno, es todo depende de usted, ya que debe llamar al método BeginPass antes de renderizar la malla y recorrer todas las pasadas. Esto le da la capacidad de cambiar el modo de mezcla e incluso la malla no es necesaria para ser el mismo.

Por lo general, el resultado será el mismo que si renderiza (diferentes) mallas con sombreado de una sola pasada.

+0

"incluso la malla no tiene que ser la misma" ¿Puedes explicarlo? Pensé en ese primer paso llamado funciones de sombreado de vértices y píxeles, pero los pases posteriores solo llamaron al sombreador de píxeles porque usaba la salida del sombreador de vértices ... – Blau

+0

Quería decir que puedes dibujar todo entre BeginPass y EndPass. Estoy usando esto, por ejemplo, para componer formas 2D a partir de diferentes partes sombreadas. –