Що саме є двигуном фізики?


57

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


36
Багато термінології запитує людей. Не потрібно спростовувати основні питання просто тому, що вони основні.
MichaelHouse

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

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

Відповіді:


58

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

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

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


6

Вхідна швидкість, маса та час, вихід - нові швидкості. Іноді імпульс обертання / кута також є входом і виходом.

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

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


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

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

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

4

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

Зокрема, фізичний двигун візьме модель з набором властивостей (маса, стики тощо) і виведе її в гру відповідно до набору параметрів.

Раннім прикладом цього були двигуни реггдола (наприклад, в Unreal), які моделювали те, як тіла, що кульгають, падають на сходи тощо.

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

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

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


4

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

Теоретично, "чистий" двигун фізики потребує трьох входів:

  • Стан світу (предмети, їх положення та їх швидкості) станом на останню "галочку" (останню мить, яку двигун повинен був моделювати)
  • Скільки часу пройшло з моменту останнього галочки
  • Список сил, які діяли на різні об’єкти у світі з часу останнього галочки

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

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

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

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

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


1

Фізичний двигун - це в основному симулятор фізичних тіл.

Вхідні дані

Це дозволяє створити тіло (або кілька), вказавши його фізичні властивості, такі як маса, розмір, щільність тощо ...

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

Нарешті, це дозволяє застосувати сили або створити суглоби між тілами.

Вихід

Після того, як ви визначилися з усіма цими речами, ви можете розпочати моделювання, і Physics Engine підкаже вам, де кожне тіло буде розміщене на наступному кроці (що зазвичай відповідає наступному кадру у вашій грі). І наступний, і так далі ...

Ви бачите спрайт, що рухається на екрані, тому що кожен кадр Ігрового двигуна запитує «Фізичний двигун»

Де зараз це тіло?

і Game Engine оновлює графічне подання відповідно.

Міркування

Мені зазвичай подобається бачити Фізичний двигун як інструмент для застосування законів фізики декларативно .

Infact замість того, щоб писати код, щоб описати, які обчислення слід проводити, щоб визначити, де буде тіло на наступному кроці, я просто описую світ фізики, встановлюючи атрибути тіл (і самого світу фізики), і я дозволяю фізичному двигунові відповісти це питання для мене.


Ваш розділ "міркування" зовсім не зрозумілий (для мене). Якщо ви вдосконалите це для більш чіткого та конкретного / практичного (наприклад, наведіть фактичні приклади системи, які ви спостерігали, побудували тощо), то я дам вам +1.
code_dredd

@ray: Дякую за пропозицію. Я виправлю це якнайшвидше!
Лука Анджелетті

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