Скільки полігонів на сцені може досягати сучасне обладнання, зберігаючи реальний час, і як дістатися?


11

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

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


2
Я не думаю, що це питання занадто відкрито, але будь-яка числова відповідь буде неправильною протягом 12 місяців.
Dan Hulme

@DanHulme Так, але підходи, які використовуються для досягнення такої ефективності, залишаються однаковими. А коли ні, то я бачив запитання, на які потрібно періодично оновлювати відповіді на інших сайтах stackexchange, тому я думаю, що це добре.
Ламагеддон

7
На це справді неможливо відповісти. Перш за все, що таке "реальний час" - 60 кадрів в секунду? 30? Менше? По-друге, відповідь буде сильно відрізнятися залежно від того, який у вас є графічний процесор і яку роздільну здатність ви надаєте. По-третє, відповідь буде сильно відрізнятися залежно від деталей того, як працює візуалізація. Обмеження складності сцени складніше, ніж просто кількість полігонів, як наслідок, але включає такі речі, як кількість дзвінків на розіграш, зміни стану, передача передач тощо - на які впливає, як працює двигун, як художники конструювали сцени тощо ...
Натан Рід

1
@Llamageddon Враховуючи ваші коментарі, я не зовсім впевнений, що ви насправді просите. З одного боку, назва вашого питання досить чітка (максимум геометрії та як це зробити), але, як зазначив Натан, на це неможливо відповісти. З іншого боку, у своїх коментарях ви говорите, що хочете знати, як мінімізувати вартість за кадр. Це надзвичайно широке запитання, адже ви можете покращити / оптимізувати ваші шейдери, графік сцени, моделі, текстури, використання API, просто все, що є частиною вашої візуалізації. Напевно, ви могли б написати цілі книги про це (якщо це вже не зробив хтось).
Нерон

1
це трохи пізно, але тут ви можете побачити СТАТИЧНУ сітку з 24.000.000 вершин у Blender. І я можу обертати його МАЛКО з 40 FPS. Я думаю, що просто дивовижно, що можуть зробити сучасні графічні картки.
user6420

Відповіді:


5

Я думаю, що прийнято вважати, що реальний час - це все, що вище, ніж інтерактивне. І інтерактив визначається як "відповідає на вхід, але не є рівним у тому, що анімація здається тужливою".
Тож реальний час буде залежати від швидкості рухів, яку потрібно представляти. Кінопроект працює в 24 FPS і є достатньо реальним часом для багатьох випадків.

Тоді скільки полігонів може працювати машина легко перевірити, перевіривши на собі. Просто створіть невеликий патч VBO як простий тест і FPS лічильник, багато зразків DirectX або OpenGL дадуть вам ідеальну пробну версію для цього еталону.

Ви знайдете, якщо у вас є відеокарта високого класу, на якій ви зможете відобразити близько 1 мільйона полігонів у режимі реального часу. Однак, як ви вже говорили, двигуни не будуть вимагати такої підтримки так легко, оскільки реальні дані світової сцени спричинять цілу кількість вивісок продуктивності, не пов'язаних з кількістю полігонів.

Ти маєш:

  • швидкість заповнення
    • вибірка текстури
    • ROP вихід
  • здійснювати дзвінки
  • візуалізація цілі
  • оновлення буфера (рівномірне або інше)
  • перевитрати
  • складність шейдера
  • складність трубопроводу (будь-який зворотний зв'язок, що використовується? Ітераційне затінення геометрії? Оклюзія?)
  • точки синхронізації з процесором (зчитування пікселів?)
  • багатогранність багатства

Залежно від слабких та сильних сторін певної графічної карти одна чи інша з цих точок буде вузьким місцем. Це не так, як ви можете точно сказати "там, це одне".

Редагувати:

Я хотів би додати, що не можна використовувати специфікацію GFlops однієї конкретної карти та лінійно відображати її на потужність багатокутника. Через те, що обробка полігону повинна пройти через послідовне вузьке місце в графічному трубопроводі, як це докладно пояснено тут: https://fgiesen.wordpress.com/2011/07/03/a-trip-through-the-graphics -pipeline-2011-part-3 /
TLDR: вершини повинні вміщуватися в невеликий кеш перед примітивною збіркою, яка є споконвічною послідовністю (має значення порядок вершинного буфера).

Якщо порівняти GeForce 7800 (старий 9 років?) З цьогорічним 980, здається, що кількість операцій в секунду, на які він здатний, збільшилася в тисячу разів. Але можна покластися на те, що полігони не збираються тиснути в тисячу разів швидше (що за цією простою метрикою було б близько 200 мільярдів на секунду).

EDIT2:

Щоб відповісти на питання "що можна зробити для оптимізації двигуна", як в "не втратити занадто велику ефективність у державних вимикачах та інших накладних витратах".
Це питання, таке старе, як і самі двигуни. І стає більш складним у міру прогресу історії.

Насправді в реальній ситуації типові дані сцени містять багато матеріалів, багато текстур, багато різних шейдерів, багато візуалізації цілей та проходів, багато вершинних буферів тощо. Один двигун, з яким я працював, працював з поняттям пакетів:

Один пакет - це те, що можна надати за допомогою одного дзвінка.
Він містить ідентифікатори для:

  • вершинний буфер
  • індексний буфер
  • камера (дає ціль проходу та візуалізації)
  • ідентифікатор матеріалу (дає шейдер, текстури та UBO)
  • відстань до очей
  • видно

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

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

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

Після цього замовлення можна застосувати мегатекстурування, віртуальне текстурування та без атрибутів ( посилання ), якщо вважається необхідним.

Щодо API двигуна також одна поширена річ - це відкласти видачу команд встановлення стану, необхідних клієнтові. Якщо клієнт вимагає "встановити камеру 0", найкраще просто зберегти цей запит, і якщо пізніше клієнт викликає "встановити камеру 1", але без інших команд між ними, двигун може виявити непотрібність першої команди і скинути її . Це усунення надмірності, яке можливо за допомогою «повністю збереженої» парадигми. Заперечуючи "негайну" парадигму, яка була б просто обгорткою над рідним API і видала команди правильно, як упорядковано клієнтським кодом. ( приклад: virtrev )

І нарешті, із сучасним обладнанням дуже дорогий (розроблений), але потенційно дуже корисний крок - перехід API на стиль метал / мантія / вулкан / DX12 та підготовка команд візуалізації вручну.

Двигун, який готує команди візуалізації, створює буфер, який містить "список команд", який перезаписується в кожному кадрі.

Зазвичай існує поняття фрейму "бюджет", гра може собі дозволити. Вам потрібно зробити все за 16 мілісекунд, тому ви чітко розділяєте час графічного процесора "2 мс для lightpre проходження", "4 мс для передачі матеріалів", "6 мс для непрямого освітлення", "4 мс для постпроцесів" ...


1
Мільйон здається мені трохи низьким.
joojaa

просто візьміть, скільки MPoly / s карта здатна, і це FPS, на якому вона видасть 1 мільйон. Я щойно згадував експеримент для рельєфу місцевості на ATI4800HD. Якщо ви берете цей список en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units, вони не дають інформацію про вершини / с, починаючи з епохи єдиної архітектури. але 10-річне обладнання, здається, рекламує близько 40 FPS за 1 мільйон трикутників. + cf edit у моїй відповіді
v.oddou

@ V.oddou Так, але , щоб отримати близько цього числа вам потрібно зробити пакетні геометрії, або інстанси, в разі динамічних сцен, і що це те , що я питаю про. Як не обмежувати себе 2% шляху до того, що може зробити обладнання.
Llamageddon

@Llamageddon ааа, я бачу, це справді питання. Дозвольте мені побачити, що я можу про це сказати. (EDIT2)
v.oddou

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