Обновления

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), множество мелких улучшений и багфиксов.

Хобби-проекты как интеллектуальный капитал

Задумываясь над тем, какая польза от такого неординарного увлечения, как графическая разработка, я пришел к следующему выводу. Почти все, что я написал в своей жизни “для души”, так или иначе оправдало вложенные усилия – не всегда напрямую и не всегда в материальном выражении, но тем не менее: я получил опыт, который профессионально пригождается буквально каждый день, в каждом проекте. Например:

  • Что возможно и что невозможно. Область применимости машинной логики, вычислений и алгоритмов. Что можно решить за конечное время, а что нет. Какие задачи можно решить точно, какие – приближенно. Где можно положиться на строгую математику, а где лучше работает эвристика.
  • Какие математические модели оптимальны для изображения на компьютере тех или иных явлений реального мира. Под изображением я имею в виду не только реалистичное 3D, но и абстрактную графику, которая используется в анимационном дизайне – вплоть до того, как эффективнее всего рисовать геометрические фигуры. Как лучше всего хранить ту или иную информацию, какая точность чисел для нее оптимальна. Каков минимум параметров, которыми можно выразить ту или иную моделируемую сущность.
  • Как перевести концепцию, выраженную на человеческом языке, на машинный или математический уровень абстракции. Например, говоря о движении, люди любят оперировать такими неформальными понятиями, как “плавно”, “мягко”, “летает”, “парит”, “выскакивает” и т. д. Эти слова не имеют однозначного определения на языке математики, поэтому их приходится трактовать интуитивно, с пониманием контекста и общей картины, заранее воображая в голове, как должен выглядеть результат – и уже исходя из этого представления выводить матмодель: функции движения, изинги, тайминги и т.д.
  • Сколько времени требуется на реализацию тех или иных моделей, механик, алгоритмов и т.д. Какие существуют готовые решения для стандартных задач, и как выбрать оптимальное из нескольких вариантов.