Thunder Engine Development
35 subscribers
19 photos
13 links
Записки разработчика игрового движка. Чат канала @thunderengine_chat
Download Telegram
Итак, это последний пост из серии, посвященной обновленной системе частиц.

В этой части я бы хотел поговорить о редакторе. Как я уже говорил ранее, я отказываюсь от QML. Поэтому я решил попробовать свой UI Framework для этой цели. Благо, у меня уже был опыт по созданию редактора графов на нем.

За основу был взят UI/UX редактора эффектов Niagara из UE5. Разумеется, их редактор имеет гораздо больше возможностей, чем мой на старте. Однако, я пока только в начале пути.

Формат хранения ассета это переработанный и дополненный формат хранения графов. XML формат обеспечивает компактное и VCS friendly представление.

Так-же как и в редакторе материалов, в редакторе эффектов есть возможность создавать кастомные блоки для добавления в редактор (То-же XML).

На этом свою миссию по обновлению редактора эффектов считаю выполненной. Однако я продолжу исследование, получившейся архитектуры в будущем. И обязательно продолжу добавлять новый функционал в редактор!
🔥2
Когда разрабатываешь кросс платформенный движок, очень важно держать в голове особенности различных платформ. Так и сегодня столкнулся с забавным багом связанным с различиями в реализации хэширования строк.

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

Потом же я обращался к кэшу через хэширование строки уже на стороне webassembly. Из за различий в реализации функции хэширования, значения созданные на Windows не совпадали со значениями созданными на Webassembly, из за этого движок не мог найти нужный ресурс.

В конечном итоге я решил просто использовать свою функцию вычисления хэша для строки. Которая гарантированно будет выдавать одинаковый результат на всех платформах.
🔥1🤔1
Обнаружил довольно большой пласт проблем связанный с мобильными платформами. Постараюсь решить все найденные проблемы до релиза.

Как считаете, следует ли рассказывать о багах в этом канале?
👀2👍1
Когда работаешь с несколькими платформами, неизбежно возникают различные несовместимости в пользовательском опыте.

Для работы с мобильными устройства я давно использую библиотеку GLFM. Она облегчает рутинные задачи, типа создания окна, обработку ввода пользователя и некоторые другие полезности.

С недавних пор библиотека стала поддерживать и WebGL. Я с удовольствие пробую эту функциональность. В целом все отлично работает. Но т.к. эта платформа была добавлена недавно, разработчик не предусмотрел работу канвы в полноэкранном режиме. В этом режиме приходят немного другие данные. Особенно в режиме скрытого курсора (который вообще отсутствует на других платформах)

Я создал тикет для разработчика библиотеки (надеюсь и мне кто-то создаст подобное), где расписал проблему и сейчас думаю над возможными решениями данной проблемы.
👍1
А еще хорошая новость в том, что звук на html5 платформе завелся из коробки. И даже не пришлось ничего дописывать!

По факту платформа очень близка в драфт релизу. И скорее всего войдет в релиз 2025,2
🔥3
Итак, сегодня закончилась (практически) эпопея с одним из старейших тикетов #18 аж от 2018 года!

Целых 7 лет назад я принципиально решил добавить поддержку платформы HTML5. Эта поддержка откладывалась множество раз, т.к. требовала внедрения иной билд процедуры, на основе CMake. И вот в прошлом году я наконец добавил CMake скрипты, что позволило начать портировать движок на HTML5.

Я потратил на это около двух недель. И, в целом, доволен результатом! Рендер работает, физика, музыка и логика тоже работают штатно!

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

На текущий момент платформа находится в драфт версии. Это значит что билд с ее поддержкой можно скачать с CI/CD. Позже она появится в уже официальных релизах начиная с 2025.2 версии.
🔥5
Вот и подошла к концу эпопея, связанная с HTML5/WebGL (до сих пор не определился как ее называть).

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

Я молодец! 💪
🔥71
Настало время подумать, над чем мне работать дальше. Вариантов очень много, а руки всего две.

1. Хотелось бы наконец позаниматься портированием рендара на Metal, что-бы вернуть в строй поддержку MacOS
2. Раз уж заговорили про RHI (Render Hardware Interface) было бы круто закрыть гештальт по Vulkan рендеру, который пылиться на отдельном бранче.
3. Есть мыслишки по расширению возможностей редактора и возможностям добавления различных визуальных инструментов для редактирования отдельных компонент (к примеру редактор кривых на сцене). Хотелось бы сделать что-то похожее на UX блендера где при нажатии на Tab, мы входим в режим редактирования объекта.
4. Хочу еще сделать вращалку вьюпорта как в блендере или как в 3dsMax (первый немного проще вроде)
5. Продолжить работать над VFX редактором (добавить новые модули/компоненты)
6. Очень интересна тема с процедурной генерацией контента
7. Хочется поддерживать блендшейпы и SkinnedSpriteRender (привет гештальт по Spine2D)

Пока хватит. Тем более пальцы на руке закончились!
🔥1
Вчера, когда работал над интеграцией AngelScript для платформы HTML5, заметил, что скрипты довольно часто пользуются моей системой мета объектов. В частности, поиском мета объекта по его сигнатуре.

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

И тут меня осенило! А что если хранить собранную сигнатуру прямо в поле мета объекта. И не просто строку, а ее хэш значение. Это существенно ускорило бы поиск нужного метода просто через сравнение двух целых значений, без необходимости собирать что то из кусочков каждый раз.

Сегодня я сделал этот маленький фикс. Вот такая маленькая история одного ченжа. Хэши это наше все!
🔥5
Закрыл еще одну залежавшуюся фичу/рефакторинг.

Это новый способ менеджмента и поиска объектов по их ID.

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

Определенно, сегодня получился продуктивный день!
🔥4❤‍🔥2
Сегодня закончил первую фичу из списка "хотелок" опубликованного ранее.

Представляю вашему вниманию навигационный кубик. Он поможет вам не заплутать в 3D пространстве ваших миров.
👍5
Давненько не радовал вас апдейтами. Все дело в том, что я обнаружил целую россыпь багов, появившуюся после недавнего рефакторинга системы учёта ID объектов.

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

Сейчас я работаю над новой фичей и расширяю возможности инструментария (EditorTool). Надеюсь новая фича окажется полезной для разработчиков. Скоро опубликую подробности. Надеюсь уже в эти выходные.
🔥5
Как и обещал, рассказываю о новой фиче. Теперь разработчикам доступны Сплайны!

Слышны звуки бурных оваций с переходом к всеобщему ликованию!

Зачем нужны сплайны? Сплайны на сценах могут быть использованы с различными целями. Можно генерировать пути по которым двигаются ваши NPC или объекты. Можно генерировать различную геометрию с использованием сплайнов в качестве основы.

Короче супер полезная штука для ваших игр!

Сплайны доступны в виде компоненты на вашей сцене. К сожалению, текущие возможности редактирования не позволяли сделать это удобно. Для улучшения пользовательского опыта, пришлось доработать существующий инструмент. О доработках читайте в следующем посте.
👍2🔥2👏1
Сущность сплайнов заключается в том, что у нее может быть множество точек и касательных. Текущие редакторы могли работать только с трансформ компонентой, что, по понятным причинам, не подходит для текущего случая. И я предвижу появление подобных кейсов в будущем.

Чувствуешь это запах? Это запах рефакторинга сынок. Обожаю запах рефакторинга по утру.

1. Я добавил возможность инструментам (EditorTool) определять с какой компонентой они могут работать. Теперь при выборе актора редактор сам определяет список инструментов и показывает их кнопки над вьюпортом.
2. Теперь инструменты могут иметь свои дополнительные настройки и кнопки! Смотрите скриншот. Для этого я немного изменил расположение основных контролов, сдвинув их вправо.
3. Некоторую логику работы с акторами пришлось изолировать в старые, базовые инструменты. Что бы попытка удалить точку на сплайне не приводила к удалению всего объекта целиком. То-же самое касается и выбора других объектов.
Очень доволен модификацией. Получилось супер гибко и расширяемо!
🔥4
Астрологи объявили неделю Вулкана. Количество ошибок валидации увеличилось вдвое.
😨5
Пока работал над вулкановским рендером, столкнулся с необходимостью пересмотреть некоторые свои концепты хранения инстансов, а так же необходимость инвалидировать некоторые ресурсы.

Процесс этот будет не быстрым. За неделю не управиться. Откладываю релиз вулкана еще на некоторое время. Постепенно буду менять пайплайн, что-бы соответствовать.
👍1
Так, похоже планы немного меняются. Мне удалось стабилизировать Вулкановский рендер. Он конечно еще сыроват и требует доработки. Но в принципе, он готов к интеграции в основной бранч. Так мне будет легче обращать внимание на его проблемы, а не мариновать его на отдельном бранче. По крайней мере, он не должен мешать работе основного рендера на OpenGL.

Дамы и господа! Я завез вулкан рендер в качестве developer preview фичи.🔥

Вот список известных мне проблем:
- GPU Инстансинг иногда приводит к крешу, связанному с обновлением общего буфера для юниформ переменных
- Иконки не рендерятся
- Shader Graph материал выдает ошибки для Visibility шейдера
- Возможны другие ошибки валидации

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

Такой подход дополнительно открывает интересные опции, в том числе и для системы частиц, когда частицы можно будет присоединять в соседние батчи. К примеру можно сделать отдельный пул для инстансинга источников освещения (это конечно не мегалайт, но тоже не плохо)

#thunderengine
🔥4
На этой неделе занимался улучшением пайплайна рендеринга. Было сделано много, всего и не упомнить.

Основной упор сделал на улучшение Indirect Lighting составляющей изображения. IBL имеет огромное влияние на финальную картинку. Оценить разницу вы можете на скриншотах.

Так-же немного прокачал сохранение динамических свойств. И исправил тени.

#thunderengine
👍2🔥2
Еще одна визуальная фича заезжает в графический пайплайн.

Корректировка яркости - позволяет преобразовать HDR цветовое пространство в LDR. Без ее использования расширенный цветовой диапазон отрезается до диапазона 0-1 (0-255) и могут потеряться некоторые детали. Тонмапинг немного сжимает диапазон позволяя сохранить больше деталей.

Так-же теперь движок поддерживает базовую цветокоррекцию основанную на Color Grading LUT. Данная фича позволяет художнику контролировать и подстраивать цветовое пространство и настроение сцены под свои нужды. Пример вы можете наблюдать на скриншоте.

#thunderengine
🔥4