Чи втрачаю я / набираю продуктивність для відкидання пікселів, навіть якщо не використовую глибинне тестування?


22

Коли я вперше шукав інструкцію щодо викидання, я виявив експертів, які стверджують, що використання відкидання призведе до зниження продуктивності. Вони сказали, що відкидання пікселів порушить здатність GPU до належного використання zBuffer, оскільки GPU доведеться спочатку запустити шейдер Fragment для обох об'єктів, щоб перевірити, відкинуто один, хто ближче до камери, чи ні. Для 2D гри, над якою я зараз працюю, я відключив як глибинний тест, так і глибинний запис. Я малюю всі об'єкти, відсортовані за їх глибиною, і це все, не потрібно, щоб GPU робив фантазії. тепер мені цікаво, чи все ще погано, якщо я відкидаю пікселі в фрагменті шейдера?

Відповіді:


20

Графічне обладнання може здійснити раннє вибивання фрагментів на основі глибини, перш ніж обчислити їх значення кольору (іншими словами, перед запуском шейдера фрагмента). Отже, якщо ви використовуєте будь-які функції, які вплинули б на це, наприклад discard, альфа-тестування або маніпулювання gl_FragDepthздатністю апаратних засобів зробити цю оптимізацію, буде порушено, оскільки справжня глибина фрагмента не може бути припущена і повний шейдер повинен бути запущений.

Незалежно від того, чи використовує будь-яка з цих компрометуючих функцій чистий ефект, який можна спостерігати, залежить від ситуації. Оптимізація раннього z може підвищити продуктивність, наприклад, якщо у вас є дуже дорогі шейдери для фрагментів, але якщо вартість вашого трубопроводу знаходиться у вершинній шейдері (або в іншому місці), це вам не принесе користі, і, отже, ви можете побачити мало або відсутність погіршення продуктивності за допомогою використанняdiscard .

Якщо вимкнути тест на глибину повністю через API, слід також запобігти запуску оптимізації, оскільки це може призвести до неправильно відображених сцен. Тоді у вашому випадку не має значення, яким ви користуєтесьdiscard .

Недавнє обладнання може змусити тести (включаючи раннє тестування трафаретів), використовуючи layout(early_fragment_tests)- на цій сторінці на сторінці, на яку я пов’язаний на початку відповіді, є додаткова інформація (та застереження).


3

Як завжди, на запитання щодо продуктивності найточніша відповідь - спробувати це на своєму цільовому обладнання та виміряти те, що відбувається.

У вашому випадку це, мабуть, не погано. Насправді є ймовірність, що це допоможе продуктивністю, заощадивши на пропускній здатності пам'яті. Це також додасть вказівки щодо шейдерів, тому це не завжди користь від продуктивності.

Навіть коли ви використовуєте буфер глибини, показник продуктивності не завжди є дуже важливим, якщо ви обережні з порядком оформлення речей.

На сайті https://fgiesen.wordpress.com/2011/07/08/a-trip-through-the-graphics-pipeline-2011-part-7/ є повідомлення в блозі, де детально описано, як можуть працювати раннє глибинне тестування. в апаратному забезпеченні та які обмеження можуть бути.


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