5

Relict Engine: DevLog 20260525

Серия Relict Engine

Краткий список изменений

  • Добавлена заготовка под MaterialInstance

  • Добавлена обработка ключевого слова input в парсере скрипта материала

  • Добавлена дополнительная проверка и автоматический выбор параметра max_concurent_taks в случае, если в конфиге параметр равен нулю

  • Добавлено исключение, в случае, если процессор поддерживает менее 4х потоков

  • Добавлен программный ограничитель кадров в графическом потоке

  • Изменена сортировка рендера с сортировки по геометрии на сортировку по шейдерам для уменьшения кол-ва переключения контекста шейдеров OpenGL

  • Исправлена ошибка при запуске RatTools приводящая к полному запуску движка

  • Исправлено редкое исключение при обработке очереди AsyncTask разными потоками из-за неучтенного состояния гонки при проверке на пустую очередь

Комментарий

Готовлю движок для внедрения инстансов материалов, чтобы максимально сократить кол-во переключений контекста шейдера (материал == шейдер). Возможно еще проведу оптимизацию по vao - собирая определенные меши в один длинный буфер (сейчас один буфер - один меш + лоды). Однако там есть нюанс с динамической выгрузкой сеток и пересчетом индексов и вообще там не все так очевидно, да и прирост по кадрам не то чтобы прямо большой. Я бы даже сказал не заметный. Т.ч. возможно это того и не стоит, т.к. функция glBindVertexArray всего-лишь перещёлкивает указатель на уже загруженный в GPU буфер. Подумаю, в общем, ибо сейчас это не горит.

Инстанс Материала

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

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

0
Автор поста оценил этот комментарий

Я отчасти согласен с теми комментаторами, но жду когда будет продукт/результат, посмотреть на процесс и итоги.

(Я писал: "максимально рано приступай к созданию игры (логика, графика, локации, игры и тд)", "максимально рано приступай к реализации игровой логики, старайся не делать ничего кроме самого необходимого для продвижения разработки игры в движке, важна же игра, а не движок." и тд.)


По поводу использования ИИ:

У тебя в голове есть план как должен выглядеть движок (программа), от и до (или в каком-нибудь срезе).

С этой точки ты можешь получить 2 пользы:

1. Ты можешь проконсультироваться с ИИ по принятым решениям, и это приносит пользу. Позволяет избежать велосипедов или найти лучшее решение.


2. Ты можешь отдавать ИИ на реализацию небольшие части, потом ревью и правки от тебя или через неё опять же. ИИ быстрее пишет и правит код, цикл разработки ускоряется.


Если правильно раздробишь проект, то тебе внутренняя реализация каждого элемента в моменте будет не важна. Элемент выполняет роль, соблюдает контракт и этого достаточно.

Когда он начнёт дамажить, к примеру, по производительности, тогда перепишешь (ты или ИИ) и будет ок.


В общем и целом отдавать ИИ крупные задачи пока не доверяю, а вот давать небольшие блоки на реализации под контролем самое то.

Тогда и ты весь проект знаешь и в курсе всех принятых решений, и ИИ-шка не нахерачила ненужного, и разработка ускорилась.

Это полезный инструмент, надо лишь уметь пользоваться.


Агитирую, но в любом случае выбирать тебе.


И возвращаясь к началу сообщения: та текущем этапе разработки движка ты можешь начать разработку игру? Хотя бы минимум, хотя бы что-то? Если ты начнёшь реализацию игры на текущем этапе, у тебя будет лучшее понимание что тебе надо в движке


UP: гугловский ИИ сильно большой фантазёр, попробуй deepseek бесплатный (expret чат), он более тугой, зато меньше фантазий и вредных ответов

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

В общем и целом отдавать ИИ крупные задачи пока не доверяю, а вот давать небольшие блоки на реализации под контролем самое то.

Так это и есть сниппеты ;)

гугловский ИИ сильно большой фантазёр

нужно уметь его спрашивать. И желательно на английском языке, тогда все ок. Иногда, конечно, косячит, но т.к. объем выдаваемого кода обычно ограничен десятком (в худшем случае) строк, то это не проблема - ошибки видно. А с с учетом какого рода я запросы ему даю, то не принципиально какую нейронку использовать. Оно все равно в первую очередь cppreference.com использует за базу. А запросы примерно такого рода:


запрос:

c++ jthread message queue

ответ:

cpp

#include <iostream>

#include <queue>

#include <mutex>

#include <condition_variable>

#include <thread> // includes jthread


template <typename T>

class MessageQueue

{

std::queue<T> queue;

std::mutex mtx;

std::condition_variable_any cv;

public:

void push(T msg) {

{

std::lock_guard lock(mtx);

queue.push(std::move(msg));

}

cv.notify_one();

}

// Consumer uses stop_token to know when to exit

bool pop(T& msg, std::stop_token st) {

std::unique_lock lock(mtx);

// Wait until queue is not empty OR stop is requested

cv.wait(lock, st, [this] { return !queue.empty(); });

if (st.stop_requested() && queue.empty()) return false;

msg = std::move(queue.front());

queue.pop();

return true;

}

};

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


Я писал: "максимально рано приступай к созданию игры

Да-да, я про это помню. У меня сейчас задача для 3д артиста сделать инструмент для работы с материалами, чтобы он мог контент начать тестировать в движке, а не в UE4. Отсюда и очередь: Статичные сетки -> Материалы -> Инстанс Материалы. Потоки конечно из этой очереди выбились, но лучше сейчас это сделать, чтобы потом не мучится и не выискивать места с ub.

0
Автор поста оценил этот комментарий

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

Реакция что-то среднее между "хм" и "успехов", на пикабу какой-то ограниченный набор эмодзи.


По поводу ИИ
Он сильно ускоряет разработку, советовал бы использовать его больше. Дипсик эксперт к примеру, или платные модели (кладуи, дипсик v4 pro, гопоту)


up: лее, это эмодзи фейспалма, я думал это эмодзи кулака у лциа, типа no pasaran

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Не, к тебе лично не относится. Просто ко мне иногда приходит один/два непонятных челика. Думал кто-то из них поставил ).


По поводу ИИ
Он сильно ускоряет разработку, советовал бы использовать его больше. Дипсик эксперт к примеру, или платные модели (кладуи, дипсик v4 pro, гопоту)

нет уж. Оно может и ускоряет разработку, но в дальнейшем это будет головная боль, особенно когда нужно будет что-то изменить.

Вон уже и сами разработчики нейронок и алгоритмизаторы машинного обучения об этом говорят: https://habr.com/ru/amp/publications/1039430/


А так, мне сниппетов за глаза и за уши. Кода гораздо меньше чем может показаться по объему. А если касаться скорости разработки - то у меня просто не так много времени, которое я могу на это все выделить. Обычно часа 2-3 в день. В плохое время (работа, здоровье) - 2-3 часа в неделю. Как понимаешь, это капец как мало.

показать ответы
0
Автор поста оценил этот комментарий

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

Формально, какую-то кодобазу я уже могу начать переносить. Основной класс для игровых сущностей уже реализован - от него отпочковаться и можно начать переносить структуру игрового Мира. Без графики, ибо кроме статичных сеток движок ничего более не умеет. Ни текстур ни частиц, ни даже ui (там надо доп. проход делать, и желательно в другой фреймбуфер выводить его). Если на работе ничего сверхважного и сверхкритичного в очередной раз не случится, то, думается мне, через месяц можно начинать неспешно и в экспериментальном режиме перетаскивать наработки из UE. Другое дело, что в движке пока даже коллизий нет (конвекс в ассете то есть, но он там мертвым грузом пока-что), т.ч. о каком-то прямо игровом коде говорить рано. Работы много, тут сложно преуменьшить. Поэтому о полноценном прототипе говорить не буду и уж тем-более загадывать (когда загадываю, всегда не успеваю. Я же полгода назад говорил про полгода, да? xD). Но вообще, хотелось бы успеть сделать хоть что-то, что можно пощупать до того, как я закончу гасить ипотеку. А это года полтора, два еще. Ибо потом будет несколько меньше времени на весьма продолжительное время (ремонт и вот эта вот вся возьня).


ИИ использую. Один. Гемени, который в google.com прям доступен. Он недурно сниппеты генерирует под заданный стандарт языка. Ну т.е. как справочный материал используется. Код же пишу сам.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Не понял реакции. Если на гемени, то рекомендую погуглить что такое сниппет. А если есть что сказать (кроме нытья, что ой долго, ой время в пустую), то я всегда открыт к диалогу.

показать ответы
1
Автор поста оценил этот комментарий

Привет


По твоей оценке когда ты сможешь перейти к:
1. Коду той части которая тебя стопнула в UE
2. Реализации прототипа игры

какие-нибудь ИИ используешь при разработке, если да, то какие и как, если нет, то почему?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

Формально, какую-то кодобазу я уже могу начать переносить. Основной класс для игровых сущностей уже реализован - от него отпочковаться и можно начать переносить структуру игрового Мира. Без графики, ибо кроме статичных сеток движок ничего более не умеет. Ни текстур ни частиц, ни даже ui (там надо доп. проход делать, и желательно в другой фреймбуфер выводить его). Если на работе ничего сверхважного и сверхкритичного в очередной раз не случится, то, думается мне, через месяц можно начинать неспешно и в экспериментальном режиме перетаскивать наработки из UE. Другое дело, что в движке пока даже коллизий нет (конвекс в ассете то есть, но он там мертвым грузом пока-что), т.ч. о каком-то прямо игровом коде говорить рано. Работы много, тут сложно преуменьшить. Поэтому о полноценном прототипе говорить не буду и уж тем-более загадывать (когда загадываю, всегда не успеваю. Я же полгода назад говорил про полгода, да? xD). Но вообще, хотелось бы успеть сделать хоть что-то, что можно пощупать до того, как я закончу гасить ипотеку. А это года полтора, два еще. Ибо потом будет несколько меньше времени на весьма продолжительное время (ремонт и вот эта вот вся возьня).


ИИ использую. Один. Гемени, который в google.com прям доступен. Он недурно сниппеты генерирует под заданный стандарт языка. Ну т.е. как справочный материал используется. Код же пишу сам.

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества