8

Relict Engine: DevLog 20260529. MaterialInstance

Серия Relict Engine

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

  • Добавлена смена рабочий директории на необходимую (давно надо было сделать, но все забивал)

  • Добавлена первая итерация материал инстансов (в очень сыром виде, но работает)

Комментарий

Касательно инстанций, значит. Передал несколько класс шейдера. Пока по тупому, в лоб. На выходных надо будет все это просмотреть, вычитать еще раз, и переписать по человечески. А работает это так:

  • При инициализации контекста дергаются ассеты материалов на загрузку. и передаются в GLShaderProgram

  • GLShaderProgram это дело компилирует, проверяет и линкует (когда-нибудь потом будет добавлен кэш, но пока рассчитываем на кэш драйвера)

  • После этого проходится по инпутам, собирая их в 100500 мапов

индуский код во всей красе, так еще и не все типы реализованы.

индуский код во всей красе, так еще и не все типы реализованы.

  • При отрисовке, если на юнит выставлен инстанс, а не сам материал, проверяет в таблице инстанса по текстовой (!) метке наличие установленного параметра.

Выставляем инстансы, но не задаем параметры. При инициализации рассчитываем на дефолт юниформа в шейдере (но можно и выставить при желании)

Выставляем инстансы, но не задаем параметры. При инициализации рассчитываем на дефолт юниформа в шейдере (но можно и выставить при желании)

  • Если текстовая метка присутствует в мапах класса инстанса (там столько-же мапов, по одному на тип), то передает в шейдер значение из него, если нет, то из таблицы дефолта.

длинный и грустный switch. Я не буду показывать эту портянку

длинный и грустный switch. Я не буду показывать эту портянку

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

Но зато даже в таком виде оно работает.

Простенький примерчик:

Меняем цвет кубиков раз в секунду

Меняем цвет кубиков раз в секунду

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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

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

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


А мапы можно частично подменить union, да в структуру.


PS: а еще я про синхронизацию потоков забыл =/

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

А вообще, тут еще и RTFM момент случился. Надо UBO вводить, чтобы оно одинаково работало и в GL и в VK. Правда в этом случае нужно будет переделать ассет и шейдер еще больше.

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

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


А мапы можно частично подменить union, да в структуру.


PS: а еще я про синхронизацию потоков забыл =/

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

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества