
MCglTF
Библиотека для загрузки glTF-моделей в Minecraft. Поддержка анимаций, материалов, морфинга и многого другого. Упрощает создание сложных 3D-моделей для модов.
MCglTF - это библиотека для разработчиков модов Minecraft, которая позволяет загружать и рендерить 3D-модели в формате glTF. Если вы когда-нибудь пытались добавить в игру сложную модель с анимациями, то знаете, как это муторно. Эта библиотека берёт на себя всю тяжёлую работу: загрузку, подготовку данных и рендеринг.
В ванильном Майнкрафте модели обычно состоят из кубов и простых форм. glTF - это открытый стандарт для 3D-сцен, который поддерживает анимации, морфинг, материалы, текстуры и многое другое. С помощью MCglTF мододелы могут использовать модели, созданные в Blender или других редакторах, практически без конвертации. Это здорово экономит время и позволяет делать модели уровня отдельной игры.
Основные возможности
- Формат GLTF - поддерживаются встроенные ресурсы, а также загрузка по ResourceLocation.
- Формат GLB - бинарная версия glTF тоже работает.
- Полный набор атрибутов - UV, нормали, касательные, цвета вершин.
- Материалы - для PBR и карт нормалей потребуется OptiFine или Iris Shaders с совместимым шейдерпаком.
- Текстуры - подгрузка стандартных текстур.
- Не поддерживается множественные текстурные координаты (сделано для совместимости с ванильным рендером).
- Риг - скелетная анимация работает.
- Анимации - поддерживается несколько анимаций одновременно.
- Морф-таргеты - плавные изменения формы модели.
- Отсечение нулевых узлов - оптимизация, которая не рендерит узлы с нулевым масштабом.
Всё это доступно прямо из кода мода, не нужно писать собственный парсер или рендерер. Достаточно подключить библиотеку и работать с готовыми классами.
Примеры использования
Для примера можно взять рендеринг блоков, предметов и существ. Исходники примеров лежат в репозитории MCglTF-Example, так что можно быстро глянуть, как всё подключается и работает. Это поможет разобраться с API и встроить библиотеку в свой проект.
Важно знать
Почему текстура модели не отображается? Нужно задать материал в поле "extras" у материала, чтобы привязать текстуру. Подробности есть на вики-странице проекта.
Почему две анимации не могут управлять одним и тем же узлом одновременно? В спецификации glTF нет механизма смешивания анимаций (animation blending). Поэтому и в MCglTF эта возможность не реализована. Если вам нужно смешивание, придётся написать собственный обработчик анимаций.
Как применить свою обработку модели, например, кастомный материал или специальные OpenGL-команды? Для продвинутой генерации OpenGL-команд можно переопределить метод isReceiveSharedModel в вашем IGltfModelReceiver и вернуть false. Внутри вы создаёте собственный RenderedGltfModel на основе полученной GltfModel. Не забудьте добавить свои OpenGL-объекты (VBO, VAO, текстуры и т.п.) в GltfRenderDatas, чтобы они корректно удалялись при обновлении ресурсов.
Зачем это нужно
Если вы собираетесь делать мод с нестандартными моделями, MCglTF - настоящая находка. Она берёт на себя рутину и позволяет сосредоточиться на геймплее. Благодаря поддержке glTF вы можете использовать любые инструменты 3D-моделирования и экспортировать модели прямо в игру.
Скачайте MCglTF и попробуйте встроить его в свой следующий проект. Уверен, вы оцените, насколько проще станет работа с моделями!
