Как написать игровой движок?

Хочу попробовать написать простой шутер 3d от 1-го лица с помощью библиотеки sfml (вдохновился одним видео с ютуба) => нужно написать подобие игрового движка. С чего, собственно, начать? Что можно полезного почитать на эту тему? Знания по линейной алгебре имеются. Я так понимаю, что дальше работы с векторами, матрицами, вычислениями углов в декартовой/сферической системе координат знать не обязательно?
  • Вопрос задан
  • 5777 просмотров
Пригласить эксперта
Ответы на вопрос 5
@Le0Wolf
C# Developper
Вам точно нужен именно движок? Сейчас, как минимум, есть Unity, Unreal Engine - на последнем, в том числе и AAA игры делают. Если вы хотите именно создать игру, то лучше начните изучать один из существующих движков. Больше того, у них есть и магазины скриптов и ресурсов, где вы можете либо за бесплатно (редко), либо за денежку взять готовые механики, модели, текстуры, звуки и т.д.
Движок свой вам нужно разрабатывать только в 2-х случаях:
1) у вас какая то совершенно уникальная концепция игры, которая не ложится на современные движки (что вряд ли)
2) Вы хотите понять, как это устроено, как ведётся разработка игровых движков, встать миллион раз на грабли и понять, как их обходить. В этом случае, вы просто должны принять как факт, что с 99.99999% вероятности вы до создания игры на нем никогда не дойдете.
Просто примите как данность, что игровой 3d движок, тем более для шутера (небось ещё и онлайн хочется?) - это ОЧЕНЬ сложно и это задача не для одного человека. Точнее можно конечно и одному... Но пока вы будете его писать, используемые вами технологии уже устареют).

Но если все же решитесь, то сразу говорю, SFML - это точно не основа для 3D движка. Да, там есть работа с мышью, клавиатурой и пр. Но реализовано это явно не для поддержки разработки 3D игр типа шутеров. Изучайте WinAPI (создание окна, обработка оконных событий), OpenGL (3D графика), всякие там XInput и RawInput - ввод. И вообще, по максимуму используйте готовые библиотеки (к примеру, есть Assimp, FMOD) - это сильно ускорит разработку.
Если хочется прям совсем хардкора,то изучайте DirectX 12, Vulkan и тому подобные низкоуровневые абстракции железа
Ответ написан
@lea
Jason Gregory "Game Engine Architecture" (три издания, третье точно есть на русском)
Gabor Szauer "Hands-On C++ Game Animation Programming"
David Wolff "OpenGL 4 Shading Language Cookbook" (есть издание на русском - "Open GL 4. Язык шейдеров")

+можно поковыряться в опенсорсных движках, например, quake 3
Ответ написан
Комментировать
@yatanai
Поклонник православного С
Если абстрагироваться от всех этих понятий, то движок это некий код который позволяет кастомизировать поведение программы.
Если мы говорим об играх, то движок не всегда и нужен. По сути основная база игры это сама игра, которую можно реализовать банальным хардкодом. Тебе придётся изучить базовые понятия по игровой симуляции чтобы сделать это, и некоторые которые дополнительные фичи которые зависят от жанра. (Типо как считать движение пули)
А писать именно движок это муторное и сложное дело, неподходящее занятие для начинающих. Смотри то как раньше делали игры, на сегу никто движки не писал, они появились гораздо позже.
Ответ написан
Комментировать
@LifeKILLED
В создании собстванного 3д-движка нет ничего необычного. Этим реально занимаются люди, получают хорошие деньги. Особенно актуально для мобилок, где графика требуется не такая сложная и соответственно кода будет не много. Хотя если надо поставить мобилки на поток, лучше выбрать Юнити. Но тем не менее работа графического программиста это крутой навык, который мало кому доступен.

Под движком имеется в виду конечно не огромная экосистема, как в Юнити, а низкоуровневая основа вывода 3д-графики (перекладываем каждый кадр байтики из оперативки в GPU, включаем-выключаем шейдеры). То, что необходимо конкретно для внутренней разработки игры.

Если хочется совсем-совсем с нуля, советую скопипастить какой-нибудь пример с сайта https://learnopengl.com/ и таким образом получить готовую графическую часть в движке. Там есть даже примеры с современными технологиями типа PBR, т.е. теоретически можно даже не хуже, чем в Анриле, картинку получить.

Также можно глянуть готовое решение https://diligentgraphics.com/diligent-engine/ , это основа графического движка, в которую уже заложено портирование на кучу платформ и API. Если нужен результат, я бы кодил что-то на его основе. Это именно фреймворк/библиотека, которая берется за основу.

Знания векторов и матриц в принципе хватает, но из этих простых вещей делаются очень сложные алгоритмы, особенно в шейдерах. Всë это надо знать. Еще лучше конечно не ограничиваться OpenGL (в sfml именно он), а подучить другие API, тогда можно и работу хорошую найти.

Желаю удачи в становлении графическим программистом! Главное долго не мусолить всë это. На основе уроков learnopengl можно за пару недель написать свой рендер с тенями, pbr и прочими эффектами, я так на геймджеме сделал когда-то :) Хотя это всë зарефакторить бы, код там очень страшный, но работало
Ответ написан
Комментировать
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Точно так же, как и любое другое приложение:
  1. Написать базовое ТЗ
  2. Подготовить список требований и ограничений
  3. Проработать детально ТЗ (ЧТЗ) с подробным описанием всех деталей
  4. Разработать верхний уровень архитектуры решения - основные модули, системы и их взаимодействие
  5. Разработать следующий уровень архитектуры вниз и вглубь - повторить до получения самых простых элементов
  6. Подготовить пошаговый план разработки проекта
  7. Реализовать проект согласно плану
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы