- PVSM.RU - https://www.pvsm.ru -

Game Engine своими руками на с++. Часть 1 (Вступление)

image

Game Engine
Проектируем, пишем, думаем рассуждаем, читаем и многое другое
Внимание: статьи содержат много костылей!

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

Сейчас отойду от темы и хочу кое-что сразу оговорить… Я не являюсь хорошим программным архитектором и Senior developer(ом). Мне 21 и я маленький амбициозный C++ middle developer, могу ошибаться, и писать глупости.

Only a Sith deals in absolutes. Obi-Wan “Ben” Kenobi

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

Часть 1: Вступление

Во-первых, надо разобраться в чем суть движка и зачем его писать.
Хм… И что же это ?!

Игровой движок

центральный программный компонент компьютерных и видеоигр или других интерактивных приложений с графикой, обрабатываемой в реальном времени. Он обеспечивает основные технологии, упрощает разработку и часто даёт игре возможность запускаться на нескольких платформах, таких как игровые консоли и настольные операционные системы, например, GNU/Linux, Mac OS X и Microsoft Windows.
Ссылка на Wiki [1]

— Такс… Значит, просто написать пару классов мало ?!

Хорошие движки (UE, Unity, Cocos2D) состоят из пары сотен классов, нескольких подсистем и кучи менеджеров. Если конкретней:

  • Графическая система
  • Звуковая система
  • Система для работы с сетью
  • Менеджер процессов
  • Менеджер задач
  • Менеджер объектов
  • Менеджер сцен

и многое другое…

— И что же нам делать? Как, что и куда?

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

Последовательность статей:

Это только первые наброски, материала будет намного больше!

Что должно получиться

  • Модульность. Слабая связность.
  • Мультиплатформенность.
  • Простота добавления нового функционала, без изменения существующего кода.
  • Использование разных графических библиотек: DirectX, OpenGL, Vulkan.
  • Графические примочки: тесселяция, PBR, SSLR и много других непонятных навороченных плюх.
  • Оптимизация рендеринга: отсечение невидимых граней, BSP деревья и прочая нечисть.
  • Редактор уровней.

Для вводной статьи, думаю, хватит. В следующей статье мы напишем каркас для движка и задумаемся над взаимодействием систем и менеджеров, а так же что туда должно входить. Жду ваших советов, материала и предложений

Так же вот списочек материала, для тех кому интересно:

Автор: Барак Адама

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/c-3/261339

Ссылки в тексте:

[1] Ссылка на Wiki : https://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%BE%D0%B2%D0%BE%D0%B9_%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA

[2] Че Что это и зачем? (Вступление) .: https://habrahabr.ru/sandbox/110294/

[3] Описание структуры игрового движка Banshee: https://www.gamedev.net/articles/programming/engines-and-middleware/banshee-engine-architecture-introduction-r3909/

[4] Многопоточная архитектура движка (не для новичков): https://software.intel.com/ru-ru/articles/designing-the-framework-of-a-parallel-game-engine

[5] Менеджер состояний (не самая лучшая статья): http://gamedevgeek.com/tutorials/managing-game-states-in-c/

[6] Источник: http://habrahabr.ru/sandbox/110294/