Relict Engine: RatTools. Меши. Статичные Меши
Что такое RatTools.
RatTools - это минималистичная утилита, которая с помощью библиотек assimp, а в дальнейшем и других (freeimage, ffmpeg и др.), конвертирует различные внешние форматы (fbx/obj на данный момент) в контейнер RAT (Rellict AsseT), который понимает движок.
Контейнер RAT
Контейнер RAT представляет собой бинарный файл, в котором в уже подготовленном для работы виде содержится необходимая информация.
Состоит из 4x байтового заголовка. MagicNumber определяющий то, что используется RAT формат, и AssetTypeID определяющий тип ассета (например, для Статичного Меша заголовок будет выглядеть как 0x52415401). Следующие байты содержат заголовок уже конкретного типа ассета и контейнер с данными. В "сыром" виде к формату НЕ применяются методы сжатия и шифрования.
Статичный меш
Статичный меш - это простейший меш без анимаций, морфа и скелета. Т.е. это простейшая сетка. Однако она может содержать несколько самостоятельных объектов, или наборов материалов, которые следует учесть при работе в движке.
Иными словами, формат статичного меша может содержать, в том числе, сдвоенные/строенные вершины, а так-же несколько триангулированых "Фейс" сетов. А движок в свою очередь это должен оперативно загружать и использовать в корректном контексте (например при использовании 2х MaterialID [скриншот выше]) объект будет разделен на два и на отрисовку он будет отправлен как два разных объекта, но при этом он все равно должен остаться единой сущностью.
Сделать это можно несколькими методами. И сейчас я выбираю лучший. Задача - сделать так, чтобы между загрузкой асета в память и отправкой его на отрисовку прошло как можно меньше времени и тактов cpu. Самое простое решение - это хранить данные уже в оптимизированном виде с уже продублированными вершинами. В этом случае файл поднаберет в весе, но, если загружать данные большими блоками, то это даст неплохой буст в производительности. С другой, стороны, это добавит энтропии, когда мы будем добавлять поддержку анимации и скелетов (банально нужно будет привязывать к ключу/таргету/кости больше вершин). С третьей стороны, поле упаковки ассетов в RelictFS, будет применено сжатие и в принципе разница скорости при загрузке данных будет небольшой, если вообще будет. В общем - пока делаю так, а потом посмотрим, как это будет работать.
Лига Разработчиков Видеоигр
8.5K постов23.1K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"