8

Relict Engine: RatTools. Меши. Статичные Меши

Что такое RatTools.

RatTools - это минималистичная утилита, которая с помощью библиотек assimp, а в дальнейшем и других (freeimage, ffmpeg и др.), конвертирует различные внешние форматы (fbx/obj на данный момент) в контейнер RAT (Rellict AsseT), который понимает движок.

Relict Engine: RatTools. Меши. Статичные Меши Разработка, Gamedev, Инди, Игровой движок

Вывод информации об объектах исходного файла перед перегоном их в RAT

Контейнер RAT

Контейнер RAT представляет собой бинарный файл, в котором в уже подготовленном для работы виде содержится необходимая информация.

Состоит из 4x байтового заголовка. MagicNumber определяющий то, что используется RAT формат, и AssetTypeID определяющий тип ассета (например, для Статичного Меша заголовок будет выглядеть как 0x52415401). Следующие байты содержат заголовок уже конкретного типа ассета и контейнер с данными. В "сыром" виде к формату НЕ применяются методы сжатия и шифрования.

Relict Engine: RatTools. Меши. Статичные Меши Разработка, Gamedev, Инди, Игровой движок

Заголовок статичного меша в формате RAT

Статичный меш

Статичный меш - это простейший меш без анимаций, морфа и скелета. Т.е. это простейшая сетка. Однако она может содержать несколько самостоятельных объектов, или наборов материалов, которые следует учесть при работе в движке.

Иными словами, формат статичного меша может содержать, в том числе, сдвоенные/строенные вершины, а так-же несколько триангулированых "Фейс" сетов. А движок в свою очередь это должен оперативно загружать и использовать в корректном контексте (например при использовании 2х MaterialID [скриншот выше]) объект будет разделен на два и на отрисовку он будет отправлен как два разных объекта, но при этом он все равно должен остаться единой сущностью.

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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