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

В API Metal их нет! Совсем нет. В принципе, когда я их добавлял в движок, я знал что они считаются устаревшими. Вместо них предлагается использовать Mesh шейдеры. Но их нет в старых версиях OpenGL которые используются в веб. Дилемма!

С другой стороны у меня пока нет юзкейсов на их использование. А у вас?
🤔3
Небольшая рекомендация при работе с функциями dFdx и dFdy. Если вы используете их, для различных вычислений в экранном пространстве. Крайне рекомендую оборачивать их в abs функцию, что бы потом не чесать затылок как я. Эти функции могут возвращать отрицательные значения!
👍1🔥1
После разговора, с моим хорошим знакомым из студии FIFTYTWO, последние 2 недели обдумываю позиционирование своего движка в этом конкурентном мире.
Так-же размышляю о причинах провала "первого отечественного игрового движка NauEngine". На данный момент, я склоняюсь к мысли, что он был неправильно позиционирован, не нашел своего пользователя и благополучно слит во время финансовой оптимизации VK.

Но сколько таких проектов на просторах интернета? Очень много! Если вы откроете Гитхаб (https://github.com/topics/game-engine), то просто офигеете от их количества, разной степени популярности.
Как же не потонуть среди такого потока проектов? Ответ один, правильное позиционирование и поиск своей ниши!

Сейчас я пытаюсь анализировать (между подходами к портированию на MacOS) что отличает успешные проекты, от провальных. Что привлекает людей?
Я заметил, что многие провальные проекты слишком увлекаются графикой. Они бесконечно тратят время на совершенствование выдаваемой картинки. Некоторые даже упарываются в рейтрейсинг, забывая про основной аспект игрового движка...

Инструментарий! Если кто не знает, я пишу движок уже очень давно. Когда давно потухшие звезды были еще молодыми. Ладно не настолько. С самого начала я мечтал сделать успешный коммерческий движок, но потом Unreal Engine 4 вышел в OpenSource и просто покрыл весь мир.
Пришлось подстраиваться и тоже выпустить движок в открытое плавание. Но этого оказалось недостаточно. Нельзя построить стадион и ожидать что люди подтянуться (не помню откуда это). Поэтому я продолжаю думать о вероятной нише.

Что совершенно точно я не собираюсь делать, так это зацикливаться на графике. Много прекрасных игр, сделаны с достаточно примитивными моделями освещения. Маленькие студии (а я целюсь в маленьких). Не могут позволить себе высококлассный контент. Т.к. он стоит очень дорого. Графика уровня Super Mario Odyssey вполне меня устроит. Поэтому я фокусируюсь на удобстве инструментария и пытаюсь привлечь, кого-то для сотрудничества. Людей привлекают реализованные на движке игры!

#thunderengine
5👍3🔥2
Продолжаю держать вас в курсе делиться с Вами впечатлениями от использования Metal.

Вот уже 3 недели я активно разрабатываю с использованием Metal. После определённых неудобств в использовании, связанных скорее с недостатком опыта работы, я могу с уверенностью сказать, что это прекрасный API для работы с графикой!

Metal по своей сути очень похож на Vulkan, только с меньшим количеством заморочек с управлением памятью. Я бы поместил Metal по сложности освоения между OpenGL и Vulkan.

Столь стремительное портирование функционала на Metal, мне обеспечила база написанная на Vulkan. Получился очень похожий код, только компактней и стабильней.

Могу ли я рекомендовать Metal для освоения? Если вы работаете с MacOS или iOS однозначно да! Так-же, это прекрасным стартом, для работы с современной графикой!

#thunderengine
3👍3
Я долго к этому шел и наконец это случалось. Дамы и господа, MacOS вернулся в поддерживаемые платформы.

Теперь рендер использует Metal API для отрисовки картинки!

К сожалению, с иконками возникла заминка, но она скорее связана с необходимостью переделки механизма создания иконок, чем с проблемами с Metal.

#thunderengine
🔥5🍾4
Решил немного расслабиться на этой неделе и практически не писал код движка.

Однако, это не означает что я его совсем не писал. Сейчас я перерабатываю макросы, для работы с интроспекцией. A_REGISTER и A_OVERRIDE макросы будут убраны на этой неделе.

Вместо них можно будет будет использовать A_OBJECT и A_OBJECT_OVERRIDE. Сделано это с одной простой целью, сделать различие между классами основанными на классе Object и другими классами.

Да да я хочу добавить возможность делать интроспекцию и для классов не основанных на классе Object. Макрос для таких классов будет называться A_GENERIC. Так-же хочу попробовать сделать возможность добавлять в интроспекцию, конструкторы с параметрами.

А для чего это нужно, возможно спросите вы? Все очень просто. Чем больше классов будет покрыто интроспекциями, тем больше будет возможностей их использования из скриптов!
🔥4
Сегодня заезжает еще одно обновление. Пока, правда, только для десктопных платформ.

Дамы и господа представляю вашему вниманию сетевой модуль! Пока модуль очень простой и содержит в себе всего одну сущность.

WebRequest - это по сути http запрос, который позволяет разработчику обратиться к web серверу для приема и отправки абстрактных данных. WebRequest поддерживает пока только get запрос, но у меня есть в планах, добавить и post запросы если будет спрос на них. Так-же модуль поддерживает SSL соединения, так, что можно обращаться по протоколу https.

Продуктивные выдались выходные.

#thunderengine
🔥3
Я давненько присматриваю замену QBS для компиляции игровых бинарный файлов. Текущая ситуация меня не страивает по нескольким причинам:

1. Я регулярно сталкиваюсь с тем, что QBS отказывается строиться из исходников на CI. Сейчас я вообще вынужден убрать его из релизов (в замен предлагается использовать QBS из более старых релизов).
2. Сам QBS довольно избыточен, для построения простых игровых бинарей. Он как швейцарский нож, очень многое умеет, но на финальной стадии постройки используется очень ограниченный функционал.
3. Исходя из второго пункта, QBS тащит за собой огромное количество разных вспомогательных файлов, что противоречит моей идеологии о компактности, раздувая редактор дополнительным мусором, который не используется, но требуется "на всякий случай".

Относительно давно я положил глаз на Ninja. Это компактная система сборки состоящая всего из одного бинарного файла. Из его плюсов:
1. Компактный.
2. Кроссплатформенный (Windows, Linux, MacOS)
3. Довольно простой файл для сборки

Однако есть и один минус! В отличии от QBS в Ninja нет генератора проектов для IDE. Но это в принципе решаемо, написанием своего генератора проектов. Нужно будет выделить время в след цикле разработки на исследование этого инструмента.

#thunderengine
👍3
Скоро конец квартала, а это значит, что настает пора релизов.

Встречайте новый релиз Thunder Engine!

В этом релизе добавилось много интересных штук, таких как:
- Поддержка HTML5 платформы. Теперь вы можете делать игры под веб.
- Вернулась поддержка MacOS.
- Улучшен графический пайплайн. Графика стала лучше! Хотя казалось бы куда уже лучше? =)
- Добавлена возможность обращаться к Web серверу (пока только для десктоп платформ)

Полный список вы можете найти тут.

#thunderengine
🔥6
С момента релиза прошло уже больше месяца. И все это время я не делал новых постов. Каюсь!

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

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

Я никуда не пропал. Работа над движком продолжается.
🔥9
Одной из самых моих нелюбимых частей движка, безусловно является редактор UI интерфейсов и инструментарий для манипуляции с виджетами. С ним все время какие-то проблемы образуются. Сама по себе система довольно простая. Но к ней навернуты системы масштабирования и margin'ы и padding'ы всякие, (которые добавляют головной боли) для правильного позиционирования виджета в иерархии. По не многу, я выправляю найденные баги. Но иногда. это занимает какую-то прорву времени. Так и сейчас. Я потратил примерно 2 недели, что-бы исправить поведение рамки. помогающей манипулировать виджетом. Было примерно как показано на скрине. Теперь должно работать правильно. Так-же я помню о старой таске за номером 720 в которой есть просьба добавить быстрое создание ассетов интерфейсов. У меня уже есть механизм шаблонов для них, но я пока не придумал, что нужно разместить в этом самом шаблоне. Может у вас есть идеи?

#thunderengine
😢1
Произвел реафакторинг UI компонент. Сделал применение стилей более гибкими. Как вы возможно знаете, все UI виджеты у меня состоят из простейших компонент. Frame/Image/Label. Все остальные виджеты, под капотом, это комбинация этой сладкой троицы. Иногда сложные виджеты требуют довольно глубокой иерархии. Что-бы нормально применять стиль (цвета размеры и т.д.), необходима возможность отделить своих, от чужих. Так родилась идея SubWidgets. При создании виджет сам регистрирует свои части в специальный контейнер. А когда применяются стили, мы легко можем пройтись по контейнеру и применить стили, только к зарегистрированным компонентам. Решение получилось супер элегантное. В будущем, можно даже селекторы специальные написать для CSS.

#thunderengine
🔥6
Продолжаю совершенствовать редактор игровых интерфейсов. Добавил базовые шаблоны для ассетов типа UI (интерфейс) и CSS (таблица стилей). Задумываюсь о поддержке анимации виджетов через CSS. Но пока держу себя в руках.

#thunderengine
🔥6
Как-то от моего внимания ускользнула возможность, копирования и вставки объектов в редакторе. Решил исправить это досадное недоразумение. Пока, правда, только в редакторе UI интерфейсов. Но начало положено и, со временем, этот функционал распространится и на другие части редактора. К сожалению, универсального подхода тут нет.

#thunderengine
👍3
Так-же сегодня произошло одно маленькое, но знаменательное событие. Счетчик сквозной нумерации тикетов/пулл реквестов приблизился к отметке в 1000. Это хороший повод поделиться некоторой статистикой:
- Количество решеных тикетов: 590
- Количество пул реквестов: 378
- Количество коммитов в репозиторий: 1337 (Elite ^_^)
- Всего выпущено релизов: 25

#thunderengine
🔥6👍1
Продолжаю улучшать редактор UI. Давненько хотел добавить возможность, выравнивания виджетов друг, относительно друга. Я называю эту фичу Snap Solver. На манер Решателей из CAD систем. Это не совсем оно конечно, но очень похоже. Технически, при перемещении виджета, или при изменении его размера, инструмент смотрит на соседние виджеты в иерархии и "примагничивает" границы по X и Y осям других виджетов, если таковые найдутся. Сейчас инструмент учитывает границу соседнего в иерархии виджета и его геометрический центр. В будущем, можно будет сделать еще и учет расстояния, выстраивая виджеты "паровозиком". Хотя для таких целей лучше подходят лэйауты, которые уже поддерживаются.

#thunderengine
🔥4
Пару недель назад, я увлекся улучшение редактора графов. И как-то очень сильно у меня зашло это дело, что текущие изменения затронули уже порядка 100 файлов и это пока не конец. А все дело в том, что я затеял рефакторинг с переводом нодов графа с обьекта Qt, на свои собственные, в рамках движения в сторону отказа от Qt. Ибо не братья они нам больше.

#thunderengine
🔥4
Начинаю подготовку к очередному релизу. Закидываю свежую порцию изменений. Переработанный редактор графов все-же пойдет в следующий цикл разработки, т.к. содержит очень много изменений, в которых очень легко допустить ошибку. Однако, в процессе работы над изменениями, накопилось определенное количество "попутных фиксов" которые я и заливаю прямо в этот момент.

#thunderengine
🔥4
Вот, наконец и подошел момент релиза версии 2025.3. В этой версии, я сфокусировался на исправлении, найденных мной, ошибок в различных редакторах ассетов (в основном UI Editor). Так-же я постарался улучшить пользовательский опыт (Copy/Paste), при использовании редактора. Новых фичей я завез совсем немного и они, по большей части, касаются низкого уровня. С полным списком изменений вы можете ознакомится здесь: https://github.com/thunder-engine/thunder/releases/tag/2025.3

#thunderengine
🔥3
Продолжаю делать глобальные рефакторинги. Сегодня у нас на очереди работа со строками. Раньше я использовал std::string тип, для взаимодействия с текстовыми данными. Но он не всегда удобен, когда нужно сделать более сложные вещи, типа разделения, поиска или замены. Я решил написать аналог QString и не стал сильно заморачиваться, назвав его просто String. У него пока не так много фичей, как у оригинала, но на первое время хватит. Самое муторное было заменить все строки движка с std::string на String. Уверен, что баги вылавливать буду еще некоторое время. Но это глобальное изменение давно назрело.

#thunderengine
🔥6