Реализация движка Sacrifice на D

Недавно узнал, что Dagon использовался для разработки свободной реализации игры Sacrifice (2000 г.) на D – sacengine. Только сейчас дошли руки собрать и протестировать. Сама игра мне не знакома, но проект очень интересный. Dagon используется в нем в качестве графического бэкенда. Как следствие, картинка sacengine имеет ряд существенных улучшений по сравнению с оригиналом – поддерживаются мягкие тени, SSAO, постэффект свечения, антиалиасинг.

Я рекомендую собирать игру компилятором LDC и обязательно в релизном режиме, в противном случае она будет заметно притормаживать:

dub build --compiler=ldc2 --build=release-nobounds

Для запуска нужно скопировать скомпилированный 3d.exe в папку с игрой, также нужны библиотеки freetype.dll, libmpg123-0.dll, OpenAl32.dll, SDL2.dll.

Исходники движка доступны под GNU GPL v3.

Обновления

bindbc-wgpu 0.17.0 – синхронизация с wgpu-native 0.17.0. Биндинг теперь не предоставляет готовые сборки библиотеки, их нужно устанавливать самостоятельно (можно скачать со страницы релиза wgpu-native). Также теперь все сигнатуры функций WebGPU хранятся в модулях bindbc.wgpu.types и bindbc.wgpu.types2, в bindbc.wgpu.funcs – только символы. Это позволило сократить кодовую базу и упростить интроспекцию в bindbc.wgpu.loader.

Сайт https://timurgafarov.ru, который раньше был альтернативным адресом для сайта PixelPerfect, теперь перенаправляет на этот блог https://gamedev.timurgafarov.ru. Актуальное портфолио со ссылками на мои проекты вы можете найти на https://gecko0307.github.io.

Статья о PBR для начинающих

PBR (physically-based rendering) в последние годы стал стандартом фотореалистичной графики во всех мейнстримных игровых движках, пакетах моделирования, магазинах стоковых 3D-моделей и т.д. Любой моделлер сегодня обязан уметь работать с текстурами roughness и metallic, а любой GPU-программист – разбираться в азах оптики и понимать, что такое BRDF. Хорошо, если вы много лет работаете в сфере 3D-рендеринга, и все эти нововведения появились у вас на глазах – вы уже давно понимаете, что к чему – однако с нуля разобраться в этой теме очень непросто. Рендеринг превратился в целую науку на стыке оптики, векторной алгебры и вычислительной геометрии, а PBR уже можно считать фундаментальной теорией в рамках этой науки. Моя статья “PBR. Секреты фотореалистичной графики” для журнала “FPS” посвящена основным концепциям PBR – факторам, которые обязан учитывать любой рендер, претендующий на реалистичность.

https://fps.xtreme3d.ru/index.php?content=article&article=pbr

Докинг в ImGui

В тулките ImGui меня особенно радует поддержка докинга окон – это просто киллер-фича для создания сложных интерфейсов для различных редакторов, причем использовать ее очень легко, нужно только создать ImGuiIO со включенным докингом (io.ConfigFlags |= ImGuiConfigFlags.DockingEnable), а затем добавить в очередь объект DockSpace поверх вьюпорта:

ImGuiViewport* viewport = cast(ImGuiViewport*)igGetMainViewport();
ImGuiID mainDockSpaceId = igDockSpaceOverViewport(viewport, 
    ImGuiDockNodeFlags.PassthruCentralNode);

Затем можно создавать окна, как обычно – при перетаскивании окна появится виджет для его прикрепления к верхнему, нижнему, правому или левому краю вьюпорта. При наслоении окон друг на друга они отображаются в виде вкладок.

if (igBegin("Settings", null, ImGuiWindowFlags.NoCollapse))
{
    if (igCollapsingHeader("Post-processing"))
    {
        //...
    }
    
    igEnd();
}

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

Физика автомобиля: новое видео

Записал видео обновленной демки с физикой автомобиля на движке Dagon: новая модель трения (формула Пасейки), поддержка звуков (используется движок SoLoud), множество мелких улучшений и багфиксов.