Часто мы слышим "движок", "движок", у одной игры лучше, у другой хуже. А задумывался ли кто-нибудь, что это такое? Как выглядит этот движок, как он работает и вообще, что из себя представляет?
Все чаще движком назвают абстрактную подпрограмму, отвечающую за графику в игре. Это не совсем верно. Безусловно, движок имеет к этому отношение, но далеко не все в графике зависит от движка. Ведь можно и на довольно посредственном движке создать красиво прорисованный пейзаж, а можно на весьма мощном движке создать отвратные, углованые и некрасивые виды.
Так что же такое движок? Это некая программа, как правило в виде динамической библиотеки (dll), являющая собой некого посредника между базовыми средствами 3D-графики (DirectX, OpenGL) и той программой, которая, собственно, и является, например, игрой. В движке содержатся коды управления вышеупомянутыми бызовыми средствами, оформленные в виде программного интерфейса (набора процедур). Каждая процедура объединяет под собой набор определенных операций, отвечающих за конкрентное действие. То есть, вот надо, например, перевести систему в графический режим, сменить разрешение экрана и настроить систему на рисование в пространстве. В движке это, как правило, одна-две процедуры. А под ними скрывается достаточно большой код, проводящий инициализацию графических драйверов видеокарты, меняющий разрешение и т.д.
В любом более-менее серьезном движке содержатся следующие подсистемы:
-менеджер системы; отвечает за переводы режимов экрана, взаимодействие с операционной системой и базовыми средствами, передает и интерпретирует команды от программы к базе.
-менеджер моделей; отвечает за загрузку, прорисовку, движения и выгрузку объемных моделей. Может поддерживать сразу несколько форматов моделей, может даже включать в себя элементы физики.
-менеджер окружения; небо, ландшафты, ветер, погода, освещение и т.д. - все по его части.
-менеджер интерфейса; название больше формальное, отвечает за всю плоскую графику, меню, кнопки, фоновые заставки. Однако часто туда же включены система частиц и спрайты (плоские картинки в пространстве, всегда повернутые в камеру).
-менеджер текстур; отвечает за загрузку и хранение текстур, картинок, которые накладываются на модели или их части для придания им большей реалистичности.
-менеджер камер; отвечает за все используемые в программе камеры, их движения, переключение вида между ними. То есть, он отвечает за то, какую часть прорисованного трехмерного пространства мы увидим на экране через камеру.
-менеджер контроля; отвечает за снятие данных с манипуляторов (мышь, джойстик, тачпад) и клавиатуры и их обработку.
-менеджер мультимедиа; содержит в себе несколько подпрограмм, отвечающих за объемный звук, фоновую музыку, воспроизведение видео.
-физико-математический модуль; название говорит само за себя, модуль просчета физики и некоторых математических операций.
Именно, от качества написания этих модулей в движке и будет в определенной мере зависеть такое поняти, как "мощность" движка. Многофункциональность и настраиваемость так же влияют на нее.
И как бы ответ на упомянутый вопрос, до какого предела за графику отвечает движок? Все дело в том, что графику по большей части составляют модели и текстуры. Чем лучше они выполнены, тем красивей и реалистичней графика. Однако от движка требуется правильное освещение, поддержка высокополигональных моделей и UMV-карт (карта наложения текстур). Движок, к тому же, занимается оптимизацией графики, ее ускорением без потери качества. То есть, ошибочно считать движком всю графику, в ней еще участвуют и модели и текстуры.
Кто-то спросит, а можно без движка? Можно. В принципе, и такие игры существуют. Движки как бы упрощают основной код программы, позволяют не загромождать его процедурами базовых средств. Ведь, если вы пишете программу и часто используете какой-то кусок кода (а он может быть объемом и 20 и 30 строчек), не проще ли его объединить под какой-то одной процедурой и ее использовать вместо ксей этой конструкции? Ведь так и воспринимать программу легче и отлаживать удобней, не придется по тысячу раз отыскивать этот кусок во всем проекте. К тому же, работая на чужих движках, начинающие осваивают примудрости трехмерной графики, а потом создают свои движки.