Яку математику повинні знати всі ігрові програмісти? [зачинено]


163

Досить просте запитання: яку математику повинні чітко розуміти всі програмісти ігор, щоб досягти успіху?

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

Примітка: оскільки немає жодної правильної відповіді , це питання (та його відповіді) - це вікі спільноти.

Крім того, якщо ви хочете фантазійних рівнянь математики з латексу, сміливо використовуйте http://mathurl.com/ .


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


@Prix: ти маєш на увазі це: gamedev.stackexchange.com/questions/1210/… ;)
Майкл Клемент

15
Закриті як надмірно конструктивної по зошити ♦
Томас Eding

1
@ThomasEding Так, занадто широкий, можливо, був би більш придатним, оскільки це очевидно перелік питань .
Анко

Відповіді:


137

Є багато інших форм математики, які корисні, але при абсолютному мінімумі вам потрібно знати це:

  • Алгебра та арифметика

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

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

Як перемістити свій ігровий об’єкт? Початківець може сказати:

"Я знаю! Я просто зроблю:" object.position.x++.

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

Основна причина використання в кватерніонах полягає в тому, що вони представляють обертання майже так само просторово, як і кути Ейлера, не страждаючи від блокування Gimbal . Блокування Гімбала починається тоді, коли будь-який кут Ейлера досягає обертання на 90 градусів навколо будь-якої осі: ви негайно втрачаєте ступінь свободи. Кватерніони вирішують це питання, додаючи четвертий вимір. Якщо ви застрягли з кутами Ейлера, вам доведеться обмежити одну вісь, щоб ніколи не обертатися більше ~ 89 градусів.

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

Причини, чому вам потрібно знати рівняння фізики:

  1. Прискорення кульового відскоку (див.: Спільна ефективність реституції)
  2. Зробіть рух кулі в напрямку з «х» ньютонами сили
  3. Зробіть, щоб щось мало більше або менше тертя, щоб воно ковзало з різною швидкістю
  4. Відповіді на зіткнення: в якому напрямку буде обертатися об'єкт, коли я натисну його «тут»?

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


1
Для фізики статті Кріса Хекера про жорстку динаміку тіла, включаючи реакцію на зіткнення та реституцію, є дивовижними: chrishecker.com/Rigid_Body_Dynamics
tenpn

25
Ви згадали кватерніони, але не матриці перетворення ??
Ендрю Рассел

8
"Замок Gimble [sic] - це такий ефект, коли, коли ви переміщуєте мишу, щоб подивитися вниз, вона зупиниться, коли ви подивитесь прямо вниз ...." Насправді це зазвичай робиться для розумності гравця, і не має нічого спільного з фіксацією карданчика.

4
Мене дивує те, як часто кватерніони пов'язані із замкненим замком. Я писав тривимірні ігри без кватерніонів і ніколи не мав проблеми з гнучким замком. Якщо ви справді розумієте 3D-математику і знаєте, що насправді є гнучким замком, то у вас не виникне такої проблеми.
Skizz

7
Блокування каркаса насправді викликається наївним обертанням з кутами Ейлера (зазвичай кути Тайт-Брайана: кута, кут, рулон). Альтернативні подання, як осьовий кут, можуть також використовуватися для запобігання його виникненню. Однак кватерніони мають перевагу від легкої інтерполяції, і, як правило, з цієї причини кращі.
Джейсон Козак

51

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

Математика - як техніка, чим більше, тим краще, поки ви можете її застосувати.

Ось такий порядок важливості я бачу.

  • Арифметика
  • Лінійна алгебра (з геометричними інтерпретаціями)
  • Обчислення (фізика)
  • Комбінаторика (рандомізовані рівні)
  • Ймовірність (балансування)
  • Статистика (Байєсський ес. Для AI)

Я міг би продовжувати. Чим більше ви знаєте, тим краще, але вивчити купу математики не означає, що ви зробите чудову гру, але це може допомогти.


4
Обчислення - це величезне поле. Напевно, для розвитку гри потрібна лише невелика кількість її.
Нолдорін

2
@Noldorin так. У більшості ситуацій розуміння взаємозв'язку між похідною, прискоренням, швидкістю та положенням може бути достатньо ... але обчислення є дивним.
Джонатан Фішофф

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

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

1
Статистика є чудовою, коли ви розробляєте ІС або просто взагалі розробляєте гру управління / магнат. З іншого боку, я взагалі не знайомий з обчисленням. Я б стверджував, що статистика та ймовірність - це по суті те саме, що для навчальних цілей, оскільки поле статистики походить від роботи над ймовірністю. Це дуже суб'єктивно.
Rushyo

25

Дуже основна - теорема Піфагора. Також відома як формула відстані.

a ^ 2 + b ^ 2 = c ^ 2де aі bє ребрами прямого трикутника і cє гіпотенузою. Це означає, що для того, щоб знайти довжину вектора, ви робите це:

відстань = sqrt (a ^ 2 + b ^ 2)

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


1
Я впевнений, що я читав це десь ще на цьому сайті раніше :)
Ricket

Звичайно, ця публікація надихнула цю тему / коментар.
Тетрад

Тут я отримую дежавю ... :)
mmyers

2
Більш загально, довжина вектора - це квадратний корінь крапкового добутку із самим собою. Отже, sqrt(V dot V)його довжина. Отже, відстань між двома точками дорівнює:sqrt((A-B) dot (A-B))
greyfade

Також чудово розуміти це в контексті тригеричної ідентичності sin² (x) + cos² (x) = 1.

19
  • Вектори як 3D, так і 4D, а також те, на що слід встановити W компонент
  • Системи координат ліворуч і праворуч і яка ваша гра
  • Точковий продукт і для чого він корисний
  • Хрестовий продукт і для чого він корисний
  • Матриці, як вони представляють орієнтацію та положення та як ви можете їх поєднувати
  • Кватерніони

Навіть якщо ви не Графічний хлопець, ви збираєтесь використовувати вектори та векторну математику 80% часу. Вони цибуля нашого веселого болоньєзу.


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

3
@Tetrad Це не дає вам вікіпедія? en.wikipedia.org/wiki/Dot_product#Definition .
Джонатан Фішофф

1
Не для ігор конкретно, ні.
Тетрад

5
Це робить. Це говорить вам, що крапковий добуток - це косинус кута. Це все, що вам потрібно знати (і можете знати), оскільки додаток все ще залежить від того, для чого ви хочете його використовувати. Орієнтуючи AI? Вам потрібен кут, тому крапка - ваш друг. Надання світла? Вам потрібен кут. Все, що можна сказати, це те, що він (крапковий добуток у цьому випадку) визначає косинус кута, довжина вектора a, довжина часу вектора b. Це знання, які можна дати. Яку частину використовувати та як не можна сказати, оскільки програми нескінченні.
Кай


10

Фірма схоплювання +, -, *, і /. Без них ти повністю накручений.


12
Я думаю, що ми можемо погодитись, що це не те, що задавали питання. (також ви забули%).
кодеранґер

2
За це відповідають інші відповіді (основна арифметика) ....
RCIX

7
Не просто основна арифметика, але розуміння того, як всі операції працюють у середовищах з плаваючою точкою з двома доповненнями, фіксованою точкою та IEEE. Без чіткого розуміння того, чому 0,1 * 3! = 0,3, або чому -x може бути не таким, як ви очікуєте, ви накрутили.

1
@ user744 Я насправді накручений, що це за чаклунство?
Неонова війна

9

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

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

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

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

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


Я пам’ятаю, коли мій маленький брат намагався зробити гру «Bang-Bang» як проект для свого середнього класу VB. У нього все було відпрацьовано, за винятком того, що він не мав уявлення, як змусити гармати кулі літати по дузі на основі кута та сили, тому що він ще не взяв Trig 1. Після того, як я пояснив основи, це спрацювало чудово.
Мейсон Уілер

Для дуги не потрібен Trig, просто використовуйте s=u.t + a.t.t/2. Вам потрібен триггер, щоб отримати початкову швидкість, хоча (u).
Skizz

Чому це не вище? Половина програмістів, з якими я працював, не можуть використовувати синуси та косинуси для життя.
zaratustra

@Skizz: Так. Вам потрібен триггер, щоб перетворити кут і силу в початковий вектор. Після цього вам просто знадобиться цикл анімації та гравітаційна константа.
Мейсон Уілер

9

По крайней мере, вам знадобиться.

  • Алгебра
  • Основна геометрія
  • Основна тригонометрія

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

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


9

Двійкові та шістнадцяткові системи нумерації та як їх перетворити в / з десяткових чисел.

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

Hex не так важливий (якщо ви не хочете обробити 0xDEADBEEF ), але як мінімум, ви хочете визначити, коли вони використовуються, і чому.


1
Якщо ви не можете прочитати шістнадцятковий, ви не можете ефективно програмувати. Більшість розрядних констант у С та С ++ визначатимуться як шістнадцяткові значення.

Думаю, ти збився Booleanі binaryзмішався. Не впевнені, що вони абсолютно необхідні для ігрового програмування.
Skizz

@Skizz, хороша точка - виправлена. (І ще один незначний момент, це вікі - ніщо не заважає вам змінити це. :)
Циклоп

Якщо ви не можете прочитати шістнадцятковий, скористайтеся інструментом, щоб перетворити його на себе.
Томас Едінг

6

Ніяких згадок про фундаментальну математику комп’ютерного програмування? Теорія графів, теорія чисел, теорія множин і конкретна математика, як правило, всі об'єднуються в болісний і погано навчаний клас, який називають "університетом дискретної математики".

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


5

Я думаю, що матриця виплат є досить важливим інструментом. Ігри часто є веселішими, коли вони підходять до цікавого балансу справедливої ​​гри з нульовою сумою, а матриці виплат допомагають оцінити це у складних випадках. Я здогадуюсь, що ця стаття у Вікіпедії є такою ж доброю, як і будь-яка, і отримує базову необхідну концепцію: http://en.wikipedia.org/wiki/Normal-form_game


Це здається мені вкрай непрактичним. Як ви вважаєте, Starcraft або Warcraft 3 були врівноважені, використовуючи такий метод? Я не думаю, що це було, я вважаю, що це ітерація, і тестування, і постійне виправлення.
bobobobo

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

[цитування потрібне]?
бобобобо

1
Це було так: amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/… Я хотів би, щоб версія Amazon включила пошук всередині книги, оскільки це може бути чудовою посиланням у бітах для цього сайту. Хоча, можливо, пошук у книзі Amazon не працює таким чином. У всякому разі, саме там вони переглянули матриці виплат, використовуючи warcraft як приклад, і перевага для управління складністю була настільки зрозумілою, що змусило мене негайно перетворити. Це не є гарантією того, що Blizzard насправді використовував такий підхід, але вони розумні хлопці, тому вони, мабуть, мали математичне рішення ...
Kzqai

... принаймні для способу здатності зрозуміти рівновагу з першого погляду. Очевидно, ви хочете додати і тестування до цього. Я фактично купив книгу на основі меншої, скороченої брошури, яка мала дивовижний вміст, пов’язаний з іграми, включаючи обговорення матриці виплат та взаємовідносин рок-папір-ножиці та всілякі чудові речі, і розчарувався, виявивши, що фінал книга є томом і багато стосується програмування на C ++ (що не моє), а також проблем управління заголовками AAA. Хоча все у викроєній памфлеті було чудово.
Kzqai

4

Зрозумійте крапковий добуток: Якщо два вектори мають приблизно однаковий напрямок (тета <90 град.), То крапковий добуток є позитивним чи, інакше, негативним. Він може бути використаний для тестування кожного разу, коли гравець видно (якщо FOV становить 90 градусів).

І узагальнити 2D гру на більш високі розміри. (використовувати векторні обчислення)

Якщо ви можете реалізувати 3D-двигун самостійно, ви готові йти.


4

Це залежить від того, що ти робиш .

Усі ігрові програмісти повинні знати хоча б середню шкільну алгебру. Це означає:

  • Добре почуття чисел
  • Комфорт з базовою математикою (додавання, суб, багато, ділення)
  • Тригонометрія (гріх і соз)
  • Вектори, кут між векторами, крапковий продукт, поперечний продукт

Ваші графічні програмісти повинні знати:

Ваші програмісти з фізики повинні знати:

  • Все вищезазначене і
  • Диференціальні рівняння
  • Числові методи

3

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


5
у більшості випадків ви хочете, atan2оскільки це забезпечує поводження з квадратом самостійно.
CodesInChaos

0

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


2
е. я згадав кватерніони.
tenpn

Ах, вибачте, я пропустив це.
Раул

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

-1

Створення ігор - це наближення «реального» життя до віртуальної реальності. Краще знати більше про реальний світ / Всесвіт, ніж менше :) .. Математика - це лише інструмент. І якщо ви розробляєте план, вам також потрібно вкласти час на навчання в планах.

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


1
Скільки реального життя в тетрісі?
tenpn

Багато :). Тетріс - це логічне мислення під тиском. Як і інші логічні ігри. Йдеться про практику. Більше практикуючих, більш тиску ти можеш впоратися і все-таки отримувати задоволення від цього. Мені здається справжнє життя:) ...
samboush

3
Ви не маєте сенсу, коли не зможете справедливо вирішити питання.
Хіт Ханнікутт

@Heath Hunnicutt, ти маєш рацію.
samboush

3
Я дуже поважаю цю відповідь.
Хіт Ханнікутт

-2

Проста відповідь: МНОГО!

Детальна відповідь:

Арифметична, елементарна та лінійна алгебра, в більшості випадків Trig, якщо ви робите 3D-гру, ВИЗНАЧЕНО обчислення та фізика (фізика вимагає обчислення)!


3
Чи можете ви трохи уточнити список? Ви говорите "Триг, якщо ви робите 3D-гру" або "Якщо ви робите 3D-гру, ВИЗНАЧЕНО обчислення"?
yoozer8
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.