Relict Engine: DevLog 20260411
Краткий список изменений
RatTools теперь используется как пакетный рекурсивный импортер ресурсов.
Добавлена заготовка для системы материалов.
Материалы
Потихоньку идет работа над конвейером и импортером материалов. Идет тяжелее, чем надеялся, но идет (больше читаю спецификации, чем пишу + работа + РКН и моя личная борьба с ними).
Итак, что получается на данный момент.
За основу взял заготовку, о которой писал тут: Relict Engine: Шейдеры. Часть 2. Материалы. Синтаксис
Вписал в RatTools парсер трех словных команд по принципу: команда аргумент значение. Для примера: use domain Simple - use команда, domain аргумент, а Simple значение.
Сделал, пока откровенным говнокодом, обработку этого дела. Команда use (в указанном выше посте using) domain подгружает Vertex.glsl и Fragment.glsl из директории SHADERS/domain/%Значение%, считывает их. Подгружает дополнительные файлы glsl с помощью самодельной команды препроцессора #include и подставляет в нужные места значения команды set с выборкой по аргументу. Выглядит это на данный момент так:
inline vec3 Material_Offset()
{
#set return vOffset:vec3(0)
}
Допустим, есть у нас вот такая функция. Парсер видит самодельную команду препроцессор #set с двумя аргументами и селектором ':'. Обращается к хранилищу команды set и ищет там аргумент vOffset. Если находит, то подставляет его значение на место этой строки, если нет, то значение после селектора. В итоге функция превращается в
inline vec3 Material_Offset()
{
return vec3(0);
}
ну или, если vOffset присутствует в материале, то подставится его значение. Заместо return может быть имя переменной, тогда вместо return будет оператор присвоения, например
void Material_Offset(out vec3 MaterialOffset)
{
#set MaterialOffset vOffset:vec3(0)
}
вернет нам
void Material_Offset(out vec3 MaterialOffset)
{
MaterialOffset = vec3(0);
}
ну и тд, но до создания переменной заданного типа пока не доросли (и я не уверен, нужно ли это).
Прежде чем идти дальше (перегнать все это в SPIR-V формат и добавить недостающий функционал, типа ввода/вывода юниформов) хочу немного причесать код, да избавится от ряда костылей, которые появились пока я пробовал разные подходы к форматированию.
Лига Разработчиков Видеоигр
9.5K постов23.3K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"