Какую математику должны знать все игровые программисты? [закрыто]

163

Вопрос достаточно простой: какой математикой должны обладать все игровые программисты, чтобы быть успешными?

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

Примечание: поскольку нет правильного ответа , этот вопрос (и его ответы) является вики сообщества.

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

тетрадь
источник
1
ммм, я думаю, что была тема, в которой говорилось о книгах по математике, которые должен прочитать каждый программист, или о чем-то в этом роде, я действительно не вспоминаю об этом ... но у него были некоторые хорошие вещи ... не уверен, был ли он здесь или в stackoverflow, а также LOL
Prix
@Prix: вы имеете в виду это: gamedev.stackexchange.com/questions/1210/… ;)
Майкл Клемент
15
Закрытые как чрезмерно конструктивной по Тетрады ♦
Томас Eding
1
@ThomasEding Да, слишком широкий, возможно, был бы более уместным, так как это явно вопрос списка .
Анко

Ответы:

137

Есть много других форм математики, которые полезны, но в абсолютном минимуме вы должны знать это:

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

Они довольно простые, но если вы их не знаете, у вас не будет даже шанса стать программистом, не говоря уже о разработчике игр.

Объекты в игровом мире представлены векторами. Вектор представляет такие вещи, как положение объекта, направление взгляда и скорость. Расчеты по векторной математике, такие как нормализация точечных произведений , кросс-произведений и векторов, имеют важное значение.

Как мне переместить мой игровой объект? Новичок может сказать:

«Я знаю! Я просто сделаю:» object.position.x++.

Нет нет нет. Вам нужно использовать векторный расчет. Объекту требуется положение, направление и вектор ускорения, которые вы можете использовать для перемещения объекта. Если вы сделаете новичок, вы застрянете в неуправляемом беспорядке, и как заставить его двигаться в направлении, не совпадающем с мировой осью XYZ?

Основная причина, по которой игры используют кватернионы, заключается в том, что они представляют повороты почти так же эффективно, как и углы Эйлера, не страдая от блокировки карданного подвеса . Gimbal Lock начинается, когда любой угол Эйлера достигает поворота на 90 градусов вокруг любой оси: вы сразу теряете степень свободы. Кватернионы решают эту проблему, добавляя четвертое измерение. Если вы придерживаетесь углов Эйлера, вам придется ограничить одну ось, чтобы она никогда не вращалась более чем на ~ 89 градусов.

Если вы собираетесь программировать математику для ответов физики в игре, то посещение урока физики не было бы плохой идеей.

Причины, почему вам нужно знать физические уравнения:

  1. Отскок мяча (см .: коэффициент восстановления)
  2. Заставьте шар двигаться в направлении с «х» ньютонами силы
  3. Сделайте что-то с большим или меньшим трением, чтобы оно скользило с другой скоростью
  4. Ответы на столкновения: в каком направлении будет вращаться объект, когда я нажму на него «здесь»?

Если вы используете физический движок (или игровой движок, в котором встроен физический движок), вы можете получить немного знаний о физике. Тем не менее, неплохо знать, когда вам нужно испачкать руки, потому что физический движок не работает должным образом.

Brock Woolf
источник
1
Для физики статьи Криса Хекера о динамике твердого тела, включая реакцию на столкновение и восстановление, изумительны: chrishecker.com/Rigid_Body_Dynamics
tenpn
25
Вы упомянули кватернионы, но не матрицы преобразования?
Эндрю Рассел
8
«Блокировка Gimble [sic] - это тот эффект, при котором, когда вы перемещаете мышь, чтобы посмотреть вниз, он останавливается, когда вы смотрите прямо вниз…». На самом деле это обычно делается для здравомыслия игрока и не имеет ничего общего с блокировкой карданного подвеса.
4
Меня поражает, как часто кватернионы связаны с блокировкой трюка. Я написал 3D-игры без каких-либо кватернионов, и у меня никогда не было проблем с блокировкой. Если вы действительно разбираетесь в трехмерной математике и знаете, что на самом деле представляет собой блокировка на марше, у вас такой проблемы не будет.
Skizz
7
Блокировка карданного подвеса на самом деле вызвана наивным вращением с углами Эйлера (обычно углы Тайта-Брайана: рыскание, тангаж, крен). Альтернативные представления, такие как Axis-Angle, также могут быть использованы для предотвращения его появления. Однако кватернионы имеют преимущество простой интерполяции и, как правило, являются предпочтительными по этой причине.
Джейсон Козак
51

Я мечтаю о том дне, когда разработка игр будет так же ориентирована на данные, как и художественное производство. Я не вижу этого нигде на горизонте, поэтому на данный момент знание математики представляется необходимостью.

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

Вот порядок важности, который я вижу.

  • арифметика
  • Линейная алгебра (с геометрическими интерпретациями)
  • Исчисление (физика)
  • Комбинаторика (рандомизированные уровни)
  • Вероятность (балансировка)
  • Статистика (Байесовская особенно для AI)

Я мог бы продолжать идти. Чем больше вы знаете, тем лучше, но изучение математики не означает, что вы сделаете отличную игру, но это может помочь.

оборота Джонатан Фишофф
источник
4
Исчисление это огромное поле. Вероятно, только небольшое количество этого необходимо для разработки игр.
Нолдорин
2
@ Noldorin да. В большинстве ситуаций понимания взаимосвязи между производной, ускорением, скоростью и положением может быть достаточно ... но исчисление потрясающее.
Джонатан Фишофф
Байесовские ИИ, как правило, не используются в играх из-за сравнительно большого использования памяти, плохой отладки и предсказуемости, а также из-за четко определенного проблемного пространства. Хорошая реализация классического поиска с умной эвристикой обычно (но не всегда) лучший инструмент.
1
Для меня это не конкретный байесовский алгоритм, который я считаю важным, но понимание процесса рассуждения, поддерживаемого ET Jaynes. Я не думаю, что что-то медленное в байесовских рассуждениях.
Джонатан Фишофф
1
Статистика замечательна, когда вы разрабатываете ИИ или просто разрабатываете игру для менеджмента / магната. С другой стороны, я совсем не знаком с исчислением. Я бы сказал, что статистика и вероятность, по сути, одно и то же для целей обучения, так как область статистики проистекает из работы над вероятностью. Это очень субъективно.
Rushyo
25

Самой основной является теорема Пифагора. Также известен как формула расстояния.

а ^ 2 + B ^ 2 = с ^ 2где aи b- ребра прямоугольного треугольника и cявляется гипотенузой. Это означает, что для того, чтобы найти длину вектора, вы делаете это:

расстояние = sqrt (a ^ 2 + b ^ 2)

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

Tetrad
источник
1
Я почти уверен, что читал это где-то еще на этом сайте раньше :)
Ricket
Конечно, этот пост был вдохновлен этой веткой / комментарием.
Тетрад
Я получаю немного дежавю здесь ... :)
mmyers
2
В более общем смысле длина вектора - это квадратный корень точечного произведения с самим собой. Итак, sqrt(V dot V)это его длина. Итак, расстояние между двумя точками равно:sqrt((A-B) dot (A-B))
greyfade
Также здорово понимать это в контексте триговой идентичности sin² (x) + cos² (x) = 1.
19
  • Векторы как 3D, так и 4D, и какой компонент W должен быть установлен
  • Левая и правая системы координат, и какая ваша игра
  • Точечный продукт и для чего он нужен
  • Кросс-продукт, и для чего он полезен
  • Матрицы, как они представляют ориентацию и положение и как вы можете их комбинировать
  • Кватернионы

Даже если вы не The Graphics Guy, вы будете использовать векторы и векторную математику в 80% случаев. Они лук нашего веселого болоньезе.

tenpn
источник
4
Это неплохой список, но я надеялся на более описательный ответ. Т.е. что такое формула точечного продукта, что это значит и как это полезно.
Тетрад
3
@Tetrad Разве википедия не дает вам это? en.wikipedia.org/wiki/Dot_product#Definition .
Джонатан Фишофф
1
Не для игр конкретно, нет.
Тетрад
5
Оно делает. Он говорит вам, что скалярное произведение - это косинус угла. Это все, что вам нужно знать (и может знать), поскольку приложение все еще зависит от того, для чего вы хотите его использовать. Ориентировать ИИ? Вам нужен угол, поэтому точка - ваш друг. Рендеринг света? Тебе нужен угол. Все, что можно сказать, это то, что он (в данном случае произведение точек) определяет косинус угла, умноженного на длину вектора a, умноженного на длину вектора b. Это знание, которое можно дать. Какую часть использовать и как, нельзя сказать, поскольку приложения бесконечны.
Кадж
Для получения более подробной информации о компоненте W см. Знаменитый: Нужен ли мне компонент 'w' в моем классе Vector? и что делает видеокарта с четвертым элементом вектора в качестве конечной позиции?
Иван Аксаментов - Оставить
10

Фирма схватывание +, -, *, и /. Без них ты полностью облажался.

Коммунистическая утка
источник
12
Я думаю, что мы все можем согласиться, что это не тот вопрос, который задавался вопросом. (также вы забыли%).
Coderanger
2
За это отвечают другие ответы (базовая арифметика) ....
RCIX
7
Не только базовая арифметика, но и понимание того, как все операции работают в средах с двумя дополнениями, с фиксированной запятой и IEEE. Без четкого понимания, почему 0,1 * 3! = 0,3 или почему -x может не соответствовать вашим ожиданиям, вы облажались.
1
@ user744 Я на самом деле облажался, что это за колдовство?
Неон Warge
9

Да, программирование игр, как правило, довольно математично. Какая математика вам нужна, зависит от того, над чем вы работаете. Конечно, базовая арифметика обязательна, как и во всех программах. Сверх того:

Геометрия жизненно важна для любой графической работы. Если вы хотите отображать вещи на экране, вам необходимо понимать системы координат. И если вы хотите переместить их во что-то кроме кардинальных направлений, вы будете полностью потеряны без четкого понимания синусов, косинусов и векторов (основной триггер). А если вам нужно работать в 3D, требования к геометрии и триггерам становятся намного сложнее.

Если вы хотите смоделировать какую-либо дистанционно реалистичную физику, для этого вам понадобится исчисление. (Это то, что заставило Ньютона изобрести исчисление, в конце концов.)

Любые вычисления вероятностей требуют знания статистики и теории вероятностей, чтобы получить разумные результаты без безумных проб и ошибок.

Там, вероятно, гораздо больше, но это то, что приходит на ум прямо из головы.

Мейсон Уилер
источник
Я помню, как мой младший брат пытался сделать игру Bang-Bang как проект для своего старшего класса VB. У него все было продумано, за исключением того, что он понятия не имел, как заставить пушечные ядра лететь по дуге, основанной на угле и силе, потому что он еще не взял Trig 1. После того, как я объяснил основы, все заработало просто отлично.
Мейсон Уилер
Для дуги не нужен триг, просто используйте s=u.t + a.t.t/2. Вам нужно триг, чтобы получить начальную скорость, хотя (и).
Skizz
Почему это не выше? Половина программистов, с которыми я работал, не может использовать синусы и косинусы для их жизни.
Заратустра
@Skizz: Да. Вам нужно триг, чтобы превратить угол и мощность в начальный вектор. После этого вам просто нужен цикл анимации и гравитационная постоянная.
Мейсон Уилер
9

По крайней мере, вам нужно.

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

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

Если вы хотите заняться графическим программированием, вам понадобится гораздо больше математических знаний, но общее программирование геймплея не обязательно должно быть настолько интенсивным по математике.

jessecurry
источник
9

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

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

Шестнадцатеричный код не так важен (если только вы не хотите обрабатывать 0xDEADBEEF ), но как минимум вы захотите узнать, когда они используются и почему.

Циклоп
источник
1
Если вы не можете читать шестнадцатеричные, вы не можете эффективно программировать. Большинство битовых констант в C и C ++ будут заданы как шестнадцатеричные значения.
Я думаю, что вы получили Booleanи binaryперепутали. Не уверен, что они абсолютно необходимы для программирования игр.
Skizz
@ Skizz, хорошая точка зрения - исправлено. (И еще один незначительный момент, это вики - ничто не мешает вам изменить его. :)
Циклоп
Если вы не можете прочитать шестнадцатеричный код, используйте инструмент для его преобразования.
Томас Эдинг
6

Нет упоминаний об основах математики компьютерного программирования? Теория графов, теория чисел, теория множеств и конкретная математика обычно объединяются в болезненный и плохо обучаемый класс, называемый «дискретная математика» в университете.

«Тупые битовые трюки» экономят каждый вид времени программы (и они также обычно эквивалентны некоторым строковым трюкам и трюкам с наборами), типы графиков и обходы используются повсеместно (даже если вы просто выбираете контейнеры STL), а алгоритмическая сложность является ключом к оптимизации, поскольку языки достигают более высоких уровней.

user744
источник
5

Я думаю, что матрица выплат является довольно важным инструментом. Игры часто веселее, когда они приближаются к некоторому интересному балансу с нулевой суммой честной игры, а матрицы выплат помогают вам оценить это в сложных случаях. Я думаю, что эта статья в Википедии хороша, как и любая другая, и содержит основную необходимую концепцию: http://en.wikipedia.org/wiki/Normal-form_game

Kzqai
источник
Это представляется крайне непрактичным для меня. Как вы думаете, Starcraft или Warcraft 3 были сбалансированы с помощью такого метода? Я так не думаю, я считаю, что это были итерации и тесты игр, и постоянные патчи.
Бобобобо
Ну, они почти наверняка были, первоначальные армии варкрафта были модифицированными дубликатами друг друга, которые, вероятно, были созданы с матрицами выигрышей, разработанными, чтобы сделать их сбалансированными в целом. После этого они, возможно, просто опирались на то, чему научились настраивать вещи, но им, вероятно, пришлось делать это снова со звездным кораблем, чтобы получить некоторый разумный уровень баланса теперь, когда были задействованы три разные армии, и снова, когда были добавлены юниты звездного корабля II. Очевидно, что вы не просто останавливаетесь на модели, тестирование игр часто показывает новые свойства, но матрица выигрыша - это то, как вы изначально моделируете сложность.
Kzqai
[нужна цитата]?
Бобобобо
1
Это было так: amazon.com/Game-Architecture-Design-New-Edition/dp/0735713634/… Мне бы хотелось, чтобы версия amazon включала поиск внутри книги, потому что для этого сайта было бы неплохо ссылаться в битах. Хотя, возможно, поиск книг в Amazon не работает таким образом. Во всяком случае, именно здесь они рассмотрели матрицы выплат, используя в качестве примера варкрафт, и преимущество управления сложностью было настолько очевидным, что сделало меня мгновенным конвертом. Это не гарантия, что Blizzard действительно использовал этот подход, но они умные ребята, поэтому у них, вероятно, было математическое решение ...
Kzqai
... по крайней мере, для того, чтобы понять баланс с первого взгляда. Очевидно, что вы хотите добавить тестирование к этому также. На самом деле я купил книгу из-за небольшой, урезанной брошюры, в которой было потрясающее содержание, связанное с игрой, включая обсуждение матрицы выплат, отношений «камень-бумага-ножницы» и всевозможных отличных вещей, и был разочарован, обнаружив, что финал Книга представляет собой том и посвящена программированию на C ++ (что мне не нравится), а также проблемам управления заголовками AAA. Однако все в урезанной брошюре было великолепно.
Kzqai
4

Понять произведение точек: если два вектора имеют примерно одинаковое направление (тета <90 градусов), то произведение точек будет положительным или отрицательным. Его можно использовать для проверки, когда игрок находится в поле зрения (при условии, что FOV составляет 90 градусов).

И обобщите вашу 2D игру на более высокие измерения. (используйте векторные вычисления)

Если вы можете реализовать 3D-движок самостоятельно, вам пора.

Мин-Tang
источник
4

Это зависит от того, что вы делаете .

Все игровые программисты должны знать хотя бы среднюю школьную алгебру. Это значит:

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

Ваши графические программисты должны знать:

Ваши физические программисты должны знать:

  • Все вышеперечисленное и
  • Дифференциальные уравнения
  • Численные методы
bobobobo
источник
3

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

Заратустра
источник
5
в большинстве случаев вы хотите, atan2так как это само по себе заботится об обработке квадранта.
CodesInChaos
0

Я удивлен, что никто не упомянул кватернионы . У меня нет большого опыта работы с различными движками, но, по крайней мере, JME использует его повсюду, и у меня сложилось впечатление, что это довольно важная концепция.

Рауль
источник
2
Я упоминал кватернионы.
Tenpn
Ах, прости, я пропустил это.
Рауль
3
Для 1% программистов игр, которые пишут низкоуровневый анимационный код в движке рендеринга, кватернионы являются полезным инструментом. Для остальных 99% игровых программистов они на самом деле не нужны.
Skizz
-1

Создание игр - это привнесение «реальной» жизни в виртуальную реальность. Лучше знать больше о реальном мире / вселенной, чем меньше :) .. Математика - это всего лишь инструмент. И если вы составляете план, вы должны уделять время и изучению планов.

РЕДАКТИРОВАНИЕ: Я видел какое-то недопонимание :) .. Я думаю, что набор математических достижений, которые вы должны править, зависит от конкретных вещей, которые вы хотите описать. Никто не знает всего. И лучший способ, как это сделать. Не изучать все с самого начала, но выучить небольшую часть, использовать, учиться, использовать и т. Д. Тогда Вы можете сделать это во время разработки, если у вас есть хороший план.

samboush
источник
1
Сколько реальной жизни в тетрисе?
Tenpn
Много :). Тетрис о логическом мышлении под давлением. Как и в других логических играх. Это о практике. Больше практики, больше давления, с которым вы можете справиться, и при этом получать от этого удовольствие. Это похоже на реальную жизнь для меня
:)
3
вам не имеет смысла, когда вы не можете ответить на вопрос справедливо.
Хит Ханникутт
@Heath Hunnicutt, Вы правы.
Самбоуш
3
Я действительно уважаю этот ответ.
Хит Ханникутт
-2

Простой ответ: много!

Подробный ответ:

Арифметическая, элементарная и линейная алгебра, в большинстве случаев Trig, если вы делаете 3D-игру, ОПРЕДЕЛЕННОЕ исчисление и физику (физика требует исчисления)!

Дариус Гоуд
источник
3
Можете немного уточнить список? Вы говорите «Trig, если вы делаете 3D-игру» или «Если вы делаете 3D-игру, ОПРЕДЕЛЕННО Calculus»?
yoozer8