Чи можливо альфа-суміш декількох цілей візуалізації, використовуючи вказану альфа?


9

Скажімо, у мене є цілі від 0 до N, а RT 0 має в своєму четвертому компоненті альфа-канал, визначений матеріалом або маскою або чимось іншим.

Чи можливо, щоб апаратний композитор поєднав цілі від 1 до N, використовуючи альфа першої цілі візуалізації?

Відповіді:


5

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

Ви можете налаштувати різні режими накладання для кожної цілі візуалізації або ввімкнути змішування для одних та відключити для інших; однак, якщо змішування ввімкнено для цілі візуалізації, вона завжди використовує власну альфа-альфа.

Існує також режим під назвою "змішування подвійного джерела" (див. DX11 doc та OGL doc ), який дозволяє вказати альфа для змішування з повністю окремим висновком від піксельного шейдера, а не альфа-каналом цілі візуалізації. Однак цей режим працює лише з однією ціллю візуалізації на поточному обладнання.

Наскільки я можу сказати, єдиними варіантами для змішування декількох цілей візуалізації з однаковою альфа є:

  • Виведіть ту саму альфа на всі цілі візуалізації (жертвуючи здатністю зберігати інші значення в альфа-каналі, як ви, наприклад, у відкладеному затіненні).
  • Повторіть візуалізацію в окремому проході для кожної цілі візуалізації, використовуючи поєднання з двома джерелами.
  • Використовуйте БПЛА / завантаження зображень, щоб виконати змішування в піксельному шейдері (працює лише в тому випадку, якщо геометрія не перекривається в просторі екрану, оскільки немає захисту від перегонових умов; також, мабуть, начебто повільно).
  • На апаратному забезпеченні, яке його підтримує, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock або INTEL_fragment_shader_ordering (остання також піддається графічним процесорам AMD). Це три назви для однієї і тієї ж речі: в основному "критичний розділ" в піксельному шейдері, який дозволяє читати-змінювати-записувати текстуру атомним чином щодо інших викликів шейдерів пікселів. Це по суті дозволяє довільну програмовану суміш, але це, мабуть, досить повільно, і доступне лише на останніх пристроях.

Так, я думаю, що це був і мій висновок. Чи знаєте ви напевно, якщо це так з DX12 або (що не вийшов) Vulkan? У ньому є досить великі програми для відкладеної візуалізації, як ви вже згадували, і жодна з існуючих альтернатив зараз не здається задовільною.
jeremyong

@jeremyong Вибачте, я не думаю, що в DX12 зміни в операціях накладання. Не впевнений у Вулкані, але я був би здивований; обладнання для змішування не змінилося. FWIW, в іграх, над якими я працював, ми зробили варіант кулі №3 для відкладених відміток, і попередньо обробили геометрію, щоб розділити її на групи, що не перетинаються.
Натан Рід

Отримав спасибі за рекомендацію. Відкладені відмітні знаки - саме те, що я реалізую
jeremyong
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.