Выпустил на YouTube-канале небольшое обзорное видео самых интересных новых возможностей Dagon:
video
Dagon 0.25.0
Вышла очередная версия движка! Наиболее интересным нововведением является расширение dagon:video, о котором я писал ранее — теперь в играх можно воспроизводить видео при помощи библиотеки libVLC. Видеопоток декодируется в текстуру, которую можно применить к любому материалу. Для полноэкранного отображения видео предусмотрен виджет FullscreenMediaView
.
Наконец-то добавил в упрощенный рендер поддержку точечных и конусных источников света. Поддерживается до 8 источников света на слой, их нужно добавлять методом SimpleRenderPass.addLight
. Также в упрощенном рендере появилась поддержка cel-шейдинга — управляется свойствами Material.celShading
и Material.rimLight
. В deferred-рендере эти свойства ни на что не влияют.
Появилась поддежка uniform-блоков в шейдерах. Вы можете создать массив uniform-структур при помощи объекта UniformBlockParameter
. Поля структуры должны соответствовать требованиям std140.
Реализован MaterialAsset
— ресурс описания материала, основанный на том же синтаксисе, что и конфигурационные файлы. Кстати, в файлах *.conf теперь поддерживаются матрицы 4×4 и 3×3 (фактически они являются массивами из 16 или 9 числовых значений, которые можно интерпретировать в приложении как матрицы с построчным расположением элементов).
Из мелочей: поддержка Entity.opacity
в HUD-проходе, поддержка анимации для свойства Entity.opacity
, поддержка Material.emissionEnergy
в шейдере Sky, свойство TextureAsset.loaded
.
libVLC и видеотекстуры
Я давно искал удобное решение для воспроизведения видео в играх, и вот, наконец, оно найдено — libVLC, библиотека, на которой основан всеми любимый плеер VLC. В отличие от FFMPEG, это высокоуровневый API, который позволяет буквально в несколько строк добавить видеоплеер в любое окно по HWND (или X window ID под Linux). Но самое интересное, конечно, декодировать видео во внеэкранный буфер, чтобы потом передать его в OpenGL-текстуру — libVLC это также позволяет с минимальными телодвижениями. Я уже добавил в репозиторий Dagon экспериментальное расширение dagon:video, которое предоставляет класс Video
, обертку над libvlc_media_t*
и libvlc_media_player_t*
. Использовать его очень просто — сначала создается VideoManager
, общий для всего приложения (лучше хранить его в классе, наследующем от Game
):
VideoManager videoManager = New!VideoManager(this);
Затем, уже в сцене, создается источник видео:
Video video = New!Video(videoManager, 1920, 1080, assetManager);
video.open("media/video.mp4");
auto videoMaterial = addMaterial();
videoMaterial.baseColorTexture = video.texture;
videoMaterial.alphaTestThreshold = 0.0f;
video.play();
Можно использовать видеотекстуру для любых целей — показать заставку в начале игры, натянув на screen-aligned плоскость, или применить к мешу для создания внутриигрового экрана. Можно даже воспроизводить 360-градусные ролики в равнопромежуточной проекции для отображения на панорамном фоне.
Dagon — новое видео
Также сделал сайт для движка:
https://gecko0307.github.io/dagon
Новая демка и видео
Скачать для Windows