Математика в геймдеві. Що таке інтерполяція та як її використовують при розробці ігор

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

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

Нижче — невеличкий екскурс в історію інтерполяцій. Якщо вам цікаво прочитати саме про прикладний аспект цього інструменту, радимо перейти одразу до розділу «Інтерполяція та геймдев».

Хронологія інтерполяції. Астрономія та полірування

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

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

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

Вже у поточній хронології засіб почали використовувати різні вчені: китайський астроном Лю Чжо, давньоіндійський математик Брамагупта, хорезмський вчений-енциклопедист Аль-Біруні та інші. Формули і форми інтерполяцій ставали дедалі складнішими, а перелік об’єктів до яких її застосовували — дедалі ширший.

Та офіційно термін з’явився тільки у XVII столітті. У вжиток його ввів один з батьків математичного аналізу, англійський математик Джон Валліс — вперше він його використовує у книзі «Арифметика нескінченно малих» (1655 рік). Саме слово походить від латинського дієслова interpolare, де «inter» означає «проміж», а «polare» — «полірувати». До речі, окрім слова «інтерполяція» Валліс також запустив у світ терміни мантіса, інтерпретація, безперервний дріб, а ще знак нескінченності.

Далі в цю тему очікувано включився сер Ісаак Н’ьютон. У листі до свого німецького друга, богослова та дипломата Генрі Ольденбурга він описує метод, за допомогою якого певні функції можна виразити степеневим рядом змінної.

Ісаак Н’ьютон

«Але я не дуже орієнтуюся на цей метод, тому що прості ряди не завжди можна легко отримати. У мене є інший, ще не опублікований метод, за допомогою якого проблема легко вирішується. В його основі лежить зручне, готове і загальне розв’язання цієї проблеми — треба описати геометричну криву, яка повинна проходити через будь-які задані точки. І хоча на перший погляд це може здатися нерозв’язним, насправді все навпаки».

Інтерполюють українські вчені

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

Кравчук займався багатьма напрямами математики, але, наприклад, у 1924 році на VІІ Міжнародному конгресі математиків у Торонто доповідав з питання узагальненої інтерполяції. Пізніше, займаючись теорією функції дійсної змінної, Кравчук знайшов деякі нові формули цього метода.

Ще одну нову інтерполяційну формулу він відкрив займаючись математичною статистикою та теорією ймовірностей. Загалом, Михайла Кравчука можна вважати одним за найвпливовіших українських математиків першої половини XX століття. Уважний читач згадає його пам’ятну дошку на одному з корпусів Національного авіаційного університету в Києві.

По-друге, це Марина В’язовська, яка минулого року отримала найпрестижнішу нагороду в математиці — медаль Філдса.

Міжнародний математичний союз

«Медаль Філдса присуджується, як визнання видатних математичних досягнень за поточну роботу та за перспективи майбутніх досягнень. Марина В’язовська отримує нагороду за доказ того, що решітка Е8 забезпечує найщільніше пакування ідентичних сфер у восьми вимірах та за подальший внесок у пов’язані з цим екстремальні завдання та проблеми інтерполяції в аналізі Фур’є».

Нагадаємо, що минулого року В’язовська увійшла до переліку 100 найвпливовіших жінок за версією BBC. Більше про математикиню можна дізнатися з цієї статті або ж з цього інтерв’ю на DOU.

Інтерполяція та геймдев

Як зазначалося вище, інтерполяція це про заповнення, або ж про «полірування» проміжних значень. Класичний приклад — функція, яка для кількох значень х визначає відповідні значення y.

XY
00
10,4156
20,5678
30,6541
40,7753
50,8654
60,9611

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

1Інтерполяція та фізика у рушіях

Якщо ж казати саме про розробку ігор, то за словами Unity developer Максима Морозова, тут у інтерполяції безліч використань — від згладжування зображення та плавної зміни значень до фізики. За його словами, у рушії Unity фізика оновлюється за фіксованим значенням — за замовчуванням це 50 разів на секунду. Але оновлення кадра проходить вже за динамічним значенням. Таким чином зображення оновлюється не одночасно з фізикою і виникає «тряска». Щоб запобігти цьому, розробник радить використовувати інтерполяцію: завдяки цьому в кадри, де фізика не оновлюється, Unity розраховує наступну позицію об’єкта.

«Особисто я завжди використовую лінійну інтерполяцію для плавності зміни значення: це може бути прогрес бар, окреме значення чи щось інше. Крім того, в інтерполяції є один особливий параметр — значення інтерполяції. Зазвичай використовують значення від 0 до 1. Та якщо поставити замість цього Time.deltaTime, то інтерполяція буде прив’язана до кадрів в секунду і навіть при низькому фпс все залишається плавним», — додає Морозов.

Інший Unity developer Роман Романіченко навів декілька візуальних прикладів застосування інтерполяції. Загалом він пропонує цей термін пояснювати так — це про плавність відносно потрібного часу і пошук невідомого значення, спираючись на вже відомі. Роман зазначає, що працюючи в розробці ігор він постійно використовує інтерполяцію, навіть інколи цього не усвідомлюючи. Далі у цитатних блоках — пояснення пана Романіченко.

2Інтерполяція та плавність кнопок

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

«А тепер використаємо вбудований функціонал Unity по інтерполяції. Одна з них — це Mathf.Lerp. Він дозволить нам інтерполювати масштаб по кожній осі між двома значеннями float за необхідний нам проміжок часу. Саме це і є основна концепція інтерполяції — поступова зміна значення за певний проміжок часу».

«Звісно сьогодні існує багато бібліотек, які виводять та полегшують дані функції на новий рівень (як от ассет DOTween). Завдяки цьому анімація стає набагато приємнішою для людського ока. І так, я не обмовився, саме анімація — анімація в основному і працює на принципах інтерполяції. Згадайте так званий „Blending“ під час анімації. Це і є інтерполяція, яка дозволяє нам плавно перейти від однієї анімації до іншої».

3Інтерполяція та анімація ходьби

Ще приклад з арсеналу Романіченко — різниця між анімаціями «Ходьби», «Бігу» та «Спринту» без інтерполяції, та з нею.

4Інтерполяція та переміщення

Також розробник додає, що гарним наслідком інтерполяції, яка постійно використовується, є інтерполяція між векторами. Наприклад, прямолінійна реалізується через Vector.Lerp і дозволяє перемістити один об’єкт до іншого.

«Дуже крутою є і сферична інтерполяція. Різниця між нею і лінійною інтерполяцією полягає в тому, що вектори розглядаються як напрямки, а не точки в просторі. Напрям повернутого вектора інтерполюється кутом, а його величина інтерполюється між величинами from та to. Чудову ілюстрацію даної інтерполяції продемонстровано на відео нижче»

5Інтерполяція та таблиці

Наостанок, ще приклад — паперові таблиці з даними. Наприклад, таблиці стрільби. Спершу всі ці дані потрібно перевести в одномірні масиви:

«Ви прописуєте код та створюєте UI для користувача, де саме він вводить дані, які ви будете шукати в першому нашому масиві „aim“. І тут ви стикаєтесь з питанням — а якщо користувач вводить значення, якого чітко немає в нашому першому масиві „aim“? При цьому воно знаходиться в діапазоні відомих нам величин. Нехай це буде число 8. Для коректної, а головне правильної роботи програми необхідно знайти число в другому масиві „wind“, яке буде дорівнювати введеній користувачем вісімки з першого масиву. Саме тут на допомогу нам приходить лінійна інтерполяція», — резюмуєРоман.

Загалом, інтерполяція — базовий елемент математики, який дуже часто застосовується при розробці ігор. Про інші математичні концепції та об’єкти ми розкажемо у наступних матеріалах з серії «Математики в геймдеві». Якщо ж ви хочете самі запропонувати якийсь метод чи пояснити його — можете пройти наше невеличке опитування про математику в розробці ігор.

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини

👍ПодобаєтьсяСподобалось13
До обраногоВ обраному7
LinkedIn


Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Відео про способи інтерполяції в Unity

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

Відчутно досвід баланс дизайнера)

Дякую за детальну статтю, зокрема історичну довідку. Про Михайла Кравчука дізналась завдяки Вам

Прикольно. Знав про інтерполяцію, здогадувався про використання в геймдеві. Але все одно дякую.

Підписатись на коментарі