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

Рабочий процесс создания Анимации

Опубликованно: 14.05.2017, 20:49
Последняя редакция, Andry: 17.05.2017 20:25

Рабочий процесс создания Анимации: Blender для jme3 с помощью Ogrexml. Автор урока ste3e

  1. Создайте новый проект в jme3. Добавить новую папку в каталог моделей (в
    XP я использовал проводник). Сюда в ogre мы будем помещать файлы.
  2. AW1

  3. Откройте Blender (но только не Blender 2.5, поскольку он не экспортирует в формат Ogre как
    все остальные). Создадим простой объект, расширяя верхнюю грань куба::

    1. Нажмите numpad 5 что бы переключиться в орфографический вид
    2. Tab это режим Редактирования/выделения объектов
    3. Нажмите numpad 1, чтобы перейти в вид спереди
    4. Ctrl + Tab и выберите грань(Faces).
    5. Нажмите numpad 8, чтобы наклонить куб, чтобы вы могли выбрать верхнюю грань
    6. Щелкните правой кнопкой мыши на грани, чтобы выбрать её.
    7. Снова нажмите numpad 1 на передний план
    8. Нажмите E и перетащите мышь, чтобы вытолкнуть верхнюю грань. Один щелчок левой кнопкой мыши и у вас есть новые грани какие вам захочатся
    9. Нажмите S и перемещайте мышь, чтобы масштабировать грань
    10. Нажмите R и перемещайте мышь, чтобы повернуть грань.
    11. Numpad 3 для просмотра одной стороны, ctrl + numpad 3 для просмотра противоположной
  4. Все еще находясь в режиме редактирования, нажмите клавишу, чтобы выбрать весь меш. Нажмите u, чтобы развернуть модель, и выберите «Развернуть» (интеллектуальные прогнозы):
  5. AW2

  6. В UV-окне создайте новое UV-изображение:
  7. AW3

    Затем сохраните изображение в папке ogre, созданной в jme3. Blender 2.49b захочет сохранить файл .tga. Если вы хотите, вы можете открыть файл в редакторе изображений и сохранить его как .jpg в той же папке. В UV-окне Blender еще раз нажмите кнопку изображения. Теперь он будет содержать больше опций, включая Replace. Используйте команду «Заменить» и загрузите только что созданный файл .jpg.

  8. Дайте вашему объекту материал. Игра с цветом и шейдерами
  9. AW4

  10. Настроить текстуру. Мы собираемся отобразить только что сохраненное изображение в сетку ячеек, которую мы только что создали, используя только что развернутые UV-координаты, поэтому обязательно перейдите на вкладку «Ввод карты» и выберите UV.
  11. AW5

  12. В окне кнопок выберите кнопки текстуры (F6) и выберите «Изображение как тип текстуры» и загрузите только что сохраненное изображение .jpg:
  13. AW6

  14. Вернувшись в 3D-окно, вы можете увидеть, как ваша модель выглядит с текстурой, выбрав Textured Draw Type:
  15. AW7

  16. Давайте сделаем это быстро. Выберите режим рисования текстуры. Нажмите клавишу n, чтобы открыть палитру цветов и сойти с ума. Если вы нажмете кнопку «Маска рисования», края сетки будут видны.
  17. AW8

  18. Картина, которую вы делаете с моделью в 3D окне, отображается на UV-изображение в UV-окне. Как только вы закончите рисовать, вам нужно будет сохранить свой UV-файл изображения.
  19. AW9

  20. Теперь настроим анимацию. В 3d-окне перейдите в режим Object. Щелкните левой кнопкой мыши рядом с моделью и нажмите клавишу пробела. Из меню добавьте новую арматуру. Переместите якорь в нижний центр модели. Используйте numpad 1 и 3 для изменения вида спереди и сбоку и убедитесь, что арматура центрирована в обоих видах. Используйте numpad 5 для переключения между перспективным и ортогональным видами. Проще разместить якорь в ортографическом режиме.
  21. AW10

  22. Выбрав арматуру, вы можете перейти в режим редактирования. Это позволяет вам захватывать различные части арматуры и перемещать их. Возьмите верхнюю часть арматурной кости, как показано на первой иллюстрации ниже, и перетащите ее в положение, показанное во второй. Затем нажмите клавишу e и экструдируйте вторую кость.
  23. AW11

  24. Продолжайте выдавливание и позиционирование, пока арматура не встанет на место.
  25. AW12

  26. Есть несколько шагов, чтобы привязать арматуру к сетке, чтобы движения арматуры деформировали сетку.
    1. Откройте окно Outliner:
    2. AW13

    3. Переименуйте арматуру и кости в окне Outliner. Щелкните левой кнопкой мыши по имени, удерживая клавишу Ctrl, чтобы изменить поля имени. Обратите внимание, что выбор кости в окне Outliner выбирает кость в 3D окне.
    4. AW14

    5. Добавить модификатор арматуры. Для этого зайдите в режим объекта и выберите сетку (не арматуру). В окне кнопок выберите панели редактирования (F9). Нажмите кнопку «Добавить модификатор» и выберите «Арматура». Обязательно укажите имя поля OB с именем, которое вы только что присвоили объекту арматуры, и оставьте только кнопку VertGroup выбранной. Не применяйте модификатор.
    6. AW15

    7. Теперь нам нужно установить группы вершин. В основном мы выбираем вершины и создаем группу вершин, которая имеет то же самое имя, что и кость, которую мы хотим переместить. В окне «Кнопки» в режиме редактирования вы найдете группы вершин. Сначала перейдите в 3D-окно и вкладка в режим редактирования. Если вертикали не выбраны, Ctrl + Tab и выберите Вершины. Выберите вершины в нижней части сетки boxFigure, те, которые мы хотим перемещать с помощью кости с именем base. Вы можете сделать это, поместив указатель, нажав клавишу b, и перетащив поле выбора. Хит numpad 3, чтобы убедиться, что вершины на спине были выбраны. Если они не нашли кнопку закрытия в конце кнопок меню 3D-окна и отменили выбор.
    8. AW16

      Выбрав выбранные вершины, нажмите «Создать» и назовите его base, чтобы соответствовать названию кости. Теперь нажмите кнопку Assign, чтобы назначить выбранные вершины группе вершин. Теперь кнопки Desel и Select должны работать. Продолжите эту процедуру для остальных костей. Будьте осторожны, чтобы назначать только те вершины, которые вы хотите кости. Клавиша a переключает все / отменить выбор всех.

    9. Теперь сетка привязана к арматуре. Чтобы увидеть, выйдите из режима редактирования в 3d окне, выберите арматуру и выберите «Режим представления». Если вы выберете любую кость, нажмите клавишу r и переместите мышь, вы увидите, что вершины, закрепленные за костью, двигаются вместе с костью.
    10. AW17

  27. Теперь мы готовы сделать анимацию. Установите первый ключевой кадр:
    1. Убедитесь, что счетчик кадров находится на 1
    2. С выбранной арматурой нажмите клавишу a, пока все кости не станут выбранный
    3. Нажмите клавишу I и выберите LocRotScale
  28. AW18

  29. Клавиши со стрелками увеличивают или уменьшают счетчик кадров. Чтобы оживить сетку, увеличьте счетчик кадров до 4 (например), поверните, переместите и или масштабируйте кости в новую позицию, затем снова выберите все кости и нажмите клавишу I, чтобы создать другой ключевой кадр, выбрав LocRotScale. Продолжайте с шагом 4, пока не получите анимацию, скажем 20 кадров. Вы можете просмотреть свою анимацию, используя клавиши со стрелками … начать с 1 и перейти к последнему ключевому кадру.
  30. Теперь у нас есть анимированный и окрашенный меш-объект, готовый к экспорту в формате Ogrexml. Первым делом нужно проверить, настроен ли Blender для экспорта Ogre. Если вы перейдете в меню «Файл — Экспорт», вы увидите два варианта в списке:
    1. OGRE Meshes
    2. OGRE Scene
  31. Если они отсутствуют, откройте jme3 и установите экспортер в меню «Инструменты». Вам нужно будет сообщить установщику, где Blender скрыл свою папку .scripts. Он должен быть найден в вашей установке Blender в папке .blender … используйте файл explorer, чтобы выследить его.

    AW19

  32. Прежде чем экспортировать сетку, материалы и анимацию, давайте уточним названия объектов в Blender, потому что у меня были проблемы с jme3, которые не могут найти материалы и текстуры, экспортированные Ogre. В окне Outliner переименуйте свой меш следующим образом.
  33. AW20

  34. Теперь нам нужно экспортировать анимацию. Оставьте boxObj и его арматуру выбранными, откройте меню «Файл», «Экспорт» и выберите параметр «OGRE Meshes». Здесь стоит отметить несколько вариантов:
    1. Кнопка «Добавить» используется для добавления анимации. Я разделил созданную анимацию на две, первый кадр будет холдингом, а остальные будут собственно анимацией. Вы устанавливаете это здесь, введя начальные и конечные кадры для данной анимации, и, назвав наборы … Я назвал их «Пуск» и «Действие». Эти имена будут использоваться в коде jme3 для управления анимацией во время выполнения.
    2. Имейте в виду, что имя файла материала должно быть таким же, как и имя Selected, которое будет таким же, как и имя, которое вы дали вашему мешу в Blender.
  35. Используйте указанный ниже параметр и экспортируйте в папку, созданную в jme3.

    AW21

  36. Откройте jme3. Ваша папка ogre должна выглядеть так (возможно, без box.blend, который является файлом Blender):
  37. AW22

  38. Щелкните правой кнопкой мыши на boxMesh.mesh.xml и выберите Преобразовать в двоичный файл JME. Это скомпилирует файл с именем boxMesh.mesh.j3o. Это файл, который мы загрузим. Если jme3 жалуется, что файл материала назван неправильно, вы можете либо переименовать его в то, что хочет jme3, либо реэкспортировать из Blender, убедившись, что вы правильно назвали материал на экране экспорта.
  39. AW23

  40. Следующий код загружает модель:
  41. package mygame;
    
    import com.jme3.app.SimpleApplication;
    import com.jme3.system.AppSettings;
    import com.jme3.light.DirectionalLight;
    import com.jme3.font.BitmapText;
    import com.jme3.math.Vector3f;
    import com.jme3.scene.Node;
    import com.jme3.input.KeyInput;
    import com.jme3.input.controls.KeyTrigger;
    import com.jme3.input.controls.ActionListener;
    import com.jme3.animation.AnimChannel;
    import com.jme3.animation.AnimControl;
    import com.jme3.animation.AnimEventListener;
    import com.jme3.animation.LoopMode;
    
    /**
    * Ogre animation based on Hello Animation tutorial
    * author ste3e
    */
    public class Main extends SimpleApplication implements AnimEventListener{
    
        private BitmapText sysout;//dubug to player screen
        private Node root, placeholder, player;
        private AnimChannel channel;
        private AnimControl control;
        private boolean play=false;//play or stop the animation
    
      public static void main(String[] args) {
        Main app = new Main();
    
        //remove initial screen
        app.setShowSettings(false);
        AppSettings settings=new AppSettings(true);
        settings.put("Width", 1024);
        settings.put("Height", 768);
        settings.put("Title", "My Game");
        settings.put("VSync", true);
        settings.put("Samples", 4);
        app.setSettings(settings);
        app.start();
      }
    
      @Override
      public void simpleInitApp() {
    
        //the node "root" reorients the world space to coincide with Blender's
        reorient();
    
        //writes to the play screen
        enableDebug();
    
        //hang the animation off a placholder that we can move without worrying
        about the animation.
        placeholder=new Node("placeholder");
    
        //root is the reoriented world space
        root.attachChild(placeholder);
        player=(Node)assetManager.loadModel("Models/ogre/boxMesh.mesh.j3o");
        placeholder.attachChild(player);
        initKeys();
    
        //setup animation and set to Start animation as named in Ogre exporter
        control=player.getControl(AnimControl.class);
        control.addListener(this);
        channel=control.createChannel();
        channel.setAnim("Start");
        DirectionalLight sun=new DirectionalLight();
        sun.setDirection(new Vector3f(-0.1f,-0.7f,-1.0f));
        rootNode.addLight(sun);
      }
    
      private void initKeys(){
        inputManager.addMapping("ccw", new KeyTrigger(KeyInput.KEY_LEFT));
        inputManager.addMapping("cw", new KeyTrigger(KeyInput.KEY_RIGHT));
        inputManager.addMapping("play", new KeyTrigger(KeyInput.KEY_P));
        inputManager.addListener(actionListener, "ccw");
        inputManager.addListener(actionListener, "cw");
        inputManager.addListener(actionListener, "play");
      }
    
      private ActionListener actionListener=new ActionListener(){
        public void onAction(String name, boolean keyPressed, float tpf){
          debug(name);
          if(name.equals("ccw")){
            placeholder.rotate(0.0f,0.0f,-0.05f);
          }
          if(name.equals("cw")){
            placeholder.rotate(0.0f,0.0f,0.05f);
          }
          if(name.equals("play") && !keyPressed){
            if(!play){
              channel.setAnim("Action", 0.5f);
              channel.setLoopMode(LoopMode.Loop);
              play=true;
            }else{
              channel.setAnim("Start", 0.5f);
              play=false;
            }
          }
        }
      };
    
      //need to implement listener methods
      public void onAnimCycleDone(AnimControl control, AnimChannel channel,
    String name){}
      public void onAnimChange(AnimControl control, AnimChannel channel, String
    name){}
    
      @Override
      public void simpleUpdate(float tpf){}
    
      private void debug(String str){
        sysout.setText(str);
      }
    
      private void reorient(){
        root=new Node("root");
        root.rotate((float)Math.toRadians(90.0f),(float)Math.toRadians(270.0f),0.0f);
        root.setLocalTranslation(new Vector3f(0.0f,-2.5f,0.0f));
        rootNode.attachChild(root);
    
        //disable standard settings
        flyCam.setEnabled(false);
      }
    
      private void enableDebug(){
    
        //For debugging
        guiNode.detachAllChildren();
        guiFont=assetManager.loadFont("Interface/Fonts/Default.fnt");
        sysout=new BitmapText(guiFont, false);
        sysout.setSize(guiFont.getCharSet().getRenderedSize());
        sysout.setLocalTranslation(300, sysout.getLineHeight(), 0);
        guiNode.attachChild(sysout);
      }
    }

Кнопка p переключает анимацию, а левые клавиши со стрелками вправо вращают анимацию вокруг ее основания. По какой-то причине рабочий процесс не приводит анимацию в jme3 так, как она была экспортирована из Blender. Переориентированный метод прав мировое пространство, поэтому модель отображается в jme3, как в Blender. Все последующие Узлы вывешены из этого переориентированного корневого Узла.

Переориентация также отключает камеры по умолчанию и поведение клавиш. Если вы не отключите это, то клавиши w, a, s, d также будут действовать на модель по умолчанию, независимо от того, имелось ли у вас другое намерение.

Основной метод содержит код для отключения начального окна. Анимация загрузится прямо в окно указанного вами размера.

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

Весь код анимации объясняется в уроке Hello Animation.


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

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

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