#Геймдев #ИгровойДвижок #NewEngine #КайлаИГеймДев #Игры #Kayla #GameEngine #Modular #Snapshot #Gizmo 🛠 KAYLA SYSTEMS: Ранняя версия Object Gizmo — Как мы учим движок «трогать» объекты
Привет, это Кайла. Когда мы начинали NewEngine, у нас был треугольник. Потом — куб. Потом — сцена. Но всё это было статично. Как музейный экспонат.
Сегодня мы сделали шаг к интерактивности: Object Gizmo — инструмент, который позволяет перемещать, вращать и масштабировать объекты прямо в 3D-пространстве. Это не просто «ещё одна фича». Это фундамент для редактора, без которого невозможен никакой AAA-воркфлоу.
🧩 Что такое Object Gizmo Если вы работали в Unity, Unreal или Blender, вы знаете эти трёхцветные стрелки, круги и квадраты, которые появляются вокруг выделенного объекта. Их задача — дать дизайнеру или художнику интуитивный контроль над трансформациями:
- Перемещение (стрелки X/Y/Z)
- Вращение (окружности вокруг осей)
- Масштабирование (квадраты на концах осей)
В NewEngine мы реализовали раннюю версию такого gizmo. Пока — без изящного дизайна, но с правильной архитектурой. ++ ⚙️ Как это работает под капотом++ 1. Gizmo — отдельный модуль-плагин Как и всё в NewEngine, gizmo живёт в своём крейте — newengine_gizmo. Он загружается как DLL, регистрирует свои команды в консоли и подписывается на события ввода и рендера.
2. Рендеринг через Vulkan Gizmo рисуется прямо нашим рендерером, но в отдельном проходе поверх сцены. Для линий мы используем тот же пайплайн, что и для отладки, но с собственными шейдерами (цвета осей, прозрачность).
Ключевой момент: все вычисления позиций осей идут через реестр математики. Координаты стрелок, углы поворота, масштаб — всё это запрашивается у newengine-math по идентификаторам операций. Благодаря этому мы можем, например, подменить стандартные формулы на специфические для криволинейных пространств, просто зарегистрировав другой плагин.
3. Интеграция с ECS и сценой Gizmo работает не с абстрактными «объектами», а с Entity. Когда дизайнер выделяет сущность в редакторе, gizmo получает её компонент Transform и начинает отслеживать ввод мыши.
Движение мыши преобразуется в смещение в экранных координатах, затем через реестр математики — в мировое смещение вдоль выбранной оси.
4. Горячая перезагрузка Прямо сейчас можно править код gizmo, перекомпилировать gizmo.dll — и новая версия подхватывается без перезапуска движка. Это значит: экспериментировать с дизайном контролов можно в реальном времени. ++ 🧠 Почему мы сделали это именно так++ Мы могли бы нарисовать три линии в коде и назвать это «gizmo». Но мы хотим, чтобы NewEngine был расширяемым инструментом, а не монолитом.
Плюсы нашего подхода:
- Любой разработчик может написать свой gizmo. Хотите ось-спираль для вращения? Просто создайте свой плагин.
- Математика не зашита в коде. Все преобразования — через реестр. Можно менять математику под конкретные задачи.
- Gizmo не знает о сцене ничего лишнего. Только компоненты Transform — остальное через ECS-запросы. ++ 🔮 Что дальше++ Ранняя версия уже умеет:
- Отображать оси перемещения (красный X, зелёный Y, синий Z)
- Перемещать объект мышью вдоль выбранной оси
- Переключаться между локальной и глобальной системой координат
В планах:
- Вращение и масштабирование
- Поддержка нескольких выделенных объектов
- Привязка к сетке (snapping)
- Кастомизация внешнего вида через шейдеры
- И, конечно, полноценная интеграция с редактором, который мы будем строить поверх NewEngine. ++ 💬 Вместо послесловия++ Object Gizmo — это не просто «стрелочки на экране». Это первый настоящий инструмент взаимодействия в NewEngine. То, что отличает движок от рендерера.
Когда дизайнер сможет взять мышью куб и передвинуть его интуитивно — это будет момент, когда NewEngine перестанет быть «ещё одним графическим проектом» и станет реальным инструментом для создания игр.
Мы близки к этому моменту.
KAYLA SYSTEMS 🎮 Строим будущее, не спрашивая разрешения