====== Движок ====== **Движок**, **двигатель** (англ. //engine//) - промежуточное программное обеспечение, реализующее базовый компонент приложения. Ключевая особенность движка - абстракция, независимость от приложения: в движок выносится наиболее общая и универсальная функциональность с целью повторного использования (//code reuse//) в других проектах. Вынос функциональности в движок является частным случаем [[модуль|модульности]]. ===== Разновидности движков ===== * Игровой - реализует игровую логику, связывает воедино графический, физический, звуковой и др. движки * Графический - реализует интерфейс вывода графики в реальном времени. Обычно является абстракцией поверх системных графических API, таких как [[DirectX]] и [[OpenGL]]. Разделяют 2D-движки, [[2.5D]]-движки и 3D-движки. * [[Физический движок|Физический]] - отвечает за динамику поведения игровых объектов (динамику твердых и мягких тел, жидкостей, транспортных средств и т.д.), а также, иногда, кинематику (например, движение вдоль сплайна, инверсная кинематика, контроллер персонажа и т.д.) * Движок столкновений - реализует алгоритмы обнаружения пересечений геометрических тел, а также [[рейкастинг|пересечения тел с лучом]], отрезком, плоскостью и т.д. Зачастую является частью физического движка, но иногда выносится в отдельный модуль * Звуковой - реализует интерфейс ввода/вывода звука. Обычно является абстракцией поверх системных звуковых API и не имеет собственного микшера, хотя бывают исключения - например, OpenAL * Сетевой - реализует обмен данными по сети (например, клиент-серверную модель) на основе низкоуровневых сетевых интерфейсов. Является основой многопользовательского режима в играх * [[Скриптовый язык программирования|Скриптовый]] - реализует возможность расширения приложения путем написания программ-сценариев (скриптов) * Движок рендеринга - в программах 3D-моделирования - модуль построения графического изображения на основе данных о трехмерной сцене. В отличие от графического движка, работает не в реальном времени (оффлайн-рендеринг), хотя может использовать GPU для ускорения. В основе обычно лежит [[рейтрейсинг|трассировка лучей]] или гибридный пайплайн (растеризация + трассировка). ===== Архитектура ===== Движок может представлять собой библиотеку исходного кода, статическую или динамическую библиотеку. Последний вариант наиболее универсален, поскольку позволяет использовать движок с различными языками программирования. Архитектурно движок часто делится на фронтенд и бэкенд. Фронтенд в данном случае - пользовательский программный интерфейс (структуры данных и функции, либо, в ООП-языках, классы). Бэкенд - реализация интерфейса, с которой пользователь напрямую не взаимодействует. Она обычно делается заменяемой. Например, графический движок может иметь переключаемые бэкенды на основе Direct3D и OpenGL, тогда как фронтенд является абстрактным и независимым от конкретной низлежащей технологии.