Xtreme3D 3.x

Xtreme3D 3.x - это новая версия Xtreme3D, написанная с нуля администратором сайта Gecko при содействии участников нашего форума. Как известно, оригинальный Xtreme3D от Xception распространялся без исходников, и после того, как Xception забросил работу над своим проектом, движок долгое время не развивался. В нашем сообществе постоянно витала идея воссоздать его заново, исправить баги и добавить недостающую функциональность - учитывая, что движок является враппером GLScene, эта задача казалась несложной и чисто технической. Однако возникли непредвиденные проблемы, и дело затянулось. В итоге, проект, начавшийся в 2009 году, был завершен лишь в 2016-м. С тех пор движок регулярно обновляется.

Сейчас Xtreme3D 3.х - наиболее мощная и функциональная версия движка, намного превосходящая по возможностям Ultimate3D и практически не уступающая GMOgre (полный список возможностей см. ниже). А главное - это единственный активно разрабатывающийся 3D-движок для Game Maker. На основе Xtreme3D 3.x можно создавать игры с графикой уровня 2005-2010 гг. - теоретически, можно сделать что-то наподобие Doom 3, Half-Life 2, TES4: Oblivion и т.д. Дальнейшее развитие графических возможностей Xtreme3D затруднено, поскольку библиотека GLScene, на которой он основан, использует достаточно старые технологии и ограничена функциональностью OpenGL 1.x-2.0. Впрочем, многие возможности современных видеокарт доступны в старых версиях OpenGL через механизм расширений, поэтому мы заранее ни от чего не отказываемся - будем экспериментировать.

Сейчас приоритетной задачей является реализация в Xtreme3D недостающей "стандартной" функциональности, присутствующей в других аналогичных движках, а также создание привязок Xtreme3D к различным языкам и средам. Если у вас есть какие-то замечания или багрепорты, либо идеи и пожелания для будущих версий Xtreme3D, милости просим в соответствующий раздел форума.

Авторы Xtreme3D 3.x: Gecko (основная часть библиотеки), Rutraple aka Hacker (функции DCE), Ghost (функции Grid), gadmaker (функция WindowSetIcon). Отдельное спасибо gadmaker, van88268, FireRun, JunkerKun, Александру Демченко за багрепорты и конструктивные предложения.

Репозиторий с исходниками на GitHub

Релизы Xtreme3D 3.x выпускаются в виде SDK для Game Maker 8 - это комплект, включающий скомпилированный движок и все необходимые DLL-библиотеки, документацию, примеры, а также ресурсный файл (*.gmres) со скриптами и константами. Если вы хотите обновить существующий проект до новой версии Xtreme3D, просто импортируйте ресурсный файл (File -> Import Resources), переключившись на замену ресурсов при совпадении имен (Always Replace). Во избежание утери данных, рекомендуем предварительно сделать резервную копию проекта. Обновления не требуют изменений кода, но если вы все-таки столкнулись с проблемами обратной совместимости, обязательно напишите об этом на форуме.

Также доступны SDK для Python и языка D, включающие скрипт-генератор и демонстрационное приложение, основанное на SDL2.

Стабильная версия - Xtreme3D 3.7 SDK

Скачать Xtreme3D 3.7 SDK на GitHub

Xtreme3D 3.х включает огромное количество нововведений. Вот самые важные из них:

  • Поддержка шейдеров на языке GLSL (1.1 или 1.2). Можно передавать параметры в шейдеры (поддерживается передача параметров в uniform'ы типа int/bool, float, vec2, vec3, vec4, mat4, sampler2D, sampler2DCube, sampler2DShadow)
  • Динамические тени ShadowMap (требуют поддержки FBO) на замену старым Shadowplane и Shadowvolume
  • Экранный антиалиасинг 2x и 4x. Имеется поддержка технологии сглаживания NVIDIA Quincunx
  • Быстрый внеэкранный рендеринг с использованием FBO и p-буферов. Можно реализовать любые эффекты постобработки, включая SSAO, DOF и др.
  • Рендеринг индивидуальных объектов и иерархий
  • Поддержка прокси-объектов - объектов, которые рендерят графику других объектов с собственной трансформацией. Для Актеров есть свой вид прокси, позволяющий рендерить копии Актеров со своими анимациями. Есть также мультипрокси - особый подвид прокси, который который может рисовать разные объекты в зависимости от удаленности от камеры
  • Чтение множества новых форматов моделей, в том числе FBX (Filmbox), LOD (LODka 3D), B3D (Blitz3D), DXS (DeleD), X (DirectX), MDC (Return To Castle Wolfenstein), ASE (3ds Max), OCT (FSRad), NMF (AMD NormalMapper), WRL (VRML 1.0), PLY (Stanford Triangle Format), GTS (GNU Triangulated Surface), TIN (Triangular Irregular Network), STL (Stereolithography), GLSM (GLScene Mesh)
  • Улучшенный API для Freeform, поддержка ручной сборки мешей из вершин и полигонов, а также модификации этих данных в памяти и сохранения Freeform в файл (сохранение поддерживается, в числе прочих, в популярный формат OBJ)
  • Улучшенный эффект взрыва для мешей - в частности, теперь есть возможность вернуть меш в исходное состояние, что раньше было невозможно
  • Поддержка тегов для моделей MD3
  • Смешивание скелетных анимаций
  • Загрузка материалов из скриптов
  • Сильно улучшенный шейдер рельефа (BumpShader): добавлена поддержка бликов, parallax mapping'а и теней
  • Шейдер смешивания текстур (TexCombineShader)
  • Шейдер, реализующий базовое освещение по Фонгу (PhongShader)
  • Процедурные текстуры на основе шума Перлина
  • Переработанное мультитекстурирование для материалов - каждый материал теперь может иметь до 8 текстур, и GLSL-шейдеры могут автоматически их принимать в качестве параметров
  • Поддержка линейных волн для динамической воды
  • Новые типы геометрических примитивов: усеченная пирамида, додекаэдр, икосаэдр, чайник
  • Рендеринг 2D-фигур - прямоугольников, окружностей и произвольных полигонов
  • Улучшенный API для спрайтов, поддержка текстурных атласов для эффективной анимации спрайтов и создания GUI
  • Поддержка TTF-шрифтов через библиотеку Freetype и вывода любых символов Юникода с использованием кодировки UTF-8. Можно также задать собственную 8-битную кодировку
  • Рендеринг сеток
  • Поддержка произвольных плоскостей отсечения
  • Отладочный рендеринг объектов-манекенов
  • Множество новых функций для камеры
  • Траектории движения для объектов по кривым, наподобие путей (path) в Game Maker
  • Возможность копировать матрицы трансформации (локальные и абсолютные) от одного объекта другому. Также можно копировать объектам матрицы костей из модели со скелетной анимацией и задавать локальную матрицу объекта вручную, что позволяет реализовать любую математическую модель движения и вращения объектов, не привязываясь к углам Эйлера (pitch/turn/roll)
  • Возможность прикладывать импульсы (мгновенные изменения скорости) к динамическим объектам в среде DCE. Также DCE теперь умеет работать с ландшафтом
  • Улучшенная физика ODE. В отличие от старой реализации в Xtreme3D 2.0, теперь в ODE в полной мере поддерживаются Freeform-объекты (как для статических, так и для динамических тел), а также ландшафт. Кроме того, появилась поддержка Ragdoll и возможность задавать позиции геометриям при их создании, что позволяет создавать составные тела - такие, например, как стол с ножками
  • Функции для создания скриншотов и сохранения текстур из памяти в файлы BMP
  • Функции для создания окон и управления ими, а также для обработки клавиатурного ввода
  • Функции для создания значений цвета из RGB-компонентов, целочисленных и с плавающей запятой
  • Система LightFX для использования более 8 источников света на сцене
  • Функции редактирования карты высот для ландшафта
  • ИНтеграция физического движка Kraft
  • Xtreme3D 3.х не является на 100% обратно совместимым с версией 2.0.2.0 - есть несколько важных изменений, но в целом имена функций и их смысл не поменялся. Реализована вся старая функциональность из Xtreme3D 2.0, за исключением:

  • опрашивания позиции и нормали столкновения в DCE;
  • опрашивания количества отрендеренных треугольников;
  • portal culling'а. Как он работал (и работал ли вообще) в прежней версии движка, непонятно, поэтому эта функциональность не была реализована. Не исключено, что она появится в будущем.
  • Полный список особенностей и возможностей Xtreme3D 3.x:

  • Легковесность. Xtreme3D - это всего одна DLL-библиотека размером около 1.6 Мб (плюс две необязательные - физический и шрифтовой движки)
  • Хорошо спроектированная архитектура, простой и интуитивный API
  • Движок создан для Game Maker 8, но можно использовать его с любым языком или средой, где есть поддержка DLL и вызовов stdcall
  • Высокая производительность, даже в Game Maker
  • Низкие системные требования, движок отлично работает практически на любых конфигурациях - Xtreme3D основывается на OpenGL 1.x и нескольких расширениях для работы отдельных функций
  • Граф сцены с иерархией объектов. Рендеринг всего графа целиком, либо отдельных объектов и подграфов
  • Экранный антиалиасинг MSAA 2x и 4x. Имеется поддержка технологии сглаживания NVIDIA Quincunx. Можно также реализовать FXAA и другие методы сглаживания
  • Динамическое освещение, неограниченное количество виртуализированных источников света
  • Поддержка множества форматов 3D-моделей: 3DS, OBJ, FBX, LWO, ASE, BSP, MS3D, B3D, MD2, MD3, MD5, MDC, SMD, X, LOD, CSM, DXS, OCT, NMF, WRL, PLY, GTS, TIN, STL, GLSM. Есть возможность написать собственный загрузчик 3D-моделей произвольного формата
  • Поддержка стандартных форматов изображений: BMP, JPG, PNG, TGA, DDS
  • Скелетная и вершинная анимация
  • Смешивание скелетных анимаций, прикрепление объектов к костям
  • Эффект взрыва для мешей
  • Рендеринг геометрических примтивов: параллелепипед, сфера, цилиндр, конус, полый цилиндр, тор, диск, усеченная пирамида, додекаэдр, икосаэдр, чайник Юта
  • Рендеринг 2D-текста. Можно загружать TTF-шрифты и выводить кириллицу (и вообще любые символы Юникода) кодировкой UTF-8. Для вывода кириллицы из языков, которые не поддерживают UTF-8, есть также поддержка Windows-1251 и пользовательских 8-битных кодировок
  • Рендеринг 2D-спрайтов и двумерных фигур - прямоугольников, окружностей и произвольных полигонов
  • Рендеринг биллбордов, плоского и объемного трехмерного текста, координатных сеток
  • Мощная система организации материалов, основанная на библиотеках
  • Загрузка материалов из скриптов
  • Мультитекстурирование (в том числе многопроходное). Поддерживается до 8 текстур на проход
  • Lightmapping
  • Environment mapping
  • Различные режимы прозрачности и смешивания
  • Процедурные текстуры на основе шума Перлина
  • Аппаратное сжатие текстур
  • Шейдеры на языке GLSL
  • Несколько встроенных готовых шейдеров - bump mapping, cel shading, отрисовка контуров, освещение по Фонгу и др.
  • Три вида динамических теней - shadow plane, shadow volume и shadow map (с поддержкой PCF). Можно реализовать каскадные тени (CSM)
  • Статический и динамический cube mapping
  • Внеэкранный рендеринг при помощи трех методов: p-буферы, FBO и копирование из буфера кадра
  • Можно реализовать любые эффекты постобработки, включая Glow, Motion Blur, SSAO, DOF и др.
  • Рендеринг зеркальных отражений
  • Динамическая вода с волнами
  • Рендеринг ландшафта с автоматическим LOD, модификация ландшафта в реальном времени
  • Процедурные деревья
  • Динамическое небо с солнцем и звездами
  • Эффект Lensflare
  • Поддержка skybox'ов
  • Встроенные системы частиц, имитирующие огонь и электрический разряд
  • Встроенный эффект размытия (blur)
  • Прокси-объекты, дискретный LOD
  • Поддержка произвольных плоскостей отсечения
  • Возможность создания скриншотов прямо из движка с сохранением изображений в файлы BMP
  • Управление движением объектов при помощи кривых, а также рендеринг кривых. Поддерживаются кубические сплайны, кривые Безье и NURBS
  • Возможность копировать матрицы трансформации (локальные и абсолютные) от одного объекта другому, а также задавать матрицы вручную
  • Несколько видов проверки столкновений. Есть функции для проверки на столкновение отдельных объектов (сфер, паралеллепипедов и мешей), функции raycasting'а, а также встроенный кинематический движок DCE (Dynamic Collision Engine)
  • Поддержка физического движка ODE
  • Интегрированный физический движок Kraft
  • Ragdoll ("тряпичные куклы") - физическая модель для персонажей
  • Встроенная реализация octree и quadtree для эффективной оптимизации сцен из многих тысяч объектов
  • Возможность загрузки ресурсов из сжатого PAK-архива
  • Считывание ввода с клавиатуры и мыши
  • Создание дополнительных окон и управление ими, рендеринг в созданные окна
  • Функции чтения текстовых файлов и преобразования кодировки из ANSI в UTF-8
  • Хэш-таблица для доступа к любым объектам по именам
  • Подробная документация на русском языке + набор уроков для начинающих
  • Отзывы