Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine SDK: Документация
            Импортировщик Blender для jMonkeyEngine 3

Импортировщик Blender для jMonkeyEngine 3

Опубликованно: 12.05.2017, 14:21
Последняя редакция, Andry: 17.08.2017 19:22

Введение

Импорт моделей в любой игровой движок так же важен, как и их использование. Качество моделей зависит от способностей людей, которые их создают, и от инструментов, которые они используют. Блендер — один из лучших бесплатных инструментов для создания 3D-окружения. Его большое количество функций привлекает многих модельных дизайнеров. Пока jMonkeyEngine использует файлы сетки Ogre для импорта 3D-данных. Эти файлы создаются скриптом python, который экспортирует данные из блендера. Важно всегда иметь версию скрипта, совместимую с версией блендера, и использовать ее перед импортом данных в jme. Теперь у нас есть возможность упростить процесс импорта, загрузив данные непосредственно из двоичных файлов blender: * .blend.

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

Применение

Чтобы использовать его в своей игре или SDK, вы должны следовать стандартным инструкциям по загрузке игровых ресурсов. По умолчанию BlenderModelLoader регистрируется в вашем assetManager для загрузки смешанных файлов. Это означает, что вы можете загружать и конвертировать файлы .blend модели в формат .j3o, как и любой другой поддерживаемый формат модели.

Поддерживаемые функции

  1. Загрузка сцены (только текущая сцена загружается и импортируется как узел)
  2. Загрузка объектов сетки.
    • При использовании нескольких материалов сетки разбиваются на несколько геометрий.
    • Все грани хранятся в виде треугольников (даже если блендер использует четырехугольник).
    • Сетка является «Smooth(гладкой)».
    • Определяются пользовательские UV-координаты.
    • Загрузка BMesh поддерживается.
  3. Загрузка текстур.
    • Импортируются Both изображения и сгенерированные текстуры.
    • Поддерживается влияние текстур (вкладка «Influence(Влияние)» в блендере 2.5+ и «Map to(Карта на)» в 2.49).
    • Ввод карты еще не полностью поддерживается (сейчас он работает;), поэтому используйте UV-mapping для всех видов текстур.
  4. Изображение текстур.
    • Текстуры могут быть загружены из: png, jpg, bmp, dds и tga.
    • Both текстуры, хранятся в файле блендера а внешние, загружаются (для внешних текстур требуется действительный путь).
    • Текстуры изображения сохраняются как Texture2D.
  5. Сгенерированные текстуры.
    • Все созданные текстуры могут быть загружены за исключением: VoxelData, EnviromentMap и PointDensity.
    • Не стесняйтесь использовать colorbands.
    • Сформированные текстуры «запекаются» в 2D-текстуры и объединяются для создания одной плоской текстуры. Они могут быть легко объединены с текстурами изображениями.
    • Сгенерированные текстуры можно использовать в качестве карт нормали (но это выглядит плохо, когда используется большое количество маленьких треугольников, что может помочь сгладить сгенерированную текстуру ppu в ключе блендера)
  6. Загрузка материалов.
    • Материалы загружаются и прикрепляются к геометриям.
    • Поскольку jMonkeyEngine поддерживает только один материал для каждого Mesh, если вы примените несколько материалов к одному объекту — он будет разбит на несколько сеток (но все еще в одном узле).
    • Поддерживается несколько видов отображения ввода: карты UV, Orco и Nor; Все типы проекций для 2D-текстур, отображение координат XYZ.
  7. Загрузка анимаций.
    • Поддерживаются анимации костей и анимации объектов.
    • Арматуры импортируются как скелет. Загрузка ограничений не полностью поддерживается, поэтому используйте ее внимательно.
    • В настоящий момент поддерживается только назначение вершин костям, поэтому не используйте конверты костей.
  8. Модификаторы загрузки.
    1. Модификатор массива
    2. Модификатор зеркала
    3. Модификатор арматуры (см. Загрузку анимации)
    4. Модификатор частиц (см. Загрузка частиц)
    5. Больше придет со временем.
  9. Загрузка ограничений
    • Ограничения в основном поддерживаются, но они работают не так, как мне бы хотелось. Поэтому не стесняйтесь экспериментировать с ним. Я создам еще один пост, когда он будет работать правильно.
  10. Загрузка частиц.
    • Поддерживаются некоторые функции загрузки частиц. На данный момент вы можете использовать только эмиттеры частиц.
    • Вы можете выбрать излучение частиц из вершин, граней или геометрического выпуклого корпуса (вместо объема).
    • В настоящее время физика Ньютона поддерживается.
    • В основном тестировался на блендер 2.49 (так что я не уверен на 100% о его использовании в блендере 2.5+).
  11. Использование скульптинга.
    • На данный момент это должно хорошо работать :).
  12. Импорт кривых.
    • Поддерживаются кривые Безье и NURBS.
    • Не стесняйтесь использовать также конических и объектов конусности ;)
  13. Импортирование поверхностей
    • Поверхность и сфера NURBS могут быть импортированы.
  14. Импорт неба
    • Загружает цвет горизонта в качестве фона, если не используется тип неба
    • Загружаемое небо без текстуры
    • Загрузка текстурированного неба (включая как сгенерированные, так и нормальные текстуры)

Планируемые функции.

  1. Полная поддержка масштабирования и смещения при отображении текстур.
  2. Полная поддержка ограничений по кости и объектам.
  3. Добавлено больше модификаторов.
  4. Загрузка текстов.
  5. Загрузка метаобъектов (если jme будет его поддерживать;)).

Известные ошибки/проблемы.

  1. Типы текстур RGB10 и RGB9E5 не поддерживаются в операциях слияния текстур (это означает, что вы можете использовать это как единую текстуру в модели, но не следует комбинировать ее с другими изображениями или сгенерированными текстурами).
  2. Если к сетке, имеющей более одного материала, прикреплена арматура, вершины сетки могут быть сильно смещены. Надеюсь исправить это в ближайшее время.

Использование BlenderLoader вместо BlenderModelLoader

У вас есть два загрузчика.

  • BlenderLoader, который загружает всю сцену. Он возвращает экземпляр LoadResults, который содержит все данные, загруженные со сцены.
    public static class LoadingResults extends Spatial {
            /** Побитовая маска объектов, которые необходимо загрузить. */
            private final int featuresToLoad;
            /** Сцены из файла. */
            private List<Node> scenes;
            /** Объекты из всех сцен. */
            private List<Node> objects;
            /** Материалы всех объектов. */
            private List<Material> materials;
            /** Текстуры всех объектов. */
            private List<Texture> textures;
            /** Анимация всех объектов. */
            private List<AnimData> animations;
            /** Все камеры из файла. */
            private List<Camera> cameras;
            /** Все источники света из файла. */
            private List<Light> lights;
            /** Методы доступа здесь. */
    }
  • BlenderModelLoader загружает только узел модели и должен использоваться, когда у вас есть одна модель в файле.

Чтобы зарегистрировать модель, выполните следующие действия:

assetManager.registerLoader(BlenderLoader.class, "blend");

или

AssetManager.registerLoader (BlenderModelLoader.class, "blend");

Последнее, что нужно сделать, — создать правильный ключ.

Для этого вы можете использовать com.jme3.asset.BlenderKey. Самое простое использование — создать ключ соответствующий названию игрового ресурса. Он имеет множество настроек differen, более точно описывающих файл блендера, но все они имеют значения по умолчанию, поэтому вам не нужно беспокоиться об этом в начале. Вы также можете использовать ModelKey. Это даст тот же результат, что и при использовании стандартного BlenderKey.

Как это работает?

BlenderLoader (а также BlenderModelLoader) ищет все виды известных игровых ресурсов для загрузки. Это, конечно, в основном для загрузки моделей из файлов. Каждый объект блендера импортируется как узел сцены. Узел должен также применять текстуры и материалы. Если вы определите анимацию в своем BlenderKey, анимации также будут импортированы и привязаны к модели.

Вот список того, как функции blender отображаются в jme.

Blender  jMonkeyEngine3  Примечание
Scene  Node 
Object  Node 
Mesh  List  Одна сетка может иметь несколько материалов, поэтому список здесь необходим.
Lamp  Light 
Camera  Camera 
Material  Material 
Texture  Texture 
Curve  Node  Узел с кривой в качестве сетки
Surface  Node  Поверхность преобразуется в правильную сетку

Использование BlenderLoader может позволить вам использовать файл blend в качестве локального хранилища ресурсов. Вы можете хранить свои текстуры, материалы или сетки там и просто импортировать их, когда это необходимо. В настоящее время поддерживаются блендеры версии 2.49 и 2.5+ (только стабильные версии). Вероятно, версии до 2.49 будут работать тоже неплохо, но я никогда не проверял это :)

Примечание

Я знаю, что текущая версия загрузчика еще не полностью работоспособна, но поверьте мне — Blender — это очень большая проблема;) Надеюсь, я оправдаю ваши ожидания.

Помните о количестве вершин модели. Наилучшие результаты достигаются, когда модель гладкая и не имеет текстуры. Тогда количество вершин равно количеству вершин в блендере. Если модель не является гладкой или имеет сгенерированную текстуру, то количество вершин в 3 раза больше, чем количество треугольников сетки. Если 2d-текстура применяется с UV-отображением, количество вершин будет варьироваться в зависимости от того, насколько фрагментирована UV-карта.

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

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

Приветствие, Marcin Roguski (Kaelthas)

Постскриптум Этот текст может быть отредактирован тем временем, если я что-то забыл;)

Смотрите так же


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.