dlib.image и OpenCL

На сайте LightHouse Software вышла моя гостевая статья, посвященная обработке изображений на GPU средствами OpenCL и dlib. Рассматривается биндинг DerelictCL и реализация ядра для простейшего оконного фильтра (box blur), через который пропускается изображение dlib.image.

Vulkan и SDL

Подключил рендеринг Vulkan к приложению SDL (все-таки писать под голый WinAPI не слишком удобно). Правда, пишу пока на C — с биндингами к Vulkan для D под Windows какая-то странная проблема, пока не удается загрузить функции расширений (проблема решена, скоро перепишу демку Vulkan/SDL на D).

Свои наработки решил выкладывать на GitHub — вдруг кому-нибудь еще понадобятся:

https://github.com/gecko0307/vulkan-demos

В репозитории — пример кубика из LunarG SDK, портированный на SDL2.

Vulkan + D

Буквально этим утром прочитал новость о выходе спецификации Vulkan (подробнее можно прочитать тут). Обновил драйвер Nvidia, сижу, любуюсь свежесобранным примером вращающегося кубика из LunarG SDK:

Кстати, на Гитхабе уже появились биндинги к Vulkan для D, так что можно понемногу начинать осваивать новинку. Мне уже удалось собрать простейшее приложение с использованием VulkanizeD, выводящее информацию о видеокарте, кубик теперь тоже не за горами.

dlib 0.8.0

Встречайте новую версию коллекции библиотек dlib — 0.8.0. Это весьма значимый релиз, так как в нем дебютирует новый пакет dlib.audio — набор инструментов для обработки звука. Но — обо всем по порядку:

  • Исправлен серьезный баг в dlib.core.thread, связанный с удалением неинициализированного потока.
  • Новый пакет dlib.audio содержит абстрактные интерфейсы для аудиоданных (как потоковых, так и хранящихся в памяти), а также простейшие реализации этих интерфейсов. Пакет поддерживает 8 и 16-битные сэмплы, произвольные количества каналов и значения частоты дискретизации. Доступ к сэмплам и их обработка осуществляются числами с плавающей запятой. Есть сохранение и загрузка аудиофайлов формата WAV, в будущем планируется поддержка FLAC и, возможно, других форматов.
  • Сильно обновлен пакет dlib.image — все фильтры и операции над изображениями теперь поддерживают ручное управление памятью. Добавлен новый фильтр chroma key на основе евклидового расстояния, а также новый алгоритм выделения границ на основе морфологического градиента. Исправлено несколько критичных багов (в частности, в свертке изображений, бикубическом и lanczos-ресэмплинге).
  • В dlib.filesystem улучшен модуль stdfs (реализация FileSystem с ручным управлением памятью) — появилась поддержка создания и обхода каталогов, удаления каталогов и файлов.
  • В репозиторий dlib добавлены инструменты для автоматической подготовки HTML-документации из вики-страниц проекта.

Старая пушка

Специально «по просьбам трудящихся» решил вернуть старый вариант гравитационного излучателя. Возможно, к нему будет нарисована новая текстура с более качественной картой нормалей.

Также появился бамп на полах и стенах:

Туман

Добавил поддержку тумана в главный шейдер:

Glow

Адаптировал эффект свечения для новой версии DGL:

Итоги 2015 года

Наступают новогодние праздники — а значит, настало время традиционного подведения итогов по проделанной за год работе:

  • Вышло 6 номеров электронного журнала «FPS» (№№ 34, 35, 36, 37, 38, 39). В 2016 году журналу исполняется 8 лет, не за горами и юбилейный 40-й номер.
  • Открылся ресурс CG World — новостной блог, посвященный компьютерной графике
  • Значительно улучшен графический движок DGL, на котором создается Atrium. Реализовано динамическое освещение, шейдерные эффекты, тени, пост-процессинг и т.д.
  • Игра «засветилась» в PC Magazine, на IndieDB, а также в официальной группе новостей и русскоязычных сообществах по языку D.
  • Обновился сайт Atrium.
  • Состоялся выход dlib 0.7.0 со множеством улучшений во всех модулях библиотеки и поддержкой Travis-CI.
  • Физический движок dmech обновился до версии 0.2.6, обзавелся C-интерфейсом, компиляцией в динамическую библиотеку и поддержкой Mac OS X. Появились новые демки и уроки по движку.
  • Система сборки Cook обновилась до версии 2.1.x. Основные нововведения: поддержка response-файлов, кросс-компиляции и поддиректорий во внешних зависимостях.

Чем для меня был интересен прошедший 2015 год? Вот самые, на мой скромный взгляд, значимые события в мире CG, СПО и любительского геймдева:

  • Появление Vulkan, графического API нового поколения, который должен преодолеть недостатки OpenGL и Direct3D, сократив прослойку между пользовательским кодом и видеодрайвером, что позволит более глубоко оптимизировать приложения.
  • Выход нового короткометражного открытого фильма от Blender Institute — «Космическая прачечная» (проект Gooseberry). 
  • Релиз Krum: Edge of Darkness — игры, созданной на Blender Game Engine, которая создавалась несколько лет.
  • «Выстрел» Krita, которую я бы смело назвал программой года. Разработка этого малоизвестного ранее пакета сейчас идет семимильными шагами, по популярности Krita догоняет GIMP, а по функциональности превосходит уже многие коммерческие продукты.
  • GIMP 2.9 с поддержкой новых цветовых режимов и OpenEXR.
  • Открытие исходников Unreal Engine 4 и PhysX.

Техно-демо

Результат моей работы за последний месяц — практически полный рефакторинг DGL: значительно улучшен убер-шейдер (для всех объектов используется один и тот же шейдер), повысилось качество освещения, появилась поддержка экранного антиалиасинга.

Скачать для Windows

Сразу после Нового года начну перенос Atrium на новую версию движка.