Наскільки 3D ігри настільки ефективні? [зачинено]


188

Є щось, чого я ніколи не розумів. Як така велика велика гра на ПК, як GTA IV, може використовувати 50% мого процесора та працювати зі швидкістю 60 кадрів в секунду, тоді як демонстрація DX обертового Teapot @ 60fps використовує колосальні 30%?


124
Я не бачу, що з цим питанням не так - цілком природно бути цікавим, як інші розробники досягли певних речей. Ми повинні заохочувати цю цікавість, а не карати її пильними голосами.
Джон Фемінелла

2
@ user146780: хто задав питання ... Кращі програмісти, яких я зустрів, де працював у CGI. Гуру з SGI, люди, які працюють над паралелізацією Adobe Photoshop тощо. Тут люди не розуміють, наскільки складно написати сучасну гру, ні наскільки кваліфіковані ці кодери. Якщо ви хочете прискіпливого досвіду, подивіться, що зробили німці Cryotech з двигуном Crysis. На Youtube є відео. Ви просто не повірите. Йдеться не лише про "використання октрисів". Зазвичай ці програмісти просто набагато кваліфікованіші, ніж середні програмісти. І ви можете покластися на те, що кодери GT4 дуже хороші.
SyntaxT3rr0r

2
у вас gta4 працює зі швидкістю 60 кадрів в секунду !? GW! gta4 - це POS, який працює досить погано, я також чув, що Force Unleashed теж робить. Я б сказав, що винуватцем є Ейфорія. чесно кажучи, "використання процесора" - це дуже поганий спосіб порівняння, просто скасуйте частоту кадрів і подивіться, який з них працює найшвидше, це правильний спосіб зробити це. Крім того, пам’ятайте, що ця "складна гра", хоча вона може відображати багато речей, все ще є лише екран, який коштує речі, і якщо він буде виконаний у правильному порядку, у вас може з’явитися майже така ж кількість піксельної роботи, як і ваша "проста" демонстрація, а робота пікселів - це насправді те, що її вбиває.
мат

8
Вам потрібен профілер, який показує, скільки використовується GPU (графічний процесор). Б'юсь об заклад, GTA IV показує вам ~ 99%, а демо-версію - 3%.
0скар

З досвіду, близько 10% ігрових програмістів, з якими я працював, були будь-якими хорошими, решта були в середньому в середньому. Деякі були абсолютно некомпетентними.
Skizz

Відповіді:


69

Взагалі, це тому, що

  1. Ігри є оптимальними щодо того, що їм потрібно робити, і
  2. Вони особливо користуються вашим обладнанням.

Наприклад, одна проста оптимізація, яку ви можете зробити, включає насправді не намагання намалювати речі, які не можна побачити. Розгляньте складну сцену, як міський пейзаж від Grand Theft Auto IV . Відображувач насправді не рендерує всі будівлі та споруди. Натомість він відображає лише те, що може бачити камера. Якби ти міг пролетіти до задньої частини тих же будівель, звернених до оригінальної камери, ти побачив би напівзбудовану вигорнуту структуру корпусу. Кожна точка, яку камера не бачить, не відображається - оскільки ви її не бачите, не потрібно намагатися показувати її вам.

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

Інша частина вашого питання полягає в тому, чому демо використовує стільки процесора:

... а демонстрація DX обертового чайника @ 60 кадрів в секунду використовує колосальні 30%?

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

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


3
Демо DX використовує і ваше обладнання. Отже, що "особливого"?
тур1нг

3
але демонстрація навряд чи буде оптимальною щодо цього.
µBio

2
@ tur1ng, демонстрація чайника, наприклад, може включити відображення , тіні та інші ефекти.
Нік Дандолакіс

2
У чайнику може бути більше полігонів, ніж на сцені GTA4. Справа в тому, що поточне вузьке місце в графічному візуалізації - це більш текстурні ефекти, такі як нанесення виправлених методів для додавання деталей та інших ефектів після надання.
Клаїм

5
Текстури - чайник створюється з великої кількості окремих трикутників, все з нормалями та взаємодіями з освітленням. Як виглядає шалено складний 3d-світ у грі, це часто досить прості великі блоки, покриті детальною картиною. Багато "3d" - це розумна тінь і перспективні художні ефекти в статичному 2d-зображенні, намальованому на 3d-формі
Мартін Беккет

96

Терпіння, технічна майстерність та витривалість.

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

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

  1. Ваш код розроблений навколо двох речей - ваших даних та цільового обладнання.
  2. Найшвидший код - це код, який ніколи не виконується - сортуйте свої дані за партіями та виконайте лише дорогі операції з необхідними даними
  3. У тому, як ви зберігаєте свої дані, є ключовим - націліть на постійний доступ, це дозволяє вам обробляти обробку з високою швидкістю.
  4. Парелізуйте все, що можливо
  5. Сучасні процесори швидкі, сучасна ОЗУ дуже повільна. Пропуски кеша смертельні.
  6. Надайте стільки, скільки зможете на графічний процесор - він має швидку локальну пам’ять, тому він може прошивати дані, але вам потрібно допомогти, правильно організувавши свої дані.
  7. Не використовуйте багато комутаторів візуалізації (знову збирайте схожі вершинні дані разом), оскільки це призводить до зупинки GPU
  8. Перемістіть текстури та переконайтесь, що вони є двома силами - це покращує ефективність кеш текстури на графічному процесорі.
  9. Використовуйте рівні деталізації, наскільки це можливо - низькі / середні / високі версії 3D-моделей та перемикайтесь на основі відстані від плеєра камери - без точки одержання версії з високою роздільною здатністю, якщо на екрані всього 5 пікселів.

39

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

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

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

Ці "оптимізації" величезні - ви можете ефективно реалізувати алгоритм і змусити його працювати в 10 разів швидше, але вибір розумного алгоритму, який дає подібний результат ("обман"), може змусити вас перейти від O (N ^ 4) до O ( журнал (N)).

Оптимізація реальної реалізації - це те, що робить ігри ще ефективнішими, але це лише лінійна оптимізація.


30

Ееееек!

Я знаю, що це питання давнє, але захоплююче, що ніхто не згадав про VSync !!! ???

Ви порівняли використання процесора гри в 60 кадрів в секунду з використанням процесора демонстрації чайника в 60 кадрів в секунду.

Хіба не очевидно, що обидва працюють (більше або менше) рівно 60 кадрів в секунду? Це призводить до відповіді ...

Обидва додатки працюють із vsync! Це означає (скидається вниз), що кадр візуалізації фіксується на "вертикальному інтервалі порожнього" вашого монітора. Графічне обладнання (та / або драйвер) відображатиметься лише на макс. 60 кадрів в секунду. 60 кадрів в секунду = 60 Гц (Гц = в секунду) частота оновлення. Тому ви, мабуть, використовуєте досить старий, мерехтливий ЕЛТ або звичайний РК-дисплей. На CRT, що працює на частоті 100 Гц, ви, мабуть, побачите частоту кадрів до 100 ГГц. VSync також застосовується аналогічно до РК-дисплеїв (вони зазвичай мають частоту оновлення 60 ГГц).

Отже, демонстрація чайника справді може працювати набагато ефективніше! Якщо він використовує 30% часу процесора (порівняно з 50% часу процесора для GTA IV), то він, ймовірно, використовує менший час процесора для кожного кадру, і просто чекає довше наступного вертикального порожнього інтервалу. Щоб порівняти обидва додатки, слід відключити vsync і виміряти ще раз (ви будете вимірювати набагато більші fps в обох додатках).

Іноді нормально відключити vsync (у більшості ігор є параметр у налаштуваннях). Іноді ви побачите "виривання артефактів", коли vsync відключений.

Докладні відомості про нього та чому він використовується у Вікіпедії: http://en.wikipedia.org/wiki/Vsync


Я згоден, для кращого порівняння вам слід відключити vsync. Однак корінь питання все ще стоїть. 30% для чайника проти 50% використання процесора для гри - це менша різниця, ніж можна очікувати. Але я пам'ятаю в перші дні, коли картографування навколишнього середовища тільки почало набувати популярності, а крутий демонстрація nVidia в той час була чайним чайником, який обробляв довкілля. Ці демонстрації зазвичай навіть не набрали 60 кадрів в секунду. Я думаю, моя думка полягає в тому, що ці демонстрації чайника часто розсувають межі нового візуального ефекту.
Стів Вортем

25

Хоча багато відповідей тут надають відмінні ознаки , як я замість того, щоб відповісти на просте запитання про те, чому

Мабуть, найкращим прикладом (безумовно, одним із найвідоміших) є програмне забезпечення Id. Вони зрозуміли дуже рано, за часів командира Кіна (задовго до 3D), що придумали розумний спосіб досягти чогось 1 , навіть якщо він покладався на сучасне обладнання (в даному випадку графічну карту EGA!), Що графічно перевершує конкуренція, завдяки якій ця гра виділиться. Це було правдою, але далі вони зрозуміли, що замість того, щоб самостійно придумувати нові ігри та контент, вони можуть ліцензувати технологію, отримуючи тим самим дохід від інших, в той час як зможуть розвинути двигуни нового покоління і, таким чином, знову перескочити конкуренцію .

Здібності цих програмістів (разом із кмітливістю до бізнесу) - це те, що зробило їх багатими.

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

Простіше кажучи, у людини, яка написала демонстрацію чайника, ймовірно, було одне чи більше таких питань:

  • менше часу
  • менше ресурсів
  • менший стимул за винагороду
  • менше внутрішня та зовнішня конкуренція
  • менші цілі
  • менший талант

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

Найменш цілі, ймовірно, є основною причиною. Ціль демонстрації чайника був саме цим, демонстрацією. Але не демонстрація вміння програмістів 3 . Це було б демонстрацією однієї невеликої сторони (великої) ОС, в даному випадку DX-рендерінга.

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


  1. у цьому випадку плавна прокрутка на апаратному забезпеченні ПК
  2. Напевно, більше, ніж я, тому ми про це все зрозуміли
  3. строго кажучи, це було б також демо-версією для його / її менеджера, але знову ж таки драйвом тут буде час та / або наочна якість.

17

Через кілька причин

  • 3D ігрові двигуни дуже оптимізовані
  • більшу частину роботи виконує ваш графічний адаптер
  • 50% Hm, дозвольте мені припустити, у вас є двоядерне, і використовується тільки одне ядро ​​;-)

EDIT: Щоб дати кілька цифр

2,8 ГГц Athlon-64 з NV-6800 GPU. Результати:

  • Процесор: 72,78 Mflops
  • GPU: 2440,32 Mflops

@stacker: ти маєш на увазі, що всі обчислення, які проводяться в найвищому 3D-іграх, які не виконуються графічним процесором, насправді є однопотоковими і, на якийсь випадок, наповнять 100% процесора? Значить, ігрові перси будуть прив’язані до одного непроцесорного ядра? Мені дуже важко повірити.
SyntaxT3rr0r

4
Це не означає, що програма є однопотоковою - це просто означає, що принаймні одна нитка йде так швидко, наскільки це можливо. Що розумно, бо чому б ви хотіли, щоб це йшло повільніше? З іншого боку, багато ігор майже повністю однотонні. Дуже складно написати складне моделювання ефективним способом при багатопотоковій роботі, оскільки типова ситуація в одночасних / розподілених системах прийому трохи більше затримок для придбання набагато більшої пропускної здатності не є корисною для гри, яка повинна відповідати.
Килотан

8

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

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


4
  1. Управління сценами. kd-дерева, зрізання фруктових фруктів, bsps, рамки для обмеження герархії, набори часткової видимості.
  2. ЛОД. Вимкнення версій із нижчими деталями для заміни далеких об'єктів.
  3. Самозванців. Як LOD, але навіть не об'єкт, а лише картина чи «білборд».
  4. SIMD.
  5. Спеціальне управління пам'яттю. Вирівняна пам'ять, менше фрагментації.
  6. Спеціальні структури даних (тобто відсутність STL, відносно мінімальні шаблони).
  7. Збірка місцями, в основному для SIMD.

4

За всіма кваліфікованими та хорошими відповідями, той, що має значення, все ще відсутній: Лічильник використання процесора Windows не дуже надійний. Я думаю, що цей простий демонстраційний чайник просто викликає функцію візуалізації в режимі очікування, блокуючи при заміні буфера.

Тепер лічильник використання процесора Windows просто дивиться, скільки часу процесора витрачається на кожен процес, а не як використовується цей час процесора. Спробуйте додати

Sleep(0);

одразу після повернення з функції візуалізації та порівняйте.


У мене був демонстраційний чайник DX, який завжди використовував 25% мого процесора. Виявилося, це було тому, що я був на чотирьохядерному ядрі і, щоб заблокувати ігровий цикл на 60 кадрів в секунду, у мене був цикл "Чи ми там ще", який постійно перевіряв час. Я змінив режим сну (timeToNextFrame), а використання процесора знизилося до майже 0.
Джонатан Пірс

3

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


1

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

Процесор залишається робити прості речі - наприклад, AI та інші логічні ігри.


1

Як може така велика гра на ПК, як GTA IV, використовувати 50% мого процесора та працювати зі швидкістю 60 кадрів в секунду, тоді як демонстрація DX обертового Teapot @ 60fps використовує колосальні 30%?

Хоча GTA, швидше за все, буде більш ефективним, ніж демонстрація DX, вимірювання ефективності процесора таким чином істотно порушено. Ефективність може бути визначена, наприклад, за кількістю роботи, яку ви виконуєте за певний час. Простий контрприклад: породжує один потік на логічний процесор і нехай на ньому проходить проста нескінченна петля. Ви отримаєте 100% використання процесора, але це не ефективно, оскільки корисна робота не проводиться.

Це також призводить до відповіді: як гра може бути ефективною? При програмуванні «великих великих ігор» докладаються величезні зусилля для оптимізації гри в усіх аспектах (що в наші дні зазвичай також включає багатоядерні оптимізації). Що стосується демонстрації DX, то його суть полягає не в швидкості, а в демонстрації концепцій.


1

Я думаю, вам слід поглянути на використання GPU а не процесору ... Я думаю, що графічна карта набагато зайнята в GTA IV, ніж у зразку Teapot (вона повинна бути практично простою).

Можливо, ви могли б використовувати щось на зразок цього монітора, щоб перевірити це:

http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html

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


1

Подивіться на відповідь на vsync; тому вони працюють з однаковою частотою кадрів.

По-друге, процесор пропускає лідируючі позиції в грі. Спрощене пояснення полягає в тому, що основний цикл гри - це просто нескінченний цикл:

while(1) { 
  update();
  render();
}

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

50% процесор в GTA "більш продуктивний", ніж 30% в демонстраційній версії, оскільки, швидше за все, він зовсім не робить багато чого; але GTA оновлює багато деталей. Навіть додавання "Sleep (10)" до демонстрації, ймовірно, знизить його CPU на тону.

Нарешті, подивіться на використання GPU. Демонстрація, ймовірно, займає <1% на сучасній відеокарті, тоді як GTA, ймовірно, отримає більшість під час гри.

Словом, ваші орієнтири та вимірювання не є точними.


1

Демо демонстраційний чайник DX не використовує 30% процесора для корисної роботи. Це зайнято-чекаючи, тому що більше нічого робити.


0

З того, що мені відомо про серію Unreal, деякі умовності порушуються, як інкапсуляція. Код складається в байт-код або безпосередньо в машинний код залежно від гри. Крім того, об'єкти надаються та упаковуються у вигляді сіток, а речі, такі як текстури, освітлення та тіні, попередньо розраховуються, тоді як, як чиста 3d-анімація, це потрібно в реальному часі. Коли гра фактично працює, є також деякі оптимізації, такі як лише візуалізація лише видимих ​​частин об'єкта та відображення текстурних деталей лише при закритті. Нарешті, ймовірно, що відеоігри створені для того, щоб найкраще вийти з платформи в даний момент (наприклад: Intelx86 MMX / SSE, DirectX, ...).


0

Я думаю, що тут відсутня важлива частина відповіді. Більшість відповідей говорить про те, що "Знай свої дані". Справа в тому, що ви повинні однаково і з однаковою мірою важливо знати і своє:

  • Процесор (годинник та кеші)
  • Пам'ять (частота та затримка)
  • Жорсткий диск (з точки зору швидкості та часу пошуку)
  • Графічний процесор (#cores, годинник та його пам'ять / кеші)
  • Інтерфейси: контролери Sata, версії PCI тощо.

Але , крім того, з сучасними сучасними комп’ютерами ви ніколи не зможете відтворити справжнє відео з роздільною здатністю 1080p при >> 30ftp (одне зображення 1080p в 64 бітах зайняло б 15 000 Ko / 14,9 MB). Причиною цього є через вибірку / точність вибірки. Відеоігра ніколи не використовує подвійну точність (64 біт) для пікселів, зображень, даних тощо ..., а скоріше використовувати меншу власну точність (~ 4-8 біт), а іноді і меншу точність, розширену за допомогою методів інтерполяції, щоб забезпечити розумне обчислення час.

Існують і інші методи, такі як відсікання даних (як зі стандартом OpenGL, так і за допомогою програмного забезпечення), стиснення даних тощо. Майте також на увазі, що поточні графічні процесори можуть бути> в 300 разів швидшими за поточні процесори з точки зору можливостей обладнання. Однак хороший програміст може отримати коефіцієнт 10-20x, якщо ваша проблема не буде повністю оптимізована та повністю паралелізована (особливо паралелізація завдання).

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

Отже, щоб повернутися до чайника, ви повинні побачити, як представлена, вибірена геометрия та з якою точністю Vs бачиться в GTA 5, з точки зору геометрії / текстур та найважливіших, деталей (точності, відбору проб тощо)

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