Архив рубрики «Новости»

Вышла новая версия движка 1.4.D

17.09.2009

Теперь библиотека движка развивается в двух вариантах:

  1. Версия для разработки, получила название “Version for the development“. К номеру версии библиотеки прибавляется “D” например 1.4.D
  2. Версия для публикации, получила название “Version for release“. К номеру версии библиотеки прибавляется “R” например 1.4.R

Основные отличия этих двух версий:

  • Версия для разработки прошита отладочным функционалом (как на уровне ввода данных, так и на уровне динамических расчетов): вывод подсказок, ошибок, сбор статистики и т.д., что замедляет скорость работы движка.
  • Версия для релиза по максимуму очищена от проверок на ошибки, сбора статистики и выполнения различных операций, направленных на проверку правильности данных.

Концепция данного разделения проста:

При разработке проекта используется версия  “Version for the development“, отлаживается весь проект, исправляются ошибки и неправильные данные. Затем весь проект публикуется  версией  “Version for release“, при этом скорость его работы возрастает.

Новые возможности:

  1. Добавлен новый объект Sprite3D. Спрайты являются полноценными полигональными объектами, врезаются в геометрию сцены, поддерживают все доступные материалы и т.д.;
  2. Добавлен новый объект Sound3D. Данный объект имитирует трехмерный звук, позволяет оживить сцену. Может выступать в роли контейнера для любых полигональных объектов;
  3. Добавлен новый материал DisplayObjectMaterial. Материал, заполняющий полигоны текстурой на основе DisplayObject’ов.

Добавления:

  1. В класс Object3D добавлено новое свойство visible. Свойство позволяет пропускать объект при рендеринге, но при этом не удаляет его со сцены, что очень важно для быстрой и удобной работы с объектами на сцене;
  2. В класс Object3D добавлено новое свойство priority. Свойство отвечает за последовательность добавления объектов в динамическое BSP - дерево, позволяет повысить производительность и уменьшить количество распилов BSP - деревом;
  3. В класс Object3D добавлено новое свойство collision. Свойство позволяет исключать объект и его детей из проверки на столкновения;
  4. В класс Object3D добавлен новый метод lookAt(). Метод перенесен из класса BaseController для большей функциональности;
  5. В класс Object3D добавлен новый метод сalculateObject(). Метод принудительно вызывает перерасчет матрицы объекта, а так же позволяет рассчитать матрицу объекта, не добавляя объект на сцену и не дожидаясь обновления сцены;
  6. В класс Object3D добавлен новый метод move(). Метод позволяет изменять координаты объекта сразу по трем осям. Вызов данного метода более быстрый и удобный, чем вызов трех свойств X, Y, Z, В систему сигналов добавляется лишь одно действие, а не три;
  7. В класс Object3D добавлен новый метод rotation(). Метод позволяет поворачивать объект сразу по трем осям. Вызов данного метода более быстрый и удобный, чем вызов трех свойств rotationX, rotationY, rotationZ, В систему сигналов добавляется лишь одно действие, а не три;
  8. В класс Object3D добавлен новый метод scale(). Метод позволяет масштабировать объект сразу по трем осям. Вызов данного метода более быстрый и удобный, чем вызов трех свойств scaleX, scaleY, scaleZ, В систему сигналов добавляется лишь одно действие, а не три;
  9. В класс MeshOptimization добавлен новый метод mergerMeshs(). Метод объединяет (сливает) геометрию полигональных объектов, не связанных иерархией (т.е. не выступающих ни родителями, ни детьми друг другу) и возвращает новый объект;
  10. В класс MeshOptimization добавлен новый метод mergerMeshChildren(). Метод объединяет всех детей родителя и добавляет их геометрию в геометрию родителя. Метод не учитывает детей детей родителя, но можно поэтапно проводить слияние;
  11. В класс MeshOptimization добавлен новый метод faceVerticesOnPlane(). Метод проверяет находятся ли все вершины грани в одной плоскости с определенной погрешностью;
  12. В класс UVCoords добавлен новый метод reset(). Метод обнуляет текстурные координаты;
  13. В класс DynamicBSPRender добавлено новое свойство autoPriority. Свойство позволяет отключать автоматическую расстановку приоритетов объектам и назначать приоритеты объектам вручную;
  14. В класс StatsDisplay добавлен новый метод appendControlHelpText(). Метод позволяет добавлять HTML - текст в качестве подсказок управления;
  15. В класс StatsDisplay добавлены новые свойства: _height и _width. Свойства позволяют получать размеры области вывода статистики для позиционирования других DisplayObject’ов на экране.

Расширения:

  1. При проверке на столкновения учитываются все полигональные объекты и их дети, ранее только объекты на основе Mesh;
  2. Расширен функционал класса StatsDisplay, помимо RenderTime (время, затраченное на мат. расчеты) выводятся DrawTime (время, затраченное на отрисовку сцены) и PhysicsTime (время, затраченное на физику). Также, выводится полная информация о сцене: количество объектов, камер, вершин, граней, треугольников и т.д.;
  3. Расширен функционал материала LoadingMaterial. По аналогии с загрузчиками можно подписаться на события: LoaderEvent.LOADING_COMPLETE, ProgressEvent.PROGRESS, IOErrorEvent.IO_ERROR, SecurityErrorEvent.SECURITY_ERROR. Перенесены все свойства материала BitmapMaterial для более удобного управления материалом.
  4. Камера при переходе в перспективный режим автоматически изменяет расстояние до ближней плоскости пирамиды видимости на 0, если оно было меньше 0, что позволяет избежать некоторых визуальных артефактов;
  5. Движок проводит автоматический поиск оптимальных объектов в роли сплиттеров при DynamicBSPRender фильтре, что обеспечивает более быструю работу BSP - дерева и уменьшает количество распилов.
  6. Ускорена “конвейерная” обработка путем определения актуальности выполнения тех или иных действий.
  7. Улучшено качество картинки при ортографической проекции путем расчета текстурных матриц для каждого треугольника отдельно (в версиях 1.1 - 1.3 расчет проводился для многоугольников, хотя в более старых версиях для треугольников).
  8. Теперь любой объект на основе Object3D может выступать в роли контейнера.

Изменения:

  1. Для большей функциональности метод lookAt () удален из класса BaseController и перенесен в класс Object3D;
  2. Расчет активного объекта PVS перенесен из проверки на столкновения в рендеринг, что позволяет без физики (без проверки камеры на столкновения) пользоваться PVS - деревом;
  3. Полностью переписан объект SkyBox. Можно применять любой доступный материал к граням SkyBox’a. Объект ведет себя  как любой другой полигональный объект, за исключением того, что не участвует в столкновениях, игнорирует пирамиду видимости (но не клиппинг по области ViewPort’a) и всегда рисуется первым;
  4. Исправлено название класса Clipping. Ранее назывался Cliping.

Исправления:

  1. В методе addMaterialToAllSurface() класса Mesh исправлена ошибка;
  2. В методе getUVsByName() класса Mesh исправлена ошибка;
  3. В методе removeSurface() класса Mesh исправлена ошибка;
  4. Исправлена ошибка в классе DynamicBSPRender. Когда в пирамиду видимости не попадал ни один объект, вызов построения BSP - дерева все равно происходил, что вызывало ошибку;
  5. Исправлена ошибка в классе DynamicBSPRender. Когда в пирамиду видимости не попадал ни один объект, не происходило удаление из ViewPort’a старой графической информации;
  6. Исправлена ошибка в контроллерах. Если контроллеру не назначали камеру, он пытался управлять объектом со ссылкой на null, что вызывало ошибку;
  7. Решена проблема с округление flash playr’a, которая приводила к ошибочному расчету нормалей к граням.

P.S. Особая благодарность Дворцину Александру за всестороннее тестирование движка, выявление ошибок и неточностей.

Добавлен урок «Использование PVS - дерева».

31.08.2009

Использование PVS - дерева.

Демка «Cathedral» BSP версия.

20.08.2009

По просьбе читателей выложил BSP версию демки «Cathedral».

Посмотреть можно здесь

Вышла новая версия движка 1.3.

04.08.2009

Изменения:

  1. Добавлен новый рендер фильтр DynamicBSPRender. Обратите внимание, что рендер фильтры назначаются камерам (в предыдущих версиях сцене)! И делается это так:
    this.camera.renderFilter = new DynamicBSPRender();
  2. Удалены классы:
    а) RenderFilter - класс содержал константы фильтров рендеринга, но т.к. теперь рендер фильтры назначаются камерам, а не сцене, необходимость в этом классе отпала;
    б) BboxName - класс содержал константы ограничивающих примитивов,  но т.к. движок стал использовать только два типа ограничивающих примитивов (прямоугольный параллелепипед и эллипс), необходимость в этом классе отпала;
    в) LoaderI3D - загрузчик моделей в формате I3D  временно удален из интернет версии;
  3. Заполнен класс генерирующий ошибки, возникающие при работе с движком, а также подсказки.
    Об ошибках framework сообщает в таком виде:
    Class:Класс  в котором произошла ошибка; Metod: Метод в котором произошла ошибка (или Setor: Сетор в котором произошла ошибка); Error: Описание ошибки;
  4. Удален метод setDefaultMaterial из класса Surface, т.к. он дублировал уже имеющийся функционал.
  5. О всех остальных незначительных изменениях вы можете узнать из документации.

Оптимизация динамического BSP - дерева и оптимизация архитектуры движка под него

23.07.2009

Провел оптимизацию динамического BSP - дерева, скорость работы повысилась в 4 раза. Теперь обрабатывает до 7000 полигонов при 25++FPS (все полигоны попадают в область отрисовки и видны => соответственно рисуются на экран, а сцена может состоять из “неограниченного” количества полигонов) . Т.е. динамическое BSP - дерево работает всего на 20% медленее BaseRender, но при этом обеспечивает абсолютную точность.

Демка «полностью динамическое BSP - дерево».

20.07.2009

Всем скептикам, утверждающим: “Невозможно создать полностью динамическое BSP-дерево и чтобы оно быстро работало” посвящается :) . Причем, еще не проводил оптимизацию.

Динамическое BSP-дерево обеспечивает абсолютно точную сортировку полигонов и  их врезку друг в друга. На скорость работы такого дерева не влияет - статическая сцена или динамическая (даже, если все объекты на сцене двигаются, крутятся, пересекаются) - скорость будет всегда “одинаковой”.

Временно выход версии 1.3 отложен, но не надолго. Пока занимался сборкой этой версии  появилось несколько интересных идей, как только их реализую, сразу выложу.

Управление:

    Key “Space” - animation on/off;
    Key “E” - show edge on/off;
    Key “Q” - change quality;
    Остальное, как всегда.

Вышла промежуточная версия движка 1.2.1

09.07.2009

Изменения:

  1. В связи с возникновением у разработчиков потребности загружать модели в форматах ASE и OBJ без текстур и текстурных координат, загрузчики были расширены.
  2. В класс FirstPersonController добавлены два свойства: minRotationZ, maxRotationZ

Важная информация:

В связи с  подготовкой архитектуры движка к версии 1.3 в рендеринг фильтре BSPRender отключена динамическая врезка объектов друг в друга.

В версии 1.3 будет полностью измененны алгоритмы в рендеринг фильтре BSPRender (BSP-дерево станет полностью динамическим). Подробно о новом рендеринге расскажу с выходом версии 1.3.

Вышла новая версия движка 1.2.

01.07.2009

Изменения:

  1. Введена интерактивность, теперь можно отслеживать события  по объектам, поверхностям и граням.
    1. Добавлен класс Mouse3DEvent;
    2. В класс View добавлены новые свойства: mouseClick, mouseDown, mouseMove, mouseOut, mouseOver, mouseUp, mouseInteractive.
  2. Добавлен новый материал VideoMaterial;
  3. Появилась возможность в контроллерах (для поворота камеры) заменять нажатие левой кнопки мыши + перемещение мыши  на любую кнопку + перемещение мыши;
  4. Произведена очередная оптимизация на уровне математики, производительность повысилась еще на 3-4%.

Открылся форум!

15.06.2009

В связи с большим количеством вопросов, приходящих на почту  проекта, открытие форума в списке приоритетов было перемещено на первое место.  Перейти на форум.

Добавлен урок «Представление данных о ландшафте, использование полигонального объекта HeightMapMesh».

15.06.2009

Представление данных о ландшафте, использование полигонального объекта HeightMapMesh.