суббота, 31 декабря 2016 г.

Итоги 2016 года

Близится конец года - и, значит, настало время для подведения итогов. К сожалению, в последнее время у меня было мало времени для работы над Atrium, но какой-то прогресс все-таки есть.
  • Графический движок DGL был значительно отрефакторен и улучшен, был создан более эффективный формат для хранения сцен и реализованы различные новые техники рендеринга, самой интересной из которых является PBR. Движок стал работать намного быстрее, а картинка стала заметно современнее.
  • Вышли подряд две новые версии коллекции библиотек dlib - 0.8 и 0.9.
  • Вышло 6 номеров электронного журнала "FPS" (№№ 40, 41, 42, 43, 44, 45). В 2017 году журналу исполняется 9 лет.
  • На сайте LightHouse Software вышли две мои статьи по D - "Стеганография в dlib" и "dlib.image и OpenCL". Также Atrium и сопутствующие проекты привлекли внимание авторов Блога D, где был опубликован соответствующий отчет на английском.
  • Я довел до ума и выложил трассировщик лучей и программный растеризатор, написанные на D, а, кроме того, все-таки доделал свой старый проект - Xtreme3D 3.0.
Чем для меня был интересен прошедший 2016 год? Вот самые, на мой скромный взгляд, значимые события в мире CG, СПО и геймдева:
  • Выход LunarG SDK, комплекта разработки под Vulkan. Одновременно появились и Vulkan-биндинги для разных языков, в числе которых и D. Поддержкой нового API постепенно обрастают и ведущие игровые движки.
  • Открытие исходников CryEngine 5.
  • Выход Krita 3.0 с поддержкой анимации.
  • Переход Blender на OpenGL 2.1 для отрисовки интерфейса. Запускать последние версии Blender на своих старых ноутбуках я теперь не могу - а жаль...
  • Появление Armory3D, альтернативного игрового движка для Blender - очень перспективный проект, картинкой и списком поддерживаемых платформ оставляет BGE далеко позади.
  • Выход Doom 4. Покупать, правда, не стал, скачал на Steam бесплатную демо-версию. Чтобы запустить, пришлось немного пошаманить с настройками, но, в целом, остался доволен. Особенно порадовала пасхалка в виде комнаты с текстурами из классического Дума =)

понедельник, 19 сентября 2016 г.

Инкрементальная сборка в LDC

Любопытная статья по компилятору LDC от Johan Engelen - подробно разбирается инкрементальная сборка и кэширование объектных файлов в LDC 1.1.0.

https://johanengelen.github.io/ldc/2016/09/17/LDC-object-file-caching.html

пятница, 16 сентября 2016 г.

Atrium в Блоге D

Atrium, dlib и другие мои главные проекты привлекли внимание авторов Блога D, где сегодня был опубликован соответствующий пост от Майка Паркера, автора Derelict. Это первый основательный отчет об Atrium на английском языке, если не считать анонса в ньюсгруппе.

http://dlang.org/blog/2016/09/16/project-highlight-timur-gafarov

понедельник, 29 августа 2016 г.

Трассировщик лучей на D

Решил выложить свой трассировщик лучей, написанный для соответствующего цикла статей в "FPS" - может, кому-нибудь пригодится. Он умеет рендерить плоскости и сферы, поддерживает текстуры, отражения (в том числе размытые), туман, мягкие тени, Ambient Occlusion и антиалиасинг.


Рендерит не очень быстро, код не слишком оптимизирован (упор делался, в основном, на простоту и наглядность исходников). Основная оптимизация заключается в распараллеливании трассировки на несколько потоков, что дает заметный прирост производительности на многоядерных процессорах.

Проект написан на D, для работы с изображениями и математических вычислений использует библиотеку dlib. Исходники умещаются в 400 строк. Лицензия - public domain или CC0, на ваш выбор.

Скачать

воскресенье, 14 августа 2016 г.

Heat haze

Сделал эффект "искажения пространства", похожий на марево от жары - думаю применить его где-нибудь в игре:


вторник, 2 августа 2016 г.

x86_64! Ура, товарищи!

Наконец-то мне удалось собрать Atrium под 64-битную Windows! Пришлось ставить VS 2015, но оно стоило того...

Заодно проверил на практике LDC 1.0.0 - производительность, как и несколько лет назад, в разы выше, чем с использованием DMD, что не может не радовать. Теперь все тестовые сборки и промежуточные релизы будут собираться LDC и снабжаться 64-битными версиями.

вторник, 26 июля 2016 г.

Интерьер

Продолжаю работу над дизайном интерьера станции:


Хронология развития движка Atrium

Порой интересно оглянуться назад и оценить пройденный путь. Atrium разрабатывается с 2013 года, и графический движок проекта с того времени претерпел серию значительных эволюционных изменений. Одновременно менялся и визуальный стиль игры:


Не могу не отметить, что процесс разработки идет намного медленнее, чем я изначально предполагал - только на графику с физикой ушло целых три года. Надеюсь, читатели блога отнесутся к этому с пониманием, ведь я работаю над движком в одиночку, в свободное время.

понедельник, 25 июля 2016 г.

пятница, 8 июля 2016 г.

GitHub снова заблокирован

Они все не уймутся. Не знаю, по ошибке или преднамеренно, но на днях в России был заблокирован IP-адрес 151.101.36.133, по которому находятся сервера GitHub для статических данных (assets-cdn.github.com, raw.githubusercontent.com). В результате веб-интерфейс Гитхаба оказался в неработоспособном состоянии. Странички проектов (gh-pages) тоже перестали работать. По всей видимости, блокировку пока осуществляют не все провайдеры (поэтому, наверное, пока все молчат), но это лишь вопрос времени.
В общем, огромное спасибо за это нашим дорогим властям. Уже в который раз.

суббота, 25 июня 2016 г.

PBR. Шероховатость

Теперь DGL автоматически генерирует размытые текстуры окружения для материалов с разной степенью шероховатости:


А вот как смотрится в движке пистолет Cerberus, известная PBR-модель Андрея Максимова:

вторник, 14 июня 2016 г.

Стеганография в dlib

На сайте LightHouse Software вышла еще одна моя гостевая статья, на этот раз посвященная стеганографии на D с использованием dlib. Рассматривается алгоритм Least Significant Bit (LSB).

воскресенье, 12 июня 2016 г.

PBR. Первые шаги

Решил реализовать в DGL модную сейчас технику физически обоснованного рендеринга (physically-based rendering). Уже имеются Cook-Torrance с нормализацией для отраженного света и image-based lighting для непрямого освещения:


Пока не уверен, правда, будет ли это поддерживаться в Atrium. Скорее всего, в DGL будет возможность переключаться между PBR-шейдером и обычным.

пятница, 3 июня 2016 г.

Matcap в DGL

Интересный альтернативный подход к рендерингу реалистичных материалов заключается в использовании простых сферических карт окружения с предрассчитанной освещенностью (в ZBrush их называют matcap). Получается очень эффектно - а главное дешево!


вторник, 31 мая 2016 г.

dlib и Cook в Awesome D

Два моих проекта - коллекцию библиотек dlib и программу сборки Cook2 - включили в репозиторий Awesome D - список самых интересных проектов на языке D, созданный по образцу Awesome Python. Там они стоят в одном ряду с Derelict, Dub, Vibe.d, GtkD, Orange, Mir и другими известными библиотеками и фреймворками.

https://github.com/zhaopuming/awesome-d

среда, 25 мая 2016 г.

Новый формат сцен

Оказалось, что нынешний формат, в котором хранятся модели для DGL, крайне неэффективен - меши хранятся в виде списка треугольников, и большие модели (1000 полигонов и более) загружаются движком неприлично долго. Сейчас экспериментирую с новым форматом, в котором данные хранятся в виде традиционных буферов вершин и индексов - как и следовало ожидать, любые модели теперь грузятся практически мгновенно.
Средства для загрузки нового формата в DGL и экспорта из Blender уже доступны в репозитории движка. Правда, я еще не определился с форматом хранения материалов - есть идея хранить вместе с моделью только базовые характеристики материала, которые можно получить из Blender (текстуры, цвета), а расширенные настройки, специфичные для DGL, загружать из отдельных внешних файлов с текстовым описанием.

суббота, 14 мая 2016 г.

dlib 0.9.0 beta

Вышла бета-версия коллекции библиотек dlib 0.9.0. Из основных нововведений стоит отметить новый модуль dlib.math.tensor - реализацию тензоров с поддержкой как статического, так и динамического выделения памяти (еще один шаг, приближающий dlib к NumPy и Matlab). Также значительно улучшен пакет dlib.image: появился экспорт в BMP и TGA, двумерный foreach для изображений, диапазоны для окон и произвольных прямоугольных регионов. Новый пакет dlib.network, как планируется, будет содержать независимую от Phobos поддержку сети и веб-функциональность (пока в нем есть только парсер URL).

А еще Atrium был успешно портирован под FreeBSD.

пятница, 15 апреля 2016 г.

Программный растеризатор на D

Решил выложить свой программный растеризатор, который написал ради развлечения за пару вечеров. Он умеет рисовать только треугольники, есть поддержка текстур (с перспективной коррекцией) и alpha-смешивания. Не старался его особо оптимизировать, однако он уже работает достаточно быстро при небольших разрешениях (тестировал на 400х300).


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

Весь исходный код умещается в одном файле (<600 строк), не считая бибилиотеки dlib и биндинга к SDL для вывода изображения. Можете использовать его для самообразования или как основу для собственного программного рендера. В архиве есть сборка для Windows.

Скачать

пятница, 8 апреля 2016 г.

Улучшенные тени

Удалось практически свести на нет пикселизацию мягких теней:


Все изменения в DGL, связанные с тенями, кстати, уже доступны в репозитории проекта.

среда, 6 апреля 2016 г.

Мягкие тени

Реализовал в графическом движке сглаживание теней методом PCF. Сблизи заметны артефакты сэмплинга (самый большой недостаток метода), но издали все выглядит вполне прилично:


В дальнейшем, скорее всего, буду двигаться в сторону VSM.

среда, 30 марта 2016 г.

Новый дизайн карты

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


понедельник, 28 марта 2016 г.

Новая модель гравипушки

Встречайте третий (на этот раз, думаю, окончательный) вариант гравитационного излучателя:


Над текстурой еще работаю, на обшивке корпуса будет больше деталей.

вторник, 22 марта 2016 г.

ГГ в Sculptris

Начал моделировать главную героиню Atrium. Принципиально не хочется наделять ее стереотипной красивой внешностью - упор, скорее, на суровость и брутальность.



Для тех, кто забыл, как она должна выглядеть - см. скетчи здесь и здесь.

среда, 16 марта 2016 г.

Игровые движки на D

Ситуация с игровыми движками для D на сегодняшний день, к сожалению, далека от удовлетворительной. Проект Dash, гремевший год-два назад, сегодня практически не развивается, и это подтверждается не только отсутствием значимых коммитов в репозитории, но и словами самих авторов: "Unfortunately we aren't doing much active development on Dash at this point, but we are still relatively quick at doing PRs and providing support". Попытки портировать на D такие движки, как OGRE и Irrlicht, заглохли еще раньше - так же, как и проект по переписыванию на D2 движка Yage, который был достаточно популярен в эпоху D1.

Вот еще парочка проектов, которые проявляли активность в течение последних лет, но нынешняя актуальность которых вызывает сомнения:
  • EncoXD - кроссплатформенный движок на основе SDL2 и OpenGL 3.2 со скриптингом на Lua и начальной поддержкой сети
  • ZuzuStudio Game Engine - курсовая работа студентов из Минска. Курсачи редко перерастают во что-то более серьезное, так что особых надежд питать не стоит.
А что же актуальные проекты? Тут выбор невелик:
  • Unecht - очень любопытный 3D-фреймворк. Работает на GLFW и OpenGL 3.3, поддерживает физику (ODE), OpenAssimp, FreeImage, FMOD, включает собственный редактор сцен
  • DGL - моя скромная разработка, графический движок под Windows, Linux и OSX. Работает на SDL и OpenGL 1.2 (но большая часть функциональности основана на шейдерах и расширениях OpenGL). Нет встроенного редактора, зато есть экспортер сцен для Blender. DGL все еще находится на стадии рефакторинга: есть стабильная версия и экспериментальная ветка DGL/GC-free с ручным управлением памятью, шейдерной системой материалов и многими другими фичами, но некоторые возможности основной ветки до сих пор в нее не портированы - например, скелетная анимация.
Если вы разрабатываете свой игровой движок на D, сообщите в комментариях, и я дополню список.

понедельник, 29 февраля 2016 г.

Vulkan, SDL и D

Частично переписал пример Vulkan/SDL на D. Исходники доступны в моем репозитории экспериментов с Vulkan:

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

Пример представляет собой минимальное приложение, создающее окно SDL, инициализирующее Vulkan и закрашивающее в цикле экран синим цветом. Больше ничего рисоваться не должно.

Функциональность, относящаяся с Vulkan, отделена от SDL и остальной логики приложения, вынесена в модуль vkctx.d. Используются Derelict 2, SDL 1.2 и модифицированный биндинг VulkanizeD. Линковалось и тестировалось на системе с Windows 8.1 и видеокартой NVIDIA GeForce GT 740 с драйвером версии 356.39.

воскресенье, 21 февраля 2016 г.

dlib.image и OpenCL

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

пятница, 19 февраля 2016 г.

Vulkan и SDL

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

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

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

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

среда, 17 февраля 2016 г.

Vulkan + D

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



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

пятница, 12 февраля 2016 г.

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-документации из вики-страниц проекта.

среда, 3 февраля 2016 г.

Старая пушка

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


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