1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

TimeSlider в Maya8.0 -- баг или фишка?

Тема в разделе "Maya", создана пользователем DemX86, 22 окт 2007.

Модераторы: Dark™, Skif
  1. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    Столкнулся с таким... хм... явлением при анимации: если поставить в TimeSlider довольно большой промежуток анимации (чтобы кадров 100 было видно), то при быстром ручном прогоне анимации (т.е. если мышой протянуть активный кадр в timeline) в заранее нормальной анимации начинают твориться жуткие вещи -- объекты уходять на какие-то свои немыслимые траектории, персонажа скрючивает, и вообще, анимация "разваливается"; в основном этим страдают объекты, анимированные IKметодом. А вся фишка в том, что если прогонять анимацию медленно, то все ok -- анимация проигрывает так, как она и была сделана.
    Тоже самое случается, если сразу переходить из кадра там 100го на 150й -- опять чудеса.

    Пробовал менять настройки в разделе Preferences -> TimeLine -> Playback, но никаких изменений это не приносит.

    При работе жутко раздражает (приходится постоянно медленно протягивать таймслайдер -- анимация довольно громоздкая для моего компьютера, поэтому все происходит мееедленно), может кто-нибудь сталкивался с этим или знает, что это -- баг или это поддается лечению? :)
     
  2. Миша Ершов

    Миша Ершов Мастер

    С нами с:
    02.11.2003
    Сообщения:
    1.415
    Симпатии:
    2
    Баллы:
    325
    Может быть тяжелая сцена, и IK-решатели просто не успевают решать.
    Можно пропробовать потестить - отрубить все IK, к примеру. (evaluate nodes -> IK)
    Если найдете причину, то можно бедет попробовать и решить.
     
  3. Ghostfly

    Ghostfly Активный участник

    С нами с:
    31.10.2005
    Сообщения:
    461
    Симпатии:
    0
    Баллы:
    16
    Хм... Наверно Миша как всегда прав, и стоит подрулить солверы, дело наверняка именно в них. Хотел просто добавить что стоит заняться оптимайзом, раз уж сцена громоздкая - упростить везде методы решения IK вплоть до ik2Bone solver'a. Их особенности подробно описаны в хелпе.
     
  4. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    Ммм... звучит странно, но выключение всех IK ничего не изменило (странности так и остались) -- я думал, что вся проблема как раз в этом.

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

    Вложения:

    • 446831.jpg
      446831.jpg
      Размер файла:
      190,7 КБ
      Просмотров:
      46
    • 446832.jpg
      446832.jpg
      Размер файла:
      193,3 КБ
      Просмотров:
      49
  5. Решатель

    Решатель Знаток

    С нами с:
    20.04.2005
    Сообщения:
    1.413
    Симпатии:
    0
    Баллы:
    44
    экспрешны в сцене есть?
     
  6. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    Решатель
    Да есть, но дело в том, что на этом участке анимации они отключены (проанимировал параметр nodeState = Blocking), а включаются потом (nodeState = Normal).
    Эпкрешенов 2, нацелены на ходьбу:
    > один поднимает и опускает тело персонажа при ходьбе;
    > второй перемещает тело вправо/влево/вперед/назад при перемещении ног.

    Но разве могут они влиять на анимацию, если они выключены?
     
  7. Denzil

    Denzil Мастер

    С нами с:
    29.08.2000
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    360
    Сдается мне все дело в парент констрейне....
    Ведь он есть в сцене и влияет на рут?
     
  8. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    Denzil
    Эммм... да нет, я Parent Constrain не использовал.
    Единственное, что влияет на Root -- те самые два Expression, о которых я говорил ранее.
     
  9. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    Похоже, что все дело в этих самых Expressions -- если их закомментировать (// или вообще удалить), тогда баги с различными позами в одном и том же кадре пропадают.
    Но вот только эти выражения нужны -- без них ходьба превращается непонятно во что. Может их можно еще как-нибудь выключить на определенном участке анимации, а потом включить обратно, но способом, отличным от nodeState = Blocking?
    nodeState = NoEffect тоже ничего не изменяет.
     
  10. Guest

    Думается что анимировать nodeState - не самый лучший способ работы с экспрешнами. Вообще они не всегда корректно работают если вот так вот туда-сюда елозить по таймслайдеру. Ничего с этим сделать нельзя.
     
  11. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    Гость
    Да уж, в том, что анимировать nodeState -- дело неблагородное, я убедился в полной мере :)
    Хотя в книжке "Моделирование и анимация персонажей в Maya" Джае-джина Чои рекомендуется делать именно так.

    Мммм... интересно, а можно ли в самом экспрешне указать, с какого кадра ему начинать работать? Надо поковыряться...
     
  12. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    Наконец-то сегодня решил проблему и спешу поделиться с вами результатом бессонной ночи :)

    Оказывается, все дело было в том, как работают эти самые Expressions.
    Например:
    Возьмем, создадим обычный полигональный куб -- все его параметры масштабирования (scale) в ChannelBox равны по умолчанию 1. Теперь запишем выражение, которое в определенный момент включает масштабирование этого куба.

    if (time*24 > 5) {
    cube.scaleX = 2;
    cube.scaleY = 2;
    cube.scaleZ = 2;
    }


    То есть на 6м кадре (при 24fps) масштаб куба увеличится в 2 раза.
    Смотрим:
    [скриншот 1] -- куб в 5м кадре. Scale = 1
    [скриншот 2] -- куб в 6м кадре. Сработало выражение, и как положено, Scale = 2
    А теперь, внимание, если мы вернемся обратно в 5й кадр, то масштаб останется 2. [скриншот 3]
    Вот оно! Именно поэтому при просмотре одного и того же кадра после прокрутки таймслайдера туда-сюда у меня появлялись разные позы персонажа.

    То есть тут нужно просто принудительно указать параметры анимируемого тела в те моменты, когда Expression не работает -- чтобы он не вносил свои коррективы.

    Т.е.
    if (time*24 > 5) {
    cube.scaleX = 2;
    cube.scaleY = 2;
    cube.scaleZ = 2;
    }
    else {
    cube.scaleX = 1;
    cube.scaleY = 1;
    cube.scaleZ = 1;
    }


    Вот теперь куб будет возвращаться в свое первоначальное состояние при переходе обратно в 5й кадр.

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

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


    P.S. Кстати, по ходу анимация параметра nodeState ничего плохого в себе не имеет, хотя сейчас я сделал отдельный атрибут у персонажа, который проанимирован в значения 1, 2 и 3. И, соответственно, в зависимости от этих значений в экспрешне либо включается перемещение тела, или просто тупо руту присваиваются его предыдущие параметры.
     

    Вложения:

    • 448116.jpg
      448116.jpg
      Размер файла:
      109 КБ
      Просмотров:
      45
    • 448117.jpg
      448117.jpg
      Размер файла:
      107,6 КБ
      Просмотров:
      48
    • 448118.jpg
      448118.jpg
      Размер файла:
      107,6 КБ
      Просмотров:
      50
  13. J-A-G-U-A-R

    J-A-G-U-A-R Активный участник

    С нами с:
    25.01.2007
    Сообщения:
    454
    Симпатии:
    0
    Баллы:
    14
    очень полезно было следить за развитием и результатом)
    тебе спасибо
     
  14. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    J-A-G-U-A-R
    Да, хорошо, когда все хорошо заканчивается :)
     
  15. Решатель

    Решатель Знаток

    С нами с:
    20.04.2005
    Сообщения:
    1.413
    Симпатии:
    0
    Баллы:
    44
    Оно, собственно, так и должно работать. Никто ведь не говорил этому кубу, что перед 5-м кадром он почему-то должен обнулить изменения скейла.
     
  16. J-A-G-U-A-R

    J-A-G-U-A-R Активный участник

    С нами с:
    25.01.2007
    Сообщения:
    454
    Симпатии:
    0
    Баллы:
    14
    некоторые очевидные вещи не с первого раза так очевидны )
    бывает...
     
  17. DemX86

    DemX86 Знаток

    С нами с:
    04.09.2006
    Сообщения:
    615
    Симпатии:
    4
    Баллы:
    22
    Точно :)
     
Модераторы: Dark™, Skif

Поделиться этой страницей