Game Engine
Проектируем, пишем, думаем рассуждаем, читаем и многое другое
Внимание: статьи содержат много костылей!
Всем доброго времени суток. Не так давно, решил заняться разработкой 3D игрового движка, так как структурированной информации по этому поводу не много, решил создать серию статей, в которой постараюсь показать, больше техническую часть, нежели теоретическую.
Сейчас отойду от темы и хочу кое-что сразу оговорить… Я не являюсь хорошим программным архитектором и Senior developer(ом). Мне 21 и я маленький амбициозный C++ middle developer, могу ошибаться, и писать глупости.
Only a Sith deals in absolutes. Obi-Wan “Ben” Kenobi
Рад видеть замечания и предложения в комментариях.
Пожалуй на этом, я закончу вступительную часть и перейдем к делу.
Часть 1: Вступление
Во-первых, надо разобраться в чем суть движка и зачем его писать.
Хм… И что же это ?!
Ссылка на Wiki
— Такс… Значит, просто написать пару классов мало ?!
Хорошие движки (UE, Unity, Cocos2D) состоят из пары сотен классов, нескольких подсистем и кучи менеджеров. Если конкретней:
- Графическая система
- Звуковая система
- Система для работы с сетью
- Менеджер процессов
- Менеджер задач
- Менеджер объектов
- Менеджер сцен
и многое другое…
— И что же нам делать? Как, что и куда?
Самое первое и самое главное — разделить большую задачу на более мелкие и идти шаг за шагом. Маленькими, неуверенными, черепашьими шажочками.
Последовательность статей:
- Часть 1:
ЧеЧто это и зачем? (Вступление) . - Часть 2: Каркас (Начинаем писать код + архитектура).
- Часть 3: Логирование или запиши мне вот это, а это не надо.
- Часть 4: Работа с файлами, загрузчики и game assets.
- Часть 5: Внимание, будет много математики! (Графическая подсистема):
- От окна до камеры за 1 урок
- Модели, текстуры,
материалырановато еще. - А дальше свет, тени, слёзы и много-много математики, да ну ее в ***
Это только первые наброски, материала будет намного больше!
- Модульность. Слабая связность.
- Мультиплатформенность.
- Простота добавления нового функционала, без изменения существующего кода.
- Использование разных графических библиотек: DirectX, OpenGL, Vulkan.
- Графические примочки: тесселяция, PBR, SSLR и много других
непонятныхнавороченных плюх. - Оптимизация рендеринга: отсечение невидимых граней, BSP деревья и прочая нечисть.
- Редактор уровней.
Для вводной статьи, думаю, хватит. В следующей статье мы напишем каркас для движка и задумаемся над взаимодействием систем и менеджеров, а так же что туда должно входить. Жду ваших советов, материала и предложений
Так же вот списочек материала, для тех кому интересно:
- Описание структуры игрового движка Banshee
- Многопоточная архитектура движка (не для новичков)
- Менеджер состояний (не самая лучшая статья)
Автор: Барак Адама