Хороший приклад багатопрохідного ефекту?


9

У XNA (та Direct3D взагалі AFAIK), замість створення окремих шейдерів вершин та фрагментів, ви об'єднуєте потенційно багато пов'язаних шейдерів у "Ефекти". Коли ви користуєтеся ефектом, ви вибираєте "техніку" (або повторюєте їх усі), і тоді кожна "техніка" має ряд "проходів". Якщо ви переходите через кожен прохід, вибираєте відповідну вершину та фрагмент шейдера, і ви малюєте геометрію.

Мені цікаво, хоча, для чого вам знадобиться кілька пропусків? Я розумію, що у перші дні 3D у вас був лише один блок текстури, а потім у вас було 2, а це часто все ще було недостатньо, якщо ви також хотіли зробити картування навколишнього середовища. Але на сучасних пристроях, навіть у мобільному класі, ви можете вибирати 8 чи більше текстур і робити стільки обчислень освітлення, скільки хотілося б в одному шейдері.

Чи можуть більш досвідчені тут запропонувати практичні приклади того, де багатопрохідний візуалізація все ще потрібен, чи це просто надмірна інженерія з боку XNA / Direct3d?

Відповіді:


5

Будь-який час, коли ви робите післяпроцесові ефекти на наборі захоплених буферів, було б розумним часом використовувати ефект багатопрохідності, тобто контур тонів, розмиття руху, SSAO, розквіт. Ідея полягала в тому, що перший пропуск був би там, де ви переведете все у відповідні буфери, а кожен наступний пропуск оброблятиме кожен ефект після обробки.

Як і Раньєрі згадував про приклад XNACC, вони використовують декілька проходів, щоб відобразити величезну кількість вогнів. Хоча в цьому прикладі вони виконують один і той же прохід, лише один раз на кожне світло.

Майте на увазі, що Shader Model 2 і раніше не може впоратися з тим, щоб десь поруч було так багато інструкцій, як Shader Model 3 або 4 у кожному шейдері, ще одна причина розділити ефект на кілька проходів - для підтримки старого обладнання.


Чи можете ви навести приклад, коли об’єкт XNA Effect, де ви переходите через EffectPasses, має більше одного проходу, на відміну від використання різних ефектів і чому?
Jason Goemaat

4

Як вказувалося в інших відповідях, багатопрохідний візуалізація (малювання однієї сітки кілька разів з різними шейдерами / параметрами), як це пропонується в інших відповідях, безумовно, все ще використовується, насамперед, для освітлення та спеціальних ефектів

Проходи D3DX Effect можна використовувати для подібних речей. Але він також може бути реалізований з більш ніж одним шейдером / ефектом.

Первісний намір пропусків полягав у тому, щоб допомогти у впровадженні складних шейдерів на нижньому рівні (перед шейдер-2.0), де обмеження щодо кількості текстурних стадій та інструкцій щодо шейдерів на пропуск були досить обмежуючими.

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


3

Окрім освітлювальної речі, про яку всі згадували, ще одним головним використанням цього є розмиття . Горизонтальні та вертикальні виконуються в окремих проходах (тому для отримання розмиття 9x9, для кожного вихідного пікселя потрібно відібрати лише 18 пікселів замість 81). Це використовується для цвітіння / HDR, глибини різкості, світіння тощо


Можливо, але більшість, на мій погляд, реалізацій розмиття використовували б один і той же шейдер для горизонтальних і вертикальних проходів - і просто проходили б у зміщенні вибірки (як константи шейдера або дані за вершиною)?
bluescrn

1
@bluescrn - Bloom, як правило, розглядається як 4-прохідний ефект: один для вилучення яскравих областей і зменшення масштабу, один для розмивання горизонтально, один для розмиття у вертикальному напрямку, один для поєднання / збільшення масштабності розмитого зображення з оригіналом. Хоча для управління ними можна використовувати параметри шейдера, для розмежування знадобиться розгалуження всіх, окрім двох проходів розмиття
Роберт Фрейзер


1

Як сказав Раньєрі, ви можете використовувати декілька проходів для декількох світильників, наприклад, з одного матеріалу ви можете мати пропуск "навколишнього середовища", адитивний прохід на очко, інший прохід на один прожектор, а потім пропуск через відмітку, щоб помножитись на розсіяному текстура (раніше я використовував подібне налаштування, і це стосується найбільш гнучких способів поводження зі світловим шейдером, який я бачив, не потрапляючи у відкладене затінення).

Крім того, я вважаю, що більшість шерстяних шейдерів використовують кілька проходів.


0

Карти тіней для створення тіней можна робити за допомогою мультипроходу. Лише зауважте, деякі багатопрохідні ефекти можна зробити за один прохід, якщо відеокарта підтримує таку ж кількість текстурних одиниць, як кількість пропусків. Отже, якщо у вас недостатньо текстурних одиниць, вам доведеться використовувати кілька проходів. Одну з фіксованих апаратних платформ (наприклад, ігрових консолей) ви можете, ймовірно, кодувати просто за допомогою багатотекстурної текстури, оскільки ви знаєте кількість текстурних одиниць. Але для ПК існує нескінченна кількість конфігурацій апаратних засобів. Якщо ви хочете отримати найширший доступ до споживачів, ви, ймовірно, захочете розбити деякі ваші більш складні ефекти на кілька проходів, щоб користувачі з нижчим рівнем обладнання (тобто не мають стільки одиниць текстури в GPU) все ще побачити ефект. Коротко, тіньові карти створюються спочатку створенням тіньової карти сцени з точки зору світла за один прохід. Потім текстура тіньової карти змішується з сценою з іншими текстурами сцени.

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