У чому полягає компроміс продуктивності між форвардом та відкладеною рендерінгом?


9

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

Відкладене візуалізація часто подається як оптимізація передачі вперед. Одне з пояснень полягає в тому, що освітлення є досить дорогим, і якщо у вас є якийсь перебір, ви запалюєте пікселі, які ніколи не будуть помічені на екрані, тоді як якщо ви зберігаєте властивості матеріалу в G-буфер і світло потім, ви запалюєте лише піксель, який буде насправді з'являються на екрані. Це насправді перевага відкладеного, враховуючи те, що ви також можете зробити попередній прохід по глибині, а потім зробити пропуск у прямому рендері з тестом на глибину, встановлений на D3D11_COMPARISON_EQUALабо GL_EQUALеквівалент?

Відкладене візуалізація також має потенціал для кращого планування графічного процесора. Розщеплення однієї великої основи / фронта хвилі на меншу геометрію хвилі, а потім меншу освітлювальну хвилю пізніше покращує заповнення (більше хвиль у польоті одночасно). Але ви також набагато більше використовуєте пропускну здатність (записуючи велику кількість каналів у G-буфер, а потім читайте їх під час освітлення). Очевидно, що тут особливості багато залежать від вашого GPU, але які загальні принципи?

Чи існують інші практичні міркування щодо ефективності, коли приймаються рішення між передачею вперед та відкладеною подачею? (Припустимо, що при необхідності ми можемо використовувати варіанти кожної техніки: тобто ми можемо порівняти плитку вперед і відкладену плиткою.)

Відповіді:


11

Можна уникнути перевитрати з непрозорих об'єктів навіть за допомогою прямого рендерінгу, виконавши попередній пропуск по глибині та використовуючи цю інформацію для відхилення будь-якого пікселя, який насправді не видно. Однак, залежно від вартості вершини вашої сцени, попередній пропуск на глибину може додати неприйнятну кількість накладних витрат. Крім того, візуалізація за допомогою піксельного конвеєра GPU означає, що ви не платите за одержуваний піксель, ви сплачуєте вартість за 2х2 піксельних квадрати, які надаються. Тож навіть попереднє проходження глибини все ще призводить до того, що краї трикутника витрачають на роботу затінення пікселів, які будуть відкинуті.

Планування графічного процесора є складною темою, і компроміс між прямим та відкладеним не зводиться просто до того, щоб "працювати швидше, але використовує більшу пропускну здатність". Якщо у вас є дві однаково дешеві операції, які виконуються послідовно, і кожна використовує однакову кількість ресурсів, немає ніяких причин розділяти їх на окремі шейдери: два маленьких хвильових фронта, які використовують кожен ресурс X, принципово не працюють краще, ніж один довший фронт хвилі, який також використовує X-ресурси. Якщо у вас є дешева операція і дорога операція, яку потрібно виконувати послідовно, це може виграти від розбиття на окремі шейдери: шейдер взагалі зарезервує максимальний обсяг ресурсів, який він може використовувати в будь-який момент. Це ' s Можливо, що візуалізація в прямому напрямку може не використовувати всю пропускну здатність вашого GPU, оскільки в польоті так мало хвиль, що не може здійснити достатньо операцій для насичення смуги пропускання. Але якщо тиє пропускна здатність обмежена, не може бути будь - яких переваг для відстроченого рендеринга (так як це буде , ймовірно , використовувати більше пропускної здатності).

Додаткове занепокоєння щодо продуктивності полягає в тому, що рендерінг підтримує різні типи матеріалів (скажімо, різні BRDF), просто використовуючи для цього об'єкта інший шейдер. Безпосередньо відкладений рендер повинен по-різному обробляти різні типи матеріалів (можливо, це гілка в шейдері), оскільки робота більше не групується в основи / хвилі, що узгоджуються залежно від об'єкта, що виноситься. Це можна пом'якшити за допомогою кахельного рендерінга - якщо лише для конкретних областей екрана використовується альтернативний тип матеріалу (скажімо, для волосся), то ви можете використовувати зміни шейдера з гілкою типу матеріалу лише для плиток, які містять будь-які пікселі з цим матеріалом .

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