Какие конкретные математические, физические, AI и общие понятия должен знать программист, чтобы разработать игровой движок? [закрыто]


9

Будучи программистом приложений, ориентированных на веб и БД, я обладаю знаниями в таких структурах данных, как списки, деревья, графики и т. Д. Я честно использую очень мало этих алгоритмов структуры данных в своем коде, за исключением сортировки вещей в простых массивах, так как я почти полностью работал с клиент-ориентированными средами, в которых были встроены все основные функции. Я знаю C, PHP, Java, HTML, PL / SQL и MySQL. В настоящее время я изучаю Python.

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

Моя цель состоит в том, чтобы

  • Улучшить свои навыки программирования на уровне ядра, включая использование алгоритмов структуры данных, математических и физических понятий.
  • Реализуйте хороший игровой движок, чтобы побаловать себя кодированием на уровне ядра.
  • Проложить свой путь в область исследований ИИ.

Какие конкретные математические, физические, AI и общие понятия должен знать программист, чтобы разработать игровой движок?

Ответы:


11

Структуры данных: это, безусловно, правильный вопрос. Однако, хотя некоторые структуры данных полезны для любой игры (например, те, что вы уже упоминали, списки, деревья ...), есть и другие, которые очень специфичны. Например, Octrees могут быть очень полезны в 3D-программировании, но в чистой 2D-среде они вам, вероятно, не понадобятся.

Алгоритмы : применяется то же правило. Например, в чистой двумерной среде обнаружение столкновений работает совсем иначе, чем в трехмерном.

Важные Математические области: самая важная область для двигателя Dev быть знакомы с является линейной алгеброй и более продвинутые темы Алгебры (кватернионы). Очень просто, если вам удобна линейная алгебра (и я имею в виду не только простое умножение матриц), у вас хорошее начало.

Next ist Geometry, которая в любом случае хорошо связывается с линейной алгеброй в Engine Dev, и, вероятно, в любом случае не нуждается в упоминании.

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

Другие интересные темы должны быть: Комбинаторика, Статистика

Физика: Это не обязательно, если вы собираетесь делать простые игры. Не больно, но с физикой в ​​старших классах ты справишься.

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

AI: Честно говоря, если AI - ваш основной интерес, я бы не стал писать весь Engine. ИИ гораздо интереснее делать, когда у вас есть существующая архитектура для игры. Написание движка будет трудной задачей, и будет довольно долго, пока вы не сможете реализовать забавные алгоритмы ИИ.

Какой тип игры вы хотите развивать? Возможно, я смогу подробнее остановиться на этих пунктах с этой информацией.


Спасибо за ваш подробный ответ. Как ответ на ваш вопрос ... ну, на данный момент у меня нет идей в моем мозгу, но я хочу разработать движок для 3D-игр. Но подумайте лучше начать с какой-нибудь 2d игры и познакомиться с окружающей средой. Перед всем этим я должен поиграть в некоторые игры, чтобы знать, как они выглядят и как (как я никогда не играл в видеоигры :-)). Так что мне легко понять терминологию книг и другие вещи. Я нашел следующее очень полезным,
droidsites

извините, пропустил ссылку в моем предыдущем комментарии: gamedev.stackexchange.com/questions/8502/…
droidsites

В прошлом я бы рекомендовал сначала начать с 2D-игр, если вы хотите разрабатывать 3D-игры. Тем не менее, с появлением таких архитектур, как XNA, я считаю, что более увлекательно погружаться прямо в 3D. Вы уже взглянули на C # / XNA? Не должно быть проблем, учитывая ваш опыт программирования
Майкл Кисснер

Нет, я не проверял это. Да ... это не проблема, чтобы перейти на C #. Но я очень заинтересован в Python:
droidsites

Если вы интересуетесь Python и больше заинтересованы в создании игры, чем в создании технологии для создания игры, вы можете проверить Panda3D или Blender Game Engine.
Шон Мидлдич

1

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

С точки зрения математики, вы должны иметь очень сильное понимание линейной алгебры (векторы, матрицы, решение линейных систем и т. Д.), Очень сильное понимание тригонометрии и, по крайней мере, базовое понимание исчисления (простые производные и интегрирование) , Любой вводный курс по линейной алгебре на уровне колледжа должен направить вас на правильный путь, если не научит вас всему, что вам нужно знать, чтобы начать работать с общими принципами трехмерной графики. Я также связываю книгу ниже, которая может оказаться весьма полезной.

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

Реакция на столкновение может варьироваться от «простого» до нелепого уровня запутанности, и даже простые вещи поначалу могут быть не интуитивными. Я очень, очень рекомендую оставить этот материал в существующей библиотеке, такой как Bullet, Havok, PhysX и т. Д. (Или Box2D, если вы работаете над 2D-геймплеем), до тех пор, пока вы не освоитесь с существующей математикой и алгоритмом. знания и решить, что вы хотите узнать, как работают физические двигатели. Тогда я бы порекомендовал вам создать очень простой 2D физический движок в качестве первой попытки. Трехмерные физические движки - безумно сложные звери, и (возможно), безусловно, самая сложная и трудная часть программирования игр, поэтому физические движки являются наиболее распространенной лицензированной сторонней технологией, используемой в играх. Вы просто не видите очень много игр, которые не Я не использую Havok или PhysX в профессиональном мире, несмотря на то, что во многих играх есть собственные графические движки и код ядра. Даже компании, которые занимаются только созданием игровых движков, обычно лицензируют физический движок, например, Unreal просто использует PhysX, а не включает собственный физический движок.

Я бы порекомендовал следующие книги, чтобы вы начали. Первая - книга вводного уровня по основам математики, которую вы должны знать как программист 3D-игр:

http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869

Вторая - книга, в которой детектируются алгоритмы обнаружения столкновений (а не реакции на столкновения!), Которые помогут как с графическим, так и физическим кодированием:

http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Technology/dp/1558607323

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.