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

Кошмары с локальными осями.

Тема в разделе "Maya", создана пользователем Куприн, 23 май 2012.

Модераторы: Dark™, Skif
  1. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Я новичок. Читаю книгу Сергея Цыпцына "Понимая Maya", построил риг по книге Алексей Сафонова. "Создание 3D-персонажей в Maya.", смотрел уроки по "Digital Tutors", но так и не понял для себя главный принцип ориентировки локалей костей, "хоть убей"!
    Кто-нибудь, помогите чайнику понять истину!
    (пожалуйста, не посылайте меня читать книги-я ими просто обложен))
     
  2. Покатигорошек

    Покатигорошек Активный участник

    С нами с:
    09.12.2005
    Сообщения:
    232
    Симпатии:
    3
    Баллы:
    15
    Может эта книга и не попала в залежи, но в "Maya Complete. Уроки мастерства" черным по белому - "вращение по Z, X - вдоль кости" ;)
     
  3. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Это как понимать, продольное вращение что ли?
     
  4. Skif vip

    Skif Administrator Команда форума

    С нами с:
    26.03.2004
    Сообщения:
    6.823
    Симпатии:
    417
    Баллы:
    2.787
    ба блин все проще гораздо. ориентация вообще вообще может быть любая, вдоль кости любая ось, как в производстве принято. дальше.
    например коссика Х - вдоль кости. остальные оси должны быть просто сонаправлены. то есть как пример кость левой голени. ось Х вдоль кости. Y - вперед, Z - соответсвенно вбок. и все остальные кости ноги должны выглядеть так же.
    и так для спины, руки. но есть еще нюанс. когда делаешь зеркальную копию миррор джоинт, то Х будет направлена не вроль кости а по тому же вектору на не вниз а вверх - это нормально. например когда делаешь руку FK то при вращении плечевого сустава руки должны работать синхронно, тоесть зеркально.
     
  5. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    вот так например, правильно?
     

    Вложения:

    • 2729437.jpg
      2729437.jpg
      Размер файла:
      134 КБ
      Просмотров:
      48
  6. Skif vip

    Skif Administrator Команда форума

    С нами с:
    26.03.2004
    Сообщения:
    6.823
    Симпатии:
    417
    Баллы:
    2.787
    нет. у голеностопного сустава ось Y не идет вдоль ноги и на колене. далее у левой ноги и правой одинаково направлены оси Y. да тут вообще черт поймет что.. Y вообще смотрит не на дочерний объект.
     
  7. fruit_cake

    fruit_cake Знаток

    С нами с:
    20.12.2010
    Сообщения:
    487
    Симпатии:
    58
    Баллы:
    28
    а если нужно пальцы ног сделать, ориентация обеих ног должна быть одинаковая?
     
  8. Skif vip

    Skif Administrator Команда форума

    С нами с:
    26.03.2004
    Сообщения:
    6.823
    Симпатии:
    417
    Баллы:
    2.787
    зачем?
     
  9. Skif vip

    Skif Administrator Команда форума

    С нами с:
    26.03.2004
    Сообщения:
    6.823
    Симпатии:
    417
    Баллы:
    2.787
    поступи проще. начни создавать скелет, например сделал ногу, выложи ориенты, мы подскажем. думаю разберешься.
     
  10. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Странно, этот скрин я сделал с готовой сцены урока, учишься по таким урокам и путаешься(
    .
    Вот ссылка на это урок:
    http://forum.mayaportal.ru/index.php/topic,1188.0.html

    Спасибо! Вот сделал ноги по этому самому уроку!
     

    Вложения:

    • 2729477.jpg
      2729477.jpg
      Размер файла:
      135,2 КБ
      Просмотров:
      46
  11. Skif vip

    Skif Administrator Команда форума

    С нами с:
    26.03.2004
    Сообщения:
    6.823
    Симпатии:
    417
    Баллы:
    2.787
    начни с начала..
     
  12. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Вот тебе мой скрипт на реориентацыю джоинтов. Выделяешь например начало ноги, потом выбираешь направление и жмешь несколько раз на кнопку, и все готово)

    Код:
    if (`window -exists jntReorient`) deleteUI -window jntReorient;
    window -t "Retarget Joints" -w 300 -h 20 -s off jntReorient;
    frameLayout -label "up vector" -borderStyle "etchedIn";
    columnLayout;
    separator -style "none";
    formLayout -numberOfDivisions 100 upaxis;
    
        radioCollection;
        		radioButton -label "x" px;
        		radioButton -label "y" -select py;
        		radioButton -label "z" pz;
        
        formLayout -edit
              -attachForm px "top" 0
              -attachForm px "left" 20
              
              -attachForm py "top" 0
              -attachForm py "left" 60
              
              -attachForm pz "top" 0
              -attachForm pz "left" 100
                       
              upaxis;
    setParent..;
    
    frameLayout -label "set the direction" -borderStyle "etchedIn";
    columnLayout;
    separator -style "none";
    formLayout -numberOfDivisions 1 stthedrct;
                button -l "Retarget" -c rtrgtJnts btrrnt;
        radioCollection;
        		radioButton -label "x" lpx;
        		radioButton -label "-x" -select lpxm;
        		radioButton -label "y" lpy;
        		radioButton -label "-y" lpym;
        		radioButton -label "z" lpz;
        		radioButton -label "-z" lpzm;
        		radioButton -label "your choice" lpych;
        
        formLayout -edit
              
              -attachForm lpx "top" 10
              -attachForm lpx "left" 20
              
              -attachForm lpxm "top" 30
              -attachForm lpxm "left" 20
              
              -attachForm lpy "top" 10
              -attachForm lpy "left" 60
              
              -attachForm lpym "top" 30
              -attachForm lpym "left" 60
              
              -attachForm lpz "top" 10
              -attachForm lpz "left" 100
              
              -attachForm lpzm "top" 30
              -attachForm lpzm "left" 100
              
              -attachForm lpych "top" 10
              -attachForm lpych "left" 140
              
              -attachForm btrrnt "top" 30
              -attachForm btrrnt "left" 140
              
              stthedrct;
    setParent..;
    showWindow;
    global int $jmpRtrgt = 0;
    
    global proc rtrgtJnts()
    {
    global int $jmpRtrgt;
    string $bnRtrgt[0] = `ls -sl`;
    pickWalk -d down; select -add $bnRtrgt[0];
    string $bnRtrgt[] = `ls -sl`;
    if (`radioButton -q -select lpych` == 1 && $jmpRtrgt == 0)
    {
    curve -d 1 -p -1 0 1 -p 0 0 2 -p 1 0 1 -k 0 -k 1 -k 2 -n "chOrient";
    select -r $bnRtrgt[1] chOrient;
    pointConstraint -offset 0 0 0 -weight 1;
    orientConstraint -offset 0 0 0 -weight 1;
    select -r chOrient_pointConstraint1 chOrient_orientConstraint1; doDelete;
    $jmpRtrgt++;
    }
    else
    {
    //------------------------------------------------------------------------
    if (`radioButton -q -select lpych` == 1 && $jmpRtrgt == 1)
    {
    if($bnRtrgt[1] == "")
    {
    joint -e -oj none -secondaryAxisOrient yup -ch -zso;
    select -r chOrient; doDelete;
    $jmpRtrgt = 0;
    }
    else
    {
    select -r $bnRtrgt[0]; parent -w;
    //-------------------------------------------
    setAttr ($bnRtrgt[1] + ".jointOrientX") 0;
    setAttr ($bnRtrgt[1] + ".jointOrientY") 0;
    setAttr ($bnRtrgt[1] + ".jointOrientZ") 0;
    setAttr ($bnRtrgt[1] + ".rotateX") 0;
    setAttr ($bnRtrgt[1] + ".rotateY") 0;
    setAttr ($bnRtrgt[1] + ".rotateZ") 0;
    //-------------------------------------------
    spaceLocator -n loc;
    select -r $bnRtrgt[1] loc;
    pointConstraint -offset 0 0 0 -weight 1;
    select -r loc_pointConstraint1; doDelete;
    
    select -r loc chOrient; parent;
    move -r -os -wd 0 0 10 chOrient;
    
    select -r $bnRtrgt[0] $bnRtrgt[1];
    
    if (`radioButton -q -select px` == 1)
    {
    aimConstraint -offset 0 0 0 -weight 1 -aimVector 1 0 0 -upVector 1 0 0 -worldUpType "object" -worldUpObject loc;
    }
    if (`radioButton -q -select py` == 1)
    {
    aimConstraint -offset 0 0 0 -weight 1 -aimVector 1 0 0 -upVector 0 1 0 -worldUpType "object" -worldUpObject loc;
    }
    if (`radioButton -q -select pz` == 1)
    {
    aimConstraint -offset 0 0 0 -weight 1 -aimVector 1 0 0 -upVector 0 0 1 -worldUpType "object" -worldUpObject loc;
    }
    select -r $bnRtrgt[1]; pickWalk -d down; doDelete;
    select -r loc; doDelete;
    //-------------------------------------------
    float $x= getAttr($bnRtrgt[1] + ".rotateX");
    float $y= getAttr($bnRtrgt[1] + ".rotateY");
    float $z= getAttr($bnRtrgt[1] + ".rotateZ");
    float $ox= getAttr($bnRtrgt[1] + ".jointOrientX");
    float $oy= getAttr($bnRtrgt[1] + ".jointOrientY");
    float $oz= getAttr($bnRtrgt[1] + ".jointOrientZ");
    $x = $x + $ox;
    $y = $y + $oy;
    $z = $z + $oz;
    setAttr ($bnRtrgt[1] + ".jointOrientX") $x;
    setAttr ($bnRtrgt[1] + ".jointOrientY") $y;
    setAttr ($bnRtrgt[1] + ".jointOrientZ") $z;
    setAttr ($bnRtrgt[1] + ".rotateX") 0;
    setAttr ($bnRtrgt[1] + ".rotateY") 0;
    setAttr ($bnRtrgt[1] + ".rotateZ") 0;
    //-------------------------------------------
    select -r $bnRtrgt[0] $bnRtrgt[1]; parent;
    }
    }
    //------------------------------------------------------------------------
    if($bnRtrgt[1] == "")
    {
    joint -e -oj none -secondaryAxisOrient yup -ch -zso;
    }
    else
    {
    if (`radioButton -q -select lpych` != 1)
    {
    select -r $bnRtrgt[0]; parent -w;
    //-------------------------------------------
    setAttr ($bnRtrgt[1] + ".jointOrientX") 0;
    setAttr ($bnRtrgt[1] + ".jointOrientY") 0;
    setAttr ($bnRtrgt[1] + ".jointOrientZ") 0;
    setAttr ($bnRtrgt[1] + ".rotateX") 0;
    setAttr ($bnRtrgt[1] + ".rotateY") 0;
    setAttr ($bnRtrgt[1] + ".rotateZ") 0;
    //-------------------------------------------
    spaceLocator -n loc;
    select -r $bnRtrgt[1] loc;
    pointConstraint -offset 0 0 0 -weight 1;
    select -r loc_pointConstraint1; doDelete;
    
    if (`radioButton -q -select lpx` == 1)
    move -r 3 0 0 loc;
    
    if (`radioButton -q -select lpxm` == 1)
    move -r -3 0 0 loc;
    
    if (`radioButton -q -select lpy` == 1)
    move -r 0 3 0 loc;
    
    if (`radioButton -q -select lpym` == 1)
    move -r 0 -3 0 loc;
    
    if (`radioButton -q -select lpz` == 1)
    move -r 0 0 3 loc;
    
    if (`radioButton -q -select lpzm` == 1)
    move -r 0 0 -3 loc;
    
    select -r $bnRtrgt[0] $bnRtrgt[1];
    
    if (`radioButton -q -select px` == 1)
    {
    aimConstraint -offset 0 0 0 -weight 1 -aimVector 1 0 0 -upVector 1 0 0 -worldUpType "object" -worldUpObject loc;
    }
    if (`radioButton -q -select py` == 1)
    {
    aimConstraint -offset 0 0 0 -weight 1 -aimVector 1 0 0 -upVector 0 1 0 -worldUpType "object" -worldUpObject loc;
    }
    if (`radioButton -q -select pz` == 1)
    {
    aimConstraint -offset 0 0 0 -weight 1 -aimVector 1 0 0 -upVector 0 0 1 -worldUpType "object" -worldUpObject loc;
    }
    select -r $bnRtrgt[1]; pickWalk -d down; doDelete;
    select -r loc; doDelete;
    //-------------------------------------------
    float $x= getAttr($bnRtrgt[1] + ".rotateX");
    float $y= getAttr($bnRtrgt[1] + ".rotateY");
    float $z= getAttr($bnRtrgt[1] + ".rotateZ");
    float $ox= getAttr($bnRtrgt[1] + ".jointOrientX");
    float $oy= getAttr($bnRtrgt[1] + ".jointOrientY");
    float $oz= getAttr($bnRtrgt[1] + ".jointOrientZ");
    $x = $x + $ox;
    $y = $y + $oy;
    $z = $z + $oz;
    setAttr ($bnRtrgt[1] + ".jointOrientX") $x;
    setAttr ($bnRtrgt[1] + ".jointOrientY") $y;
    setAttr ($bnRtrgt[1] + ".jointOrientZ") $z;
    setAttr ($bnRtrgt[1] + ".rotateX") 0;
    setAttr ($bnRtrgt[1] + ".rotateY") 0;
    setAttr ($bnRtrgt[1] + ".rotateZ") 0;
    //-------------------------------------------
    select -r $bnRtrgt[0] $bnRtrgt[1]; parent;
    }
    }
    } 
    }
    
     
  13. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Спасибо за скрипт, как-нибудь в будущем обязательно поюзаю.
    Но здесь ситуация такова, что хочется разобраться сначала самостоятельно, т.е. без внедрения скриптов и авторигов, чтобы понимать как и что работает..
    Но за щедрость спасибо, пригодиться в хозяйстве)
     
  14. Покатигорошек

    Покатигорошек Активный участник

    С нами с:
    09.12.2005
    Сообщения:
    232
    Симпатии:
    3
    Баллы:
    15
    Собственно, да. Ось направлена точно от родительского джоинта к дочернему ("положительное" направление). Или, как правильно подметил Skif в случае зеркального отображения джоинта, в частных случаях - наоборот ("отрицательное" направление).
     
  15. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    я так понимаю, это уже правильнее?
     

    Вложения:

    • 2730082.jpg
      2730082.jpg
      Размер файла:
      66,2 КБ
      Просмотров:
      52
  16. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Skif, помоги!
    Вот делаю ногу, Х у меня продольно в костях по направлению к парент....Y Z-правильно?
     

    Вложения:

    • 2730157.jpg
      2730157.jpg
      Размер файла:
      47,8 КБ
      Просмотров:
      55
  17. Skif vip

    Skif Administrator Команда форума

    С нами с:
    26.03.2004
    Сообщения:
    6.823
    Симпатии:
    417
    Баллы:
    2.787
    да сейчас правильно. только не к парент а наоборот к дочернему... это я просто слова поправил. короч все правильно сейчас.
     
  18. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Спасибо! Ну наконец-то! Кажется, начинаю немного понимать...
    Skif, я продолжу работу, попрошу тебя, если не трудно, я потом скрин вывешу, посмотришь?
     
  19. Skif vip

    Skif Administrator Команда форума

    С нами с:
    26.03.2004
    Сообщения:
    6.823
    Симпатии:
    417
    Баллы:
    2.787
    так да
     
  20. Куприн

    Куприн Знаток

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Начал создавать псевдостопу для левой ноги и понял, что мой мозг пока не в состоянии понять правильную ориентировку. Должны ли совпадать локали псевдостопы с локалями самой ноги?
    Вот, что у меня вышло:
     

    Вложения:

    • 2730422.jpg
      2730422.jpg
      Размер файла:
      71,2 КБ
      Просмотров:
      57
Модераторы: Dark™, Skif

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