Возможно ли альфа-смешивание нескольких целей рендеринга, используя указанную альфа?

9

Скажем, у меня есть цели рендеринга от 0 до N, а в RT 0 в четвертом компоненте есть альфа-канал, заданный материалом, маской или чем-то еще.

Возможно ли, чтобы аппаратный композитор смешивал цели рендеринга с 1 по N, используя альфа первой цели рендеринга?

jeremyong
источник

Ответы:

5

Насколько я знаю, в DX или GL нет способа повторно использовать альфа-канал RT 0 для всех операций смешивания. К сожалению, это не то, что поддерживается аппаратно.

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

Там также режим , называемый «двойной источник смешиванием» (см DX11 дока и OGL док ), которая позволяет определить альфа для смешивания с совершенно отдельным выходом из пиксельных шейдеров, не оказывает альфа - канал цели. Однако этот режим работает только с одной целью рендеринга на текущем оборудовании.

Итак, насколько я могу судить, единственные варианты смешивания нескольких целей рендеринга с одной и той же альфа-версией:

  • Выведите одну и ту же альфу на все цели рендеринга (например, жертвуя возможностью сохранять другие значения в альфа-канале, как при отложенном затенении).
  • Повторите рендеринг в отдельном проходе для каждой цели рендеринга, используя смешивание с двумя источниками.
  • Используйте БПЛА / хранилище изображений для выполнения смешивания в пиксельном шейдере (работает только в том случае, если геометрия не является самоперекрывающейся в пространстве экрана, потому что нет защиты от условий гонки; также, вероятно, довольно медленно).
  • На оборудовании, поддерживающем его, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock или INTEL_fragment_shader_ordering (последний также доступен в графических процессорах AMD). Это три названия одной и той же вещи: в основном «критическая секция» в пиксельном шейдере, которая позволяет атомарно считывать, изменять и записывать текстуру по отношению к другим вызовам пиксельных шейдеров. По сути, он допускает произвольное программируемое смешивание, но, вероятно, он довольно медленный и доступен только на новейшем оборудовании.
Натан Рид
источник
Да, я думаю, что это был мой вывод тоже. Знаете ли вы, если это происходит с DX12 или (неизданным) Vulkan? Как вы упомянули, у него довольно большие приложения для отложенного рендеринга, и ни одна из существующих альтернатив сейчас не выглядит удовлетворительной.
Jeremyong
@jeremyong Извините, я не думаю, что есть какие-то изменения в операциях смешивания в DX12. Не уверен насчет Вулкана, но я был бы удивлен; оборудование для смешивания не изменилось. FWIW, в играх, над которыми я работал, мы сделали вариант маркировки № 3 для отложенных декалей и предварительно обработали геометрию, чтобы разделить ее на непересекающиеся группы.
Натан Рид
Гоча спасибо за рекомендацию. Отложенные переводные картинки - это именно то, что я
внедряю