Улучшенный normal-mapping и игровой объект со звуком

Категория: Дневник разработки | Скилл: SkyXEngine , C++ | Дата: 16.06.2020
С момента публикации последнего дневника прошло много времени, и не все оно было посвящено разработке движка (были другие первостепенные задачи, типа этой или этой), теперь не будем вести счет дней :)

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

В этом коммите завезли логирование ошибок о невозможности загрузить звук. SoundSystem теперь не падает, а создающий слой просто возвращает NULL. Вот так просто :)

А здесь я долго бился с ошибкой ogg кодирования, которая заключалась в том, что в один из звуков (длительностью около секунды) при ресемплировании в конец файла записывался легкий щелчок. Эта ошибка заняла достаточно времени, но была решена. Проблема шла из предыдущего фикса (в конце прошлого выпуска дневника разработки), ее решением был перенос процесса заливки данных в ogg кодер непосредственно в цикле организующем кодирование. Да, в примере из репозитория так и показано, но четких инструкций (в документации или комментариям к коду) о том, что заливать надо непосредственно в цикле, мне не удалось найти. Ну ладно, поправил.

Начиная с этого коммита в движке начинает появляться звук, а именно шаги (пока только 2d, а вообще еще нет никакого деления на 2d и 3d). Пока в очень упрощенном варианте, но в последующих коммитах звук доделывается, и уже в самом последнем на данный момент коммите есть игровой обьект со звуком. Кстати, редактор terrax теперь умеет загружать звуки.

В двух предыдущих коммитах (связанных со звуком) были исправленны ошибки и наконец-то появился 3d звук! Расчет панорамирования был взят здесь, участникам спасибо :)

Некоторые из коммитом вносят правки в MitAL. Да, как оказалось низкоуровенвое API звука это не просто загрузка файла и работа с и запихивание pcm данных в преобразователь, внутри еще много специфичной работы. Например: проигрывание разноканальных звуков, панорамирование, микширование, инстансинг звуковых буферов (чтобы не грузить один и тот же звук в память, а просто юзать его семплы) и многое другое. Постепенно проект дорабатывается, и как только появится более-менее пригодная для работы версия (когда мы это поймем на основании тестов в нашем движке), мы до конца оформим репозиторий и прикрутим документацию.

И еще один интересный коммит, мы наконец-то поправили normal mapping, теперь он стал правильным и четким. В предыдущей версии была грязная интерполяция пикселей из normal-map с нормалью вершин (вместо нормального поворота по TBN матрице). Как и зачем это было сделано я уже не помню, однако точно знаю что это был математически неверный подход (и естественно графически некрасивый). Ссылка на почитать про normal-mapping. И наконец скрины бонусом (коэффициенты не менялись для чистоты сравнения):

Рендер нормалей. Слева старая версия справа новая (нормальная). В сравнении видно, что на скрине справа к нормалям на гранях плитки (и не только) добавился синий оттенок, а если присмотреться, то в правом верхнем углу можно увидеть что детальности/глубины стало больше

Рендер освещенного пола. Слева старая версия, справа новая (нормальная).

Я Виталий, ник в сети Byurrer.
Увлекаюсь программированием, веду интересные проекты, пишу здесь об интересующих меня вещах: о работе, проектах, увлечениях и проффесиональном развитии.
Мое резюме

Проекты
SkyXEngine, PHP-API, S4G
Категории
В разработке :)
Популярное
В разработке :)