Wicked Engine — свой 3D-движок на C++ без компромиссов
Знакома ситуация? Вы хотите создать игру или приложение с крутой 3D-графикой. Вы смотрите в сторону Unity или Unreal, но понимаете, что их монструозность — это перебор для вашей задачи. Вам нужен полный контроль над кодом, легковесность и современные графические фичи "из коробки". А может, вы просто хотите глубже погрузиться в мир C++ и рендеринга, но не готовы писать движок с нуля.
Если хотя бы что-то из этого отзывается, то у меня для вас находка — Wicked Engine. Это не просто очередной репозиторий, а целый набор инструментов для работы с 3D-графикой, который можно использовать как угодно: от простого C++ фреймворка до полноценного 3D-редактора.
Давайте разберемся, почему на него стоит обратить внимание.
Что такое Wicked Engine?
Wicked Engine — это open-source 3D-движок, который ставит во главу угла производительность и современные графические технологии. Он написан на C++ и по умолчанию использует DirectX 12 в Windows и Vulkan в Linux. Но главная его прелесть — в гибкости.
Автор проекта предлагает нам три сценария использования:
- Как C++ фреймворк: Вы можете встроить Wicked Engine в свой проект как статическую библиотеку и использовать его мощные функции рендеринга, работы со сценой, звуком и вводом. Идеально для тех, кто хочет писать свою логику на C++, но не хочет возиться с низкоуровневой графикой.
- Как standalone 3D-редактор: Скачали, запустили — и вот у вас готовый редактор сцен, где можно импортировать модели, настраивать свет, материалы и эффекты. Отлично подходит для дизайнеров или для быстрого прототипирования.
- Как песочница с LUA-скриптами: Движок тесно интегрирован с LUA. Вы можете писать скрипты для управления сценой, анимациями и логикой, что значительно ускоряет разработку и тестирование идей.
По сути, это конструктор, из которого можно собрать именно то, что нужно для вашего проекта, не таща за собой лишний функционал.
Ключевые возможности: что под капотом?
Wicked Engine напичкан современными технологиями, которые обычно ожидаешь увидеть в коммерческих движках.
1. Современный рендер
Движок изначально спроектирован для работы с низкоуровневыми API: DirectX 12 и Vulkan. Это обеспечивает высокую производительность и доступ к последним возможностям железа, таким как трассировка лучей. Физически корректный рендеринг (PBR), глобальное освещение и продвинутые пост-эффекты — всё это здесь есть.

2. Гибкая работа со сценой
В основе лежит популярная архитектура Entity-Component-System (ECS). Это значит, что все объекты на сцене — это просто "сущности" (Entity), к которым вы добавляете нужные "компоненты" (Transform, Material, Light и т.д.). Такой подход делает архитектуру приложения очень гибкой и масштабируемой.
Хотите загрузить модель? Пожалуйста:
// Просто загружаем модель в глобальную сцену
wi::scene::LoadModel("myModel.wiscene");
А можно создать несколько сцен и объединять их:
// Создаем отдельную сцену
wi::scene::Scene scene2;
// Загружаем модель в неё
wi::scene::LoadModel(scene2, "myModel2.wiscene");
// А теперь сливаем её с глобальной сценой
wi::scene::GetScene().Merge(scene2);
3. Скриптинг на LUA
Одна из самых крутых фишек — это возможность управлять движком через LUA. Это идеально для быстрого прототипирования. Не нужно каждый раз пересобирать проект на C++, чтобы подвинуть объект или поменять параметр.
Вот как выглядит тот же код для работы со сценой на LUA:
-- Загружаем модель
entity = LoadModel("myModel.wiscene");
-- Получаем доступ к компоненту трансформации
transform = scene.Component_GetTransform(entity);
-- Двигаем модель вправо
transform.Translate(Vector(2, 0, 0));
Просто, чисто и интерактивно. В редакторе даже есть встроенная консоль (вызывается по кнопке Home), куда можно вбивать LUA-команды на лету.
4. Поддержка популярных форматов
Движок использует собственный бинарный формат .wiscene для быстрой загрузки, но редактор без проблем импортирует популярные форматы ассетов:
- OBJ
- FBX
- GLTF / GLB
- VRM
Это значит, что вы можете создавать модели в Blender, 3ds Max или любом другом редакторе и легко переносить их в движок.
Кому это пригодится?
Я вижу несколько категорий разработчиков, которым Wicked Engine может оказаться крайне полезен:
- Инди-разработчикам на C++. Тем, кто хочет полного контроля и производительности, но не готов тратить годы на написание своего рендера.
- Разработчикам инструментов и симуляторов. Если вам нужно встроить 3D-вьюпорт в научное ПО, тренажер или конфигуратор — Wicked Engine станет отличным C++ бэкендом.
- Студентам и изучающим графику. Репозиторий — это кладезь знаний. Можно посмотреть, как реализованы современные техники рендеринга, как работает ECS и как подружить C++ с LUA. Код открыт — изучай не хочу!
- Любителям демо-сцены. Движок уже использовался для создания нескольких демо-сцен, что говорит о его гибкости и производительности.

Как начать?
Проект очень дружелюбен к новичкам. Для сборки под Windows достаточно открыть WickedEngine.sln в последней Visual Studio и нажать F5. Для Linux есть подробные инструкции по сборке с помощью CMake.
Инициализация в вашем собственном коде выглядит до смешного просто:
// Подключаем движок
#include "WickedEngine.h"
// Создаем приложение
wi::Application application;
// Указываем окно для рендеринга
application.SetWindow(hWnd);
// Запускаем главный цикл
while(true) {
application.Run();
}
И все, базовый каркас готов. Дальше остается только создавать свои игровые компоненты (RenderPath) и наполнять сцену.
Wicked Engine — это прекрасный пример того, каким должен быть современный open-source проект. Он мощный, гибкий, хорошо документирован и активно развивается. Это не попытка "убить" Unreal, а скорее нишевый инструмент для тех, кто ценит контроль, производительность и хочет работать напрямую с C++.
Если вы ищете легковесную альтернативу большим коммерческим движкам или просто хотите прокачать свои скиллы в C++ и компьютерной графике, настоятельно рекомендую заглянуть на GitHub проекта, скачать редактор и поиграться с примерами. Уверен, вы найдете для себя много интересного.
