История Xtreme3D
Xtreme3D
История Xtreme3D
Xtreme3D 0.x-2.x (2003-2006)
История Xtreme3D началась в 2003 году. Движок был написан на Delphi с использованием библиотеки GLScene (де-факто стандартного 3D-движка для Object Pascal) немецким программистом под ником Xception. К сожалению, нам неизвестно его настоящее имя.
Первая стабильная версия Xtreme3D (0.9) была выпущена в 2003 году. Ее возможности были довольно скромными: поддерживались только анимированные модели MD2 и MD3, статичные 3DS, MS3D и OBJ, встроенные примитивы, спрайты, двумерный и трехмерный текст, lensflare, частицы и небесный купол. API движка напоминал стиль GML-функций.
Основной целью проекта было создание движка для трехмерной RPG наподобие Dungeon Master. И, хотя автор движка изначально не планировал дальнейшее развитие Xtreme3D, в более поздних версиях функционал движка быстро перерос потребности конкретного жанра.
Так, в версии 1.7 (2004 г.) появилась динамическая вода. Однако куда более серьезным прорывом стала версия 2.0 (2006 г.): тотальный пересмотр API, поддержка видов, библиотек материалов и карт освещения, динамический cubemapping, поддержка новых форматов моделей, рендеринг в текстуру, загрузка ресурсов из сжатого архива, аппаратные шейдеры (bump mapping, cel shading), мультитекстурирование, octree и quadtree, поддержка DDS, а также, что особенно важно, интегрированный физический движок Open Dynamics Engine (ODE).
Последний релиз от Xception (2.0.2.0), помимо многочисленных багфиксов, содержал два важных нововведения: отрисовщик ландшафта и движок проверки столкновений DCE. Функциональность движка была на уровне коммерческих игр 1997-2003 годов - Xtreme3D 2.0 позволял создавать что-то похожее в плане графики на Quake 2-3, Half-Life, GTA 3, The Elder Scrolls: Morrowind и т.д. - все, что относится к "дошейдерной" эпохе.
К сожалению, Xception, в итоге, забросил свою разработку - движок распространялся без исходников, и поэтому долгое время не развивался, а технологии, между тем, не стояли на месте...
Xtreme3D 3.0 (25.08.16)
С 2009 года в русскоязычном сообществе Xtreme3D постоянно витала идея воссоздать движок с нуля, исправить баги и добавить недостающую функциональность - учитывая, что Xtreme3D является весьма тонкой оберткой над GLScene, эта задача казалась несложной и чисто технической. Однако возникли непредвиденные проблемы, и дело затянулось. В итоге, проект, начавшийся в 2009 году и переживший долгий период стагнации и несколько вспышек активности, был завершен лишь в 2016-м. Так появился Xtreme3D 3.0.
Эта версия Xtreme3D, как и оригинал, написана на Delphi с использованием популярной библиотеки GLScene - фактически, движок можно назвать почти полным враппером GLScene для Game Maker. В основе Xtreme3D 3.0 лежит модифицированная и расширенная GLScene 1.0.0.0714.
Вот краткий список нововведений Xtreme3D 3.0:
- Поддержка шейдеров на языке GLSL (1.1 или 1.2)
- Динамические тени, реализованные методом shadow mapping
- Экранный антиалиасинг 2x и 4x. Имеется поддержка технологии сглаживания NVIDIA Quincunx
- Быстрый внеэкранный рендеринг с использованием p-буферов
- Поддержка прокси-объектов
- Поддержка форматов моделей LOD (LODka 3D) и B3D (Blitz3D)
- Поддержка тегов для моделей MD3
- Смешивание скелетных анимаций
- Загрузка материалов из скриптов
- Встроенный шейдер смешивания текстур (TexCombine)
- Встроенный шейдер, реализующий базовое освещение по Фонгу (Phong)
- Процедурные текстуры на основе шума Перлина
- Поддержка линейных волн для динамической воды
- Новые типы геометрических примитивов (усеченная пирамида, додекаэдр, икосаэдр, чайник)
- Улучшенный эффект взрыва для мешей (в частности, теперь есть возможность вернуть меш в исходное состояние)
- Рендеринг сеток (Grid)
- Отладочный рендеринг объектов-манекенов (Dummycube)
- Множество новых функций для камеры (Camera)
- Возможность копировать матрицы трансформации (локальные и абсолютные) от одного объекта другому. Также можно копировать объектам матрицы костей из модели со скелетной анимацией и задавать локальную матрицу объекта вручную, что позволяет реализовать любую математическую модель движения и вращения объектов, не привязываясь к углам Эйлера
- Возможность прикладывать импульсы (мгновенные изменения скорости) к динамическим объектам в DCE. Также в DCE появилась поддержка ландшафта
- Улучшенная физика ODE. В отличие от старой реализации в Xtreme3D 2.0, теперь в ODE в полной мере поддерживаются Freeform-объекты (как для статических, так и для динамических тел), а также ландшафт. Кроме того, появилась возможность задавать позиции геометриям при их создании, что позволяет создавать составные тела - такие, например, как стол с ножками
- Функции для создания скриншотов и сохранения текстур из памяти в файлы BMP
- Функция чтения текстовых файлов.
Xtreme3D 3.1 (30.09.16)
Осенью 2016 года вышло первое обновление новой ветки Xtreme3D - версия 3.1. Вот список самых важных изменений в ней:
- Улучшенный API для объектов Freeform - появилась возможность ручной сборки Freeform из вершин и полигонов, функции трансформации мешей, а также сохранение Freeform в файл
- Поддержка новых файловых форматов: CSM и LMTS (которых не было в 3.0), X, ASE, DXS
- Поддержка Ragdoll в ODE
- Объект Movement, который позволяет задавать объектам траектории движения
- Улучшенный BumpShader - появилась поддержка теневых карт и автоматического генерирования пространства касательных
- Улучшенный PhongShader - появилась поддержка текстур
- Объект HUDShape - 2D-фигура (поддерживаются прямоугольник, окружность, отрезок и меш)
- Улучшенный API для спрайтов - появилась поддержка текстурных атласов (т.е., использования фрагмента текстуры для отрисовки спрайта), а также отрисовки из заданной точки вместо центра
- Поддержка альфа-канала для PNG
- Функции для опрашивания размеров текстуры.
Xtreme3D 3.2 (21.10.16)
- Поддержка FBO, быстрых внеэкранных буферов, с помощью которых можно реализовать многопроходный рендеринг и различные сложные эффекты постобработки
- Новый, совместимый с шейдерами механизм мультитекстурирования для материалов. Теперь материалы могут иметь до 8 текстур, и GLSL-шейдеры могут автоматически их принимать в качестве параметров
- Функция ViewerRenderObject для рендеринга отдельных объектов и иерархий
- Функция MaterialLoadTexture
- Исправлен баг в функции ObjectSetParent.
Xtreme3D 3.3 (26.11.16)
- Новые функции для Freeform, позволяющие читать и модифицировать геометрию модели (координаты вершин, нормали, индексы и т.д.)
- Поддержка замещающих материалов (Override Material) для видов и FBO. Позволяет задать единый материал, с которым должны рендериться объекты, игнорируя свои собственные материалы
- Поддержка цветовых буферов разных форматов для FBO (включая 32-битные с плавающей запятой)
- Функция FBORenderObjectEx
- Поддержка рендеринга теней ShadowMap в заданный пользователем FBO вместо внутреннего буфера
- Функции ViewerGetSize, ViewerGetPosition, а также ViewerIsOpenGLExtensionSupported.
Xtreme3D 3.4 (30.12.16)
- Добавлена поддержка TTF-шрифтов и вывода любых символов Юникода через кодировку UTF-8
- Добавлены функции ObjectHash (хэш-таблица для хранения любых объектов Xtreme3D)
- Изменен API функции FBORenderObjectEx - появились новые параметры, позволяющие выборочно очищать цветовой буфер и буфер глубины, а также копировать содержимое FBO в основной кадровый буфер
- Поддержка передачи в параметр шейдера GLSL видовой и обратной видовой матриц, а также особого параметра, позволяющего шейдеру узнать, есть ли текстура в заданном текстурном блоке
- В целях ускорения загрузки ресурсов объекты Freeform теперь не генерируют октарные деревья и векторы касательных и бинормалей при загрузке. Это должно быть сделано вручную, если нужно, функциями FreeformGenTangents и FreeformBuildOctree
- Исправлен баг в функции MaterialCubeMapLoadImage. Также в GLSL теперь задействуется бесшовное кубическое проецирование для произвольных мип-уровней кубической текстуры, если поддерживается расширение GL_ARB_seamless_cube_map.
Xtreme3D 3.5 (04.02.17)
- Добавлен объект ClipPlane - плоскость отсечения
- Улучшены шейдеры PhongShader и BumpShader: добавлена поддержка источников света типа lsSpot, тумана, прозрачности и рендеринга без освещения (если освещение отключено в настройках вида). Прозрачность задается через альфа-канал диффузной текстуры - либо, альтернативно, через значение альфа диффузной компоненты материала (только для PhongShader)
- Добавлены новые функции для материалов: MaterialCullFrontFaces, MaterialSetZWrite
- Добавлены новые функции ODE, позволяющие вручную задавать скорость, позицию и поворот динамическим телам.
Xtreme3D 3.6 (17.12.17)
Один из самых крупных релизов в ветке 3.x - разработка этой версии длилась более полугода.
- Добавлена поддержка кодировки Windows для TTF-шрифтов, а также пользовательских 8-битных кодировок
- Добавлены новые функции для материалов: MaterialSetTextureExFromLibrary, MaterialGetNameFromLibrary
- Добавлены новые функции для Freeform: функции FreeformSetMaterialLibraries, FreeformMeshFaceGroupSetLightmapIndex, FreeformMeshFaceGroupGetLightmapIndex
- Добавлены специализированные прокси-объекты для актеров (ActorProxy)
- Возвращены функции ActorMoveBone и ActorRotateBone, добавлена функция ActorMeshSetVisible
- Возвращена функция ObjectInFrustrum
- Возвращены функции мыши, добавлена функция чтения с клавиатуры
- Добавлены функции для создания окон и управления ими
- Добавлены функции для создания цвета из RGB-компонентов
- Добавлены экспериментальные функции для сохранения сцены в файл и чтения из него
- При создании шейдера GLSL теперь не выводится сообщение об ошибке, если ошибок нет.
- В шейдерах PhongShader и BumpShader исправлен баг с неправильным расчетом бликов.