Скільки активних шейдерів на одному кадрі в грі я повинен використовувати? 5 або більше, як 100?


20

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

  1. Намалюйте всі предмети за допомогою шейдера
  2. Перехід від шейдера один до шейдера два
  3. Намалюйте всі предмети за допомогою шейдера два

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

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

Скільки (і які) різних шейдерів використовує теоретична, сучасна, третя особа, 3D-детективна гра для ПК (DirectX 11, якщо це важливо)? Це було б 5, 20 або більше, як 100 активних шейдерів, рахуючи лише активні, на якомусь "кадрі X"? Я знаю, що це не одне число, але мені цікаво, який масштаб і фактори важливі, враховуючи ПК.


У моїй вибірковій грі я використовував би приблизно 9-11 на кадр (рахуй це як різні, невеликі шейдери або один uber-шейдер - не має значення зараз):

  1. Шейдер шкіри
  2. Шейдер для очей (не дуже багато? Але вони різні)
  3. Металевий шейдер
  4. Наземний шейдер
  5. Шейдер для снігу / дощу (за потреби)
  6. Водяний шейдер (якщо вода існує на сцені)
  7. Світловий шейдер (лише якщо задіяні якісь спеціальні ефекти)
  8. Шейдер для випромінювання світла (вуличні світильники тощо)
  9. Стандартний шейдер (для всіх інших, лише стандартне затінення)
  10. Стандартний шейдер із звичайними картами
  11. 2D шейдер (для GUI тощо)

Це "багато" чи "не багато"? Я забув про якісь важливі шейдери, які мені знадобляться?

Відповіді:


28

Це дійсно залежить від техніки. У прямому візуалізації у вас часто є один шейдер для кожного типу матеріалу. У іграх AAA, що використовують цю техніку, шейдери часто генеруються з набору параметрів на матеріалі, який художник може встановити. Це може призвести до сотень шейдерів (1). Але, скажімо, загалом кількість шейдерів складає 40

У відкладеному затіненні / візуалізації ви часто кодуєте тип матеріалу в G-буфері і пізніше використовуєте один великий шейдер, щоб правильно візуалізувати різні типи матеріалів. Це призводить до набагато менших, але складніших шейдерів. Скажімо, кількість шейдерів тут становить 5.

(1) Джерело: Я працював у підрядника Crystal Dynamics, де я створив інструмент для зменшення кількості генерованих шейдерів для Tomb Raider, оскільки автоматичне покоління виходило з ладу;). Метою було зменшити кількість шейдерів до порядку 40 чи щось подібне.


2
Дякую за вашу відповідь - це було досить складно і насичено. Я щойно проголосував за це. І все-таки я зачекаю кілька днів, перш ніж маркування буде, тому що це досить "відкрите" питання - можливо, хтось ще матиме щось додати з власного досвіду. Ще раз дякую Рою :)
PolGraphic

s / менше / менше / ...
помилка

3

Я знаю, що ви хотіли відповіді для ПК. Але я відповім за те, що я роблю в iOS, і не сподіваюся отримати вашу галочку.

Схоже, у вас є правильна ідея. Однак для кожного додатка це буде різним. Зрештою, все полягає в тому, щоб зробити те, що потрібно, щоб отримати бажану частоту кадрів. На iPhone мій цільовий показник - 60. Мені не подобається, що він опуститься нижче 30. Коли в мене вибух із кількома сотнями анімаційних частинок на основі спрайту, він знижується до 30 на iphone5 і набагато нижче на 4. Отже Я повинен приймати рішення щодо зниження складності на певних пристроях. І іноді це рішення впливає на шейдери.

Але це, як правило, не впливає на те, скільки шейдерів, а які шейдери я використовую для завдання на основі моєї мети частоти кадрів.

На мою думку, шейдери при правильному використанні підвищують частоту кадрів. У мене є додаток, у якому є 80 шейдерів, але він не використовує їх усіх в одному кадрі - можливо, близько 10. І він компілює їх за потребою і відкидає їх між сценами. І на моєму апаратному забезпеченні я не бачив частоти кадрів, що враховує шейдер. Тільки методи, що використовуються в шейдері. Але напевно я думаю, що використання 2 подібних шейдерів краще для частоти кадрів, ніж використання більш складного, який розгалужується.

У мене також є шейдери, які знижують якість, якщо візуалізація повільна або на повільному пристрої. Я використовую звичайне відображення на iPhone 5, але підміняю шейдер на той, що не робить звичайного відображення на iPhone 4.

Мені подобається відповідь Роя, і я завжди намагаюся зрозуміти, як робляться «справжні» ігри. Оскільки я самоучка, я ніколи не знаю, чи моє велике відкриття дня - це, як це робиться, або все-таки на кілька кроків за справжніми професіоналами.


1
Немає проблем з тим, що ваша відповідь "призначена для iOS". Я говорив про ПК головним чином тому, що я хочу уникати коротких відповідей "це залежить від платформи";) Можливо, ваша відповідь для мене не на 100%. Але все-таки він має деякі незалежні від платформи висновки, тому я вважаю це гарним. А інші члени спільноти (які використовують iOS) можуть вважати її ще кориснішою, тому дякую і голосуйте від мене :)
PolGraphic

1

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

Один із способів допомогти обмежити кількість перестановок, що з’являються у вашій грі, - це застосувати техніку «ubershader», за допомогою якої майже кожен шейдер виводиться з сингулярного шейдера, а відмінності та особливості поведінки змінюються за допомогою препроцесора. Звичайно, існують винятки для спеціальних ефектів, таких як глибина різкості, оклюзія навколишнього середовища тощо.

Мій досвід роботи з іграми AAA до цього моменту показав, що активна пара декількох десятків шейдерів - це нерозумно.

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