¿Es posible mezclar alfa múltiples objetivos de renderizado usando un alfa especificado?

9

Digamos que tengo objetivos de renderizado de 0 a N y RT 0 tiene en su cuarto componente un canal alfa especificado por un material o máscara o algo.

¿Es posible que el compositor de hardware combine los objetivos de renderizado 1 a N utilizando el alfa del primer objetivo de renderizado?

jeremyong
fuente

Respuestas:

5

Hasta donde sé, no hay forma en DX o GL de reutilizar el alfa de RT 0 para todas las operaciones de fusión. Desafortunadamente, no parece ser algo que sea compatible con el hardware.

Puede configurar diferentes modos de fusión para cada objetivo de renderizado, o habilitar la fusión para algunos y deshabilitar para otros; sin embargo, si la combinación está habilitada para un objetivo de representación, siempre usa su propio alfa.

También hay un modo llamado "fusión de doble fuente" (ver DX11 doc y OGL doc ), que le permite especificar el alfa para mezclar con una salida completamente separada del sombreador de píxeles, no el canal alfa del objetivo de renderizado. Sin embargo, este modo solo funciona con un objetivo de renderizado en el hardware actual.

Por lo que puedo decir, las únicas opciones para combinar varios objetivos de renderizado con el mismo alfa son:

  • Imprima el mismo alfa en todos los objetivos de renderizado (sacrificando la capacidad de almacenar otros valores en el canal alfa como lo haría en el sombreado diferido, por ejemplo).
  • Repita el renderizado en un pase separado para cada objetivo de renderizado, utilizando una combinación de doble fuente.
  • Use UAV / almacén de carga de imágenes para ejecutar la mezcla en el sombreador de píxeles (solo funciona si la geometría no se superpone en el espacio de la pantalla, porque no hay protección contra las condiciones de carrera; probablemente también un poco lento).
  • En el hardware que lo admite, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock o INTEL_fragment_shader_ordering (este último también expuesto por las GPU AMD). Estos son tres nombres para lo mismo: básicamente, una "sección crítica" en el sombreador de píxeles que le permite leer, modificar y escribir una textura atómicamente con respecto a otras invocaciones de sombreador de píxeles. Básicamente, permite una combinación programable arbitraria, pero probablemente sea bastante lenta y solo esté disponible en hardware reciente.
Nathan Reed
fuente
Sí, creo que esta también fue mi conclusión. ¿Sabe de antemano si este es el caso con DX12 o (el inédito) Vulkan? Tiene aplicaciones bastante grandes para el renderizado diferido, como ha mencionado, y ninguna de las alternativas existentes en este momento parece satisfactoria.
jeremyong
@ jeremyong Lo siento, no creo que haya cambios en las operaciones de mezcla en DX12. No estoy seguro acerca de Vulkan, pero me sorprendería; El hardware de mezcla no ha cambiado. FWIW, en los juegos en los que he trabajado, hicimos una variante de la viñeta # 3 para calcomanías diferidas, y preprocesamos la geometría para separarla en grupos que no se superponen.
Nathan Reed
Gracias por la recomendación. Calcomanías diferidas es precisamente lo que estoy implementando
jeremyong