Buen ejemplo de un efecto de múltiples pasos?


9

En XNA (y Direct3D en general AFAIK), en lugar de crear sombreadores de vértices y fragmentos individuales, agrupa potencialmente muchos sombreadores relacionados en 'Efectos'. Cuando utilizas un efecto, seleccionas una 'técnica' (o iteras a través de todos ellos) y luego cada 'técnica' tiene una serie de 'pases'. Recorre cada pasada, selecciona el sombreador de vértices y fragmentos relevante y dibuja la geometría.

Sin embargo, lo que tengo curiosidad es para qué necesitarías múltiples pases. Entiendo que en los primeros días del 3D solo tenías una unidad de textura y luego tenías 2 y que a menudo todavía no era suficiente si también querías hacer un mapeo del entorno. Pero en los dispositivos modernos, incluso en la clase móvil, puede muestrear 8 o más texturas y hacer tantos cálculos de iluminación como desee en un solo sombreador.

¿Pueden los más experimentados ofrecer ejemplos prácticos de dónde aún se necesita la renderización de múltiples pasos, o es solo una ingeniería excesiva por parte de XNA / Direct3d?

Respuestas:


5

Cada vez que realice efectos posteriores al proceso en un conjunto de búferes capturados, sería un momento razonable para usar un efecto de paso múltiple, es decir, esbozo de toon, desenfoque de movimiento, SSAO, floración. La idea es que la primera pasada sería donde entregaría todo a los búferes apropiados, y cada pasada posterior manejaría cada efecto posterior al proceso.

Como Ranieri mencionó sobre el ejemplo de XNACC, están usando múltiples pases para representar una gran cantidad de luces. Aunque en ese ejemplo, están ejecutando el mismo pase, solo una vez para cada luz.

Tenga en cuenta que Shader Model 2 y anteriores no pueden manejar tener tantas instrucciones como Shader Model 3 o 4 en cada shader, otra razón más para dividir un efecto en múltiples pases: para admitir hardware más antiguo.


¿Puede dar un ejemplo en el que un objeto XNA Effect en el que recorre EffectPasses tiene más de un pase en lugar de usar diferentes efectos y por qué?
Jason Goemaat

4

Como se señaló en las otras respuestas, el renderizado de múltiples pasos (dibujar una sola malla varias veces con diferentes sombreadores / parámetros), como se sugiere en otras respuestas, definitivamente todavía se usa, principalmente para iluminación y efectos especiales

Los pases de efecto D3DX podrían usarse para este tipo de cosas. Pero también podría implementarse con más de un sombreador / efecto.

La intención original de los pases era ayudar a implementar sombreadores complejos en hardware de gama baja (pre-shader-2.0), donde las restricciones en el número de etapas de textura y las instrucciones de sombreado por pase eran bastante limitantes.

En el ejemplo de la iluminación de pasadas múltiples, ¿se pueden obtener ganancias de rendimiento significativas al usar pasadas en lugar de cambiar los efectos?


3

Además de la iluminación que todos mencionaron, otro uso importante de esto es el desenfoque . Horizontal y vertical se realizan en pasadas separadas (para obtener un desenfoque de 9x9, solo se deben muestrear 18 píxeles para cada píxel de salida en lugar de 81). Esto se usa para floración / HDR, profundidad de campo, brillo, etc.


Posiblemente, pero creo que la mayoría de las implementaciones de desenfoque usarían el mismo sombreador para los pases horizontal y vertical, ¿y solo pasarían las compensaciones de muestreo (como constantes del sombreador o datos por vértice)?
bluescrn

1
@bluescrn: Bloom generalmente se considera un efecto de 4 pasos: uno para extraer las áreas brillantes y reducir la escala, uno para desenfocar horizontalmente, uno para desenfocar verticalmente, uno para combinar / aumentar la imagen borrosa con el original. Si bien los parámetros del sombreador podrían usarse para controlarlos, se necesitaría la ramificación para diferenciar todos menos los dos pases borrosos
Robert Fraser,


1

Como dijo Ranieri, puede usar múltiples pases para múltiples luces, por ejemplo, con un solo material puede tener un pase 'ambiental', un pase aditivo por punto de luz, otro pase aditivo por foco y luego un pase de calcomanía para multiplicar en el difuso textura (he usado una configuración como esta en el pasado y se trata de la forma más flexible de manejar un sombreador de iluminación que he visto sin entrar en el sombreado diferido).

Además, creo que la mayoría de los sombreadores de pieles usan múltiples pases.


0

Los mapas de sombras para crear sombras se pueden hacer con varias pasadas. Solo una nota, algunos efectos de varias pasadas se pueden hacer en una pasada si la tarjeta de video admite la misma cantidad de unidades de textura que la cantidad de pasadas. Entonces, si no tiene suficientes unidades de textura, entonces tendrá que usar múltiples pases. Una plataforma de hardware fija (como las consolas de juegos), probablemente pueda codificar simplemente usando texturizado múltiple porque conoce la cantidad de unidades de textura. Pero para las PC, hay infinitas configuraciones de hardware. Si desea tener el alcance más amplio para los consumidores, es probable que desee dividir algunos de sus efectos más complejos en múltiples pases para que los usuarios con hardware de menor grado (es decir, no tengan tantas unidades de textura en la GPU) Ver el efecto. Brevemente, Los mapas de sombras se crean creando primero un mapa de sombras de la escena desde la perspectiva de la luz en una sola pasada. Luego, la textura del mapa de sombras se mezcla en la escena con las otras texturas de la escena.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.