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

Создание ресурсов в Blender3D

Опубликованно: 11.05.2017, 19:34
Последняя редакция, Andry: 10.11.2017 20:22

В этом разделе обсуждается, как создавать и импортировать модели из Blender3D (2.62+, см. в нижней части урока для Blender 2.49 и более раннего) в jME3. Кроме того, в нем объясняется, как вы можете создавать различные стандартные игровые ресурсы(assets), такие как карты нормалей(normal maps), высокополигональные модели и baked карты освещения(lighting maps).

Asset Management

Для управления ресурсами в целом обязательно прочтите документацию по программному конвейеру мультимедийных игровых ресурсов. Она содержит важную информацию о том, как управлять asset файлами(игровыми ресурсами).

Создание моделей

Модели, совместимые с играми, представляют собой модели, которые в основном состоят из сетки(mesh) и UV-отображение текстур, в некоторых случаях для анимаций. Все другие параметры материала или эффекты (например, частицы и.т.п.) не могут быть переданы должным образом и вероятно в любом случае не будут перенесены на визуализацию(рендеринг) в реальном времени.

UV Отображение Текстур

Чтобы успешно импортировать текстуру, текстура должна иметь UV-отображение на модель. Вот как вы можете задать diffuse(диффузные), normal(нормалей) и specular(зеркальные) карты:

  • blender-material-4
  • blender-material-3
    • blender-material-2
    • blender-material-1

Важно отметить, что каждая используемая текстура создаёт одну отдельную геометрию. Поэтому лучше всего комбинировать UV-отображения или использовать предварительно созданный атлас с разными типами текстур с самого начала, а затем сопоставить uv-координаты моделей с атласом вместо рисования на текстуре. Это лучше всего подходит для крупных моделей, таких как города и космические корабли.

Анимации

Анимация для jME3 должна быть анимацией костей, простые движения объекта поддерживается импортером blender, деформации сетки или другие формы анимации не поддерживаются.

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

  • Создать модель
    • Убедитесь, что ваше местоположение, вращение и масштаб вашего модели применены и ноль/один (см. «Контрольный список моделей ниже»)
    • (Знаете ли вы? Вы можете сделать любую модель из куба, используя только extrusion, это создает очень чистые сетки)
  • Создайте кость armature, не забывайте иметь хотя бы один корень костей!
    • Начните с размещения курсора на ноль
    • Перейдите в меню «Add» → «Armature» → «Single Bone» и создайте корень кости
      • blender-add-bone
    • Выберите кость и перейдите в режим редактирования (нажмите tab).
    • Выберите конец корневой кости и нажмите «E», чтобы вытолкнуть кость, затем начните тащить свою модель таким образом
    • Убедитесь, что ваше местоположение, поворот и масштаб арматуры применены (см. «Контрольный список моделей ниже»), прежде чем продолжить
  • Сделать armature родительской моделью
    • Убедитесь, что вы снова в режиме объекта (нажмите tab еще раз)
    • Сначала выберите объект модели, затем выберите объект armature с нажатой клавишей Shift, затем нажмите Ctrl-P
    • Когда вы это сделаете, вы можете выбрать, как группы костей будут сопоставлены с модельными вершинами изначально
  • Установите новое ограничение armature в настройках «Object Modifiers» и выберите «Armature»
    • blender-make-armature
  • Вуаля, ваша модель должна двигаться, когда вы перемещаете кости в режиме представления
  • Перейдите в окно «Dope Sheet» и выберите «Action editor»
    • blender-action-editor
  • Добавьте действие, нажав кнопку «плюс»
  • Установите режим вращения кости в Кватернион или перейдите из режима вращения в Кватернион и создайте keyframes
    • blender-switch-rotationmode
  • Создайте keyframes (выберите модель armature и нажмите I) на временной шкале
    • blender-add-keyframes
  • Каждое действие будет анимацией, доступной через элемент управления анимацией в jME после импорта
  • Нажмите кнопку «F» рядом с действием, чтобы она была сохранена, даже если нет ссылок
    • Анимация должна быть удалена, если не активна анимация на armature и файл сохроняется

Контрольный список(Model Checklist)

Иногда вы сами не создаете модель, и зачастую модели из Интернета не созданы для рендеринга в реальном времени в OpenGL или не полностью совместимы с костной системой jME.

Чтобы экспортировать анимированную модель в Blender, убедитесь, что выполнены следующие условия:

  • Анимация должна быть анимацией костей
  • Примените расположение, поворот и масштаб к сетке в Blender: в редакторе 3D-вида в Blender выберите сетку в режиме объекта и перейдите в заголовок редактора 3D-вида → Object Menu → Apply → Location / Rotation / Scale.
    • blender_apply_mesh
  • Примените расположение, поворот и масштаб к арматуре в Blender: в редакторе 3D-вида в Blender выберите арматуру в режиме объекта и перейдите в заголовок редактора 3D-видения → Object Menu → Apply → Location / Rotation / Scale.
    • blender_apply_bones
  • Установите начальную точку сетки в нижней части сетки (см. Изображение ниже).
  • Установите точку начала арматуры в нижней части якоря (см. Изображение ниже).
  • Точка начала арматуры и точка начала меша должны находиться в одном и том же месте (см. Изображение ниже).
  • Используйте корневую кость, расположенную в начале арматуры. Эта корневая кость должна находиться в вертикальном положении (см. Изображение ниже), и это корневая кость арматуры. Если вы вращаете корень косточки, вся арматура может вращаться при импорте модели в jMonkey (я просто упоминаю результат, я не знаю, в чём проблема (импортер jMonkey или плагин ogre expender блендера)).
  • Снимите флажок «Конверты костей» в модификаторе арматуры для сетки (см. Изображение ниже).
    • blender_envelopes
  • Снимите флажок «Конверты» на арматуре (см. Изображение ниже).
    • blender_rootbone

Вы можете использовать SkeletonDebugger, чтобы показать скелет вашей игры, чтобы проверить правильность загрузки сетки и скелета:

    final Material soldier2Mat = assetManager.loadMaterial("Materials/soldier2/soldier2.j3m");
    final Spatial soldier2 = assetManager.loadModel("Models/soldier2/soldier2.j3o");
    TangentBinormalGenerator.generate(soldier2);
    soldier2.setMaterial(soldier2Mat);

    final Node soldier2Node = new Node("Soldier2 Node");

    soldier2Node.attachChild(soldier2);
    rootNode.attachChild(soldier2Node);

    final AnimControl control = soldier2.getControl(AnimControl.class);
    control.addListener(this);
    final AnimChanel channel = control.createChannel();

    final SkeletonDebugger skeletonDebug = new SkeletonDebugger("skeleton", control.getSkeleton());
    final Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    mat.setColor("Color", ColorRGBA.Green);
    mat.getAdditionalRenderState().setDepthTest(false);
    skeletonDebug.setMaterial(mat);
    soldier2Node.attachChild(skeletonDebug);
  • blender_finished

Также ознакомьтесь с этими видео и ресурсами:

  • Форум: Как импортировать анимированные модели из Blender 2.6 правильно (видео)
  • Видеоурок для анимированных моделей от Blender 2.6
  • Экспорт сцен OgreXML из Blender 2.49 в jME

NormalMap baking

Модели для рендеринга в реальном времени должны иметь низкое количество полигонов. Для увеличения воспринимаемой детализации модели обычные карты обычно используются в играх. В этом учебнике будет показано, как создать нормальную карту из высокопольной версии вашей модели, которую вы можете применить к низкополигональной версии модели в вашей игре.

Blender modeling lowPoly & highPoly

  • Если вы используете модификатор multiresolution, вам нужен только один объект. Давайте посмотрим на этот пример:
    • 1
  • Добавьте модификатор multiresolution:
    • 3.1
  • Существует два типа модификаторов: Catmull-Clark и Simple.
    • Простые лучше для вещей, таких как стены или полы.
    • Catmull-Clark лучше подходит для объектов вроде сфер.
  • При использовании Catmull-Clark с более высоким значением «subdivide» (больше 3) его значение имеет значение «preview» выше 0 и меньше уровня разделения. Это потому, что Catmull-Clark сглаживает вершины, поэтому normalMap не так точна.
  • Вот пример предварительного просмотра 1, он более плавный, чем исходный меш:
    • 2
  • Включите режим скульптуры в блендере и спроектируйте версию highPoly вашей модели, как здесь:
    • 3
  • Теперь перейдите в закладку Render и испечь обычную карту, используя ту же конфигурацию, что и здесь:
    • 4
Запомнить! Фактический предварительный просмотр влияет на выпечку и экспорт сетки!
Будьте осторожны: приведенные выше шаги ведут к ужасным нормальным картам — вместо этого используйте эту процедуру:
  • Uncheck «[] Выпекать из Multires
  • Переключиться в режим объекта
  • Сделайте копию вашей сетки (SHIFT + D)
  • Удалить модификатор Multires из скопированной модели
  • Удалять любые материалы из скопированной модели
  • Удалить модификатор арматуры из скопированной модели
  • Выберите модель оригинала (highres)
  • Перейдите в режим позы, очистите все преобразования позы
  • Модели highres и lowres должны быть друг на друга
  • Выберите модель оригинала (highres)
  • Удерживайте клавишу SHIFT и выберите скопированную (нижнюю) модель
  • В меню свойств перейти к визуализации
  • Используйте Bake> Normal
  • Check «[x] Выбрано для активного
  • Используйте достаточно высокое значение для параметра «Margin (4+ пикселя, по крайней мере, для карт 1024×1024)
  • Не забудьте сохранить нормальное изображение карты
Будьте осторожны: в Outliner должен быть включен символ камеры (Restrict Render)!

Fixing the normal colors in Blender

Blender имеет собственные стандартные цвета. Нам нужно зафиксировать цвета, чтобы подготовить нормальную карту для использования с JME Lighting Material.

Для этого перейдите в окно узла блендера

  • Вот пример Блендера. Он исправляет нормальные цвета:
    • 5
  • Вот цветовая конфигурация:
    • 6
    • 7
    • 8
  • Иногда потребуется изменить масштаб R и G и добавить некоторое размытие для лучшего эффекта. Сделайте это как на изображении ниже
    • exception2
  • После рендеринга сохраните файл в нужном вам направлении и используйте его с JME Lighting Material и низкополигональной версией модели.
    • ready_normal

LightMap baking

Цель этого урока — коротко объяснить, как выпекать световую карту в блендере с отдельным набором текстурных координат, а затем экспортировать модель, используя эту карту в jME3.

Blender modeling + texturing

  • Создать сетку в блендере и развернуть ее для создания UVS
    • 1
  • На вкладке mesh вы можете увидеть наборы Uvs, она создаст первую.
    • Вы можете назначить текстуру, я использовал встроенную проверку блендера для примера.
  • В этом списке создайте новый и нажмите значок камеры, чтобы сделать выпечку с этим набором. Назовите его LightUvMap.
  • В 3D-режиме в режиме редактирования выделите всю вашу меш-вершину и нажмите ‘U’ / LightMap pack, затем о’кей, что она развернет сетку для световой карты.
  • Создайте новое изображение, перейдите на вкладку рендеринга и все в конце проверьте «Bake section» и выберите тени. Затем нажмите «испечь».
  • Если все пойдет хорошо, он создаст такую световую карту.
    • 2
  • Перейдите на вкладку материала, создайте новую для своей модели и перейдите на вкладку «Текстура».
  • Создайте 2 текстуры по одной для цветовой карты и по одной для световой карты.
  • В разделе «Отображение» обязательно выберите координаты: UV и выберите хороший набор координат.
    • 3
  • Затем световая карта
    • 4

Импорт модели в SDK и создание соответствующего материала

Как только это будет сделано, экспортируйте вашу модель с экспортером огров (или импортируйте ее напрямую через импортер blend), и превратите ее в J3o с помощью SDK.

    Создайте материал для него, используя определение освещения.
  • Добавьте colorMap в слот диффузной карты и lightMap в слот карты освещения.
  • Убедитесь, что вы отметили «SeparateTexCoords»
    • 5
  • Это должно примерно привести к следующему:
    • 6

Смешанный файл, файлы xml ogre и текстуры можно найти в разделе загрузки кода Google Code Repo

http://code.google.com/p/jmonkeyengine/downloads/detail?name=LightMap.zip&can=2&q=#makechanges

Моделирование гоночных трасс и автомобилей

Следуйте по ссылке ниже в pdf-учебник по rhymez, где я буду вести вас к моделированию автомобиля и правильно импортировать его в jMonkeyengine и отредактировать его в редакторе транспортного средства.Плюс, как моделировать простой гоночный трек. http://www.indiedb.com/games/street-rally-3d/downloads/modelling-in-blender-to-the-jmonkeyengine

Оптимизация моделей для 3D-игр

Следуйте по ссылке ниже в учебнике pdf по rhymez, где я расскажу вам о том, как вы можете оптимизировать свои модели для более быстрого рендеринга. http://www.indiedb.com/games/street-rally-3d/downloads/optimizing-3d-models-for-games

SkyBox baking

Существует несколько способов создания статических изображений для использования в небе в игре. Это опишет концепции, используемые в блендере, и создаст уродливое небо смайликов: смайлик Проверьте ссылки ниже для других способов и хороших неба.

Окно «небо» представляет собой куб текстурированного отображения, его также можно свободно назвать en EnvMap или CubeMap. Камера находится внутри куба, и умная вещь, которую делает jME, заключается в том, чтобы нарисовать небо так, чтобы оно всегда находилось за всем, что находится на вашей сцене. Представьте себе, что обезьяна — это камера на фотографии.

  • skybox-concept

Но реальное небо — это не поле вокруг наших голов, оно больше похоже на сферу. Поэтому, если мы поместим какое-нибудь старое изображение в небо, оно будет выглядеть странно и может даже выглядеть как коробка. Это не то, что мы хотим. Фокус в том, чтобы исказить изображение так, чтобы оно выглядело как сфера, даже если это на самом деле изображение, вставленное на коробку. К счастью, блендер может сделать это с насмешкой.

Скриншоты из Blender 2.63, но эквивалентные операции были в блендере в течение многих лет, поэтому с незначительными ухищрениями должны работать практически для любой версии.

Итак, давайте начнем

  • Запустите blender, и вы увидите что-то подобное.
    • start-screen2
  • Куб в стартовой сцене идеально подходит для нас. Мы сделаем, чтобы Blender отображал сцену на этот куб. Получившееся изображение — это то, что мы будем использовать для нашего небоскреба. Таким образом, наше небо jME будет выглядеть так, как будто мы стояли внутри блендера и смотрели на сцену в блендере.
  • Начните с выбора поля и установите для него материал без теней.
    • shadeless
  • Теперь мы создадим текстуру для коробки. Убедитесь, что текстура является картой среды, что объект «Точка обзора» установлен в куб. Разрешение — насколько велика будет полученное изображение. Больше пикселей делает небо лучше, но стоит за счет памяти текстур. Вам придется урезать разрешение до того, что работает в вашем приложении.
    • texture
  • Далее — интересная часть, создайте сцену в blender. Вы можете делать все, что подходит вашему приложению, включать модели для городского пейзажа, настраивать сферу текстурирования в блендере с красивым сфотографированным небом, все, что вы можете подумать, сделает хорошее небо. Я не настолько креативен, поэтому создал эту сцену:
    • scene
  • Теперь отрендерим сцену (нажмите F12). На самом деле не имеет значения, где находится камера в блендере, но вы можете увидеть нечто похожее на это:
    • render
  • Вы можете видеть, что Blender фактически нарисовал сцену на кубе. Это именно то, что мы хотим. Теперь, чтобы сохранить изображение.
  • Выберите текстуру куба и выберите сохранение карты окружения.
    • saveenvmap
  • Это все для Блендера. Откройте сохраненное изображение в каком-либо графическом редакторе (я использую Gimp от http://www.gimp.org здесь).
  • SDK также содержит редактор изображений, щелкните изображение правой кнопкой мыши и выберите «редактировать изображение, чтобы открыть его.
  • Вы заметите, что Blender взял 6 сторон куба и вставлен в одно изображение (3×2). Итак, теперь нам нужно разрезать его на 6 отдельных изображений. В gimp я обычно направляю направляющие туда, где хочу вырезать, а затем перехожу в фильтры → Web → Slice, и пусть gimp разрезает это для меня.
    • post-slice
  • Затем следует переместить файлы изображений в каталог ресурсов и создать небо в jME. Вы можете сделать это в Scene Composer, щелкнув правой кнопкой мыши узел сцены, выбрать Add Spatial и затем выбрать Skybox.

Если вы хотите сделать это из кода, вот пример:

public void simpleInitApp() {

    Texture westTex = assetManager.loadTexture("Textures/west.png");
    Texture eastTex = assetManager.loadTexture("Textures/east.png");
    Texture northTex = assetManager.loadTexture("Textures/north.png");
    Texture southTex = assetManager.loadTexture("Textures/south.png");
    Texture upTex = assetManager.loadTexture("Textures/top.png");
    Texture downTex = assetManager.loadTexture("Textures/bottom.png");

    final Vector3f normalScale = new Vector3f(-1, 1, 1);
    Spatial skySpatial = SkyFactory.createSky(
                        assetManager,
                        westTex,
                        eastTex,
                        northTex,
                        southTex,
                        upTex,
                        downTex,
                        normalScale);
    rootNode.attachChild(skySpatial);
}
В этом примере используется странный normalScale, это должно отразить изображение по оси X и может не понадобиться в вашем случае. Подсказка: текстура применяется на внешней стороне куба, но мы внутри, что мы видим?

Далее вы можете почитать:


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

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

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