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

Бредятина или попытка понять риггинг

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

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

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Тему создал для себя и для людей, которые могут помочь или хотят, как и я, научится и понять риггинг...
     
  2. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    делимся, помогаем, подсказываем!)
     
  3. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Итак, недавно столкнулся с естественной проблемой: на каком-то этапе моделирования своего первого персонажа, понял, что не зная хотя бы основ риггинга, мне будет трудно дальше его дорабатывать. Например:
    1.Как смоделировать правильно волосы? (потому как их придётся в дальнейшем "оживлять"),. Сделаю "так" или "вот так" и потом будут проблемы с сетапом..
    2."Хочу чтобы животик у персонажа двигался") значит нужно и это учитывать перед сетапом.
    3. Нос отдельным мешем или единым мешем..
    4. Как правильно поступить с одеждой..
    .и т.д.....т.д.
    Вывод: Не зная принципов риггинга -я не смогу правильно закончить детали моделирования.
     

    Вложения:

    • 3193693.jpg
      3193693.jpg
      Размер файла:
      1,2 МБ
      Просмотров:
      82
  4. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Положив не до моделированный меш в "пыльный ящик", приступил тренироваться на "человечках". Сейчас только то и делаю, что строю суставы, кручу оси, навешиваю инверсную и прямую кинематику, поле векторы, внешние и внутренние рули, локаторы и т.д. т.п...
     

    Вложения:

    • 3193718.jpg
      3193718.jpg
      Размер файла:
      39,6 КБ
      Просмотров:
      81
  5. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Смотрю, читаю, различные уроки по риггингу. Построил персонаж по книге Алексея Сафонова "Создание 3D-персонажей в Maya" (книга хорошая, как раз для таких начинающих как я)). Пытаюсь одолеть Цыпцын С.-"Понимая Maya". Смотрю уроки от Digital Tutors, Lynda.com и т.п........
    Извините за "много текста"!) Перехожу к главному в этой теме:
    Прошло вроде не мало времени, но я так и не понял КАК ЖЕ ПРАВИЛЬНО ОРИЕНТИРОВАТЬ ОСИ СУСТАВОВ?
    Выкладываю свой "комикс", т.е. свои действия я зафиксировал в картинках-это вот всё то, как сейчас я понимаю как ориентировать всё таки оси джоинт..
    Не спорю, что это бредятина, но для меня это пока работает, так на данном этапе я это понимаю.
    Я ушёл в дебри и запутался в этом процессе, в голове каша, поэтому я создал эту тему:
    предлагаю делиться, если не жалко, не трудно своими познаниями, подсказками. Может быть здесь на форуме найдётся такой же "ЧайНик в квадрате" как и я, и тогда, может, мы вместе осилим этот сложный пугающий риггинг, дружно поддерживая друг друга..) или окончательно запутаемся окончательно)

    В общем КАК ЖЕ ПРАВИЛЬНО ОРИЕНТИРОВАТЬ ОСИ СУСТАВОВ?
     

    Вложения:

    • 3193728.jpg
      3193728.jpg
      Размер файла:
      1,4 МБ
      Просмотров:
      102
  6. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Многие профи говорят "правильно отредактировать ориентацию осей суставов-можно легко, всего за пару этапов". Хотелось бы верить и надеяться!) Но пока узнать "как?" так мне и не удалось, Пока это тягостный и пугающий процесс для меня. В хелпе очень скудная информация, в другой литературе тоже толком мало, чтобы "прозреть и понять".
    "смотрю в книгу-вижу фигу"-кто-то может упрекнёт. Я спорить не буду. Лучше бы так, значит скоро найду, пойму...))
    Почти опустив руки, наткнулся на интересный скрипт. Внутри всё возразило: я должен сам понять "что и к чему"! Пока без скриптов!...Но всё таки от "посмотреть как работает скрипт" я не отказался. Скрипт очень простой и сразу все проблемы с ориентациями осей отпали...(сразу возникает "но": если существуют такие скрипты в помощь, значит процесс "переориентации" не такой уж простой и не в два этапа!? не знаю..)
    Вот этот скрипт:
    // --------------------------------------------------------------------------
    // cometJointOrient.mel - MEL Script
    // --------------------------------------------------------------------------
    //
    // DESCRIPTION:
    // A nicer utility for setting rotation axis and aiming of joints
    // automatically.
    //
    // REQUIRES:
    // Nothing.
    //
    //
    // USAGE:
    // source "cometJointOrient.mel"; cometJointOrient();
    //
    // AUTHORS:
    // Michael B. Comet - comet@comet-cartoons.com
    // Copyright ©2004 Michael B. Comet - All Rights Reserved.
    //
    // VERSIONS:
    // 1.00 - Feb 21, 2004 - Initial Release.
    // 1.01 - Feb 21, 2004 - Added dot check for up vector so that it will
    // stop the up vector from flipping in cases where the bones go
    // up and then down.
    // 1.02 - Sep 17, 2004 - Added + and - tweak buttons, and right click on tweak.
    // 1.03 - April 10, 2005 - Fixed so only unparents transform/joint not shapes.
    //
    // --------------------------------------------------------------------------

    global string $cJO_version = "1.03" ;
    global string $cJO_date = "Apr 10, 2004" ;

    // --------------------------------------------------------------------------

    /*
    * cometJointOrient() - Main UI entry.
    */
    global proc cometJointOrient()
    {
    global string $cJO_version ;
    global string $cJO_date ;

    if (`window -ex cometJointOrientWin` != true)
    {
    window -w 310 -h 256 -t ("cometJointOrient - "+$cJO_version) -in "cometJointOrient" -s true -tb true cometJointOrientWin;

    formLayout mainForm ;

    separator -style "in" -h 3 sep0 ;

    button -l "Show Axis" -h 18 -al "center" -c ("toggle -state on -localAxis; ") -ann ("Show Local Axis") btnShow ;
    button -l "Hide Axis" -h 18 -al "center" -c ("toggle -state off -localAxis; ") -ann ("Hide Local Axis") btnHide ;

    radioButtonGrp -l "Aim Axis:" -nrb 3 -la3 "X" "Y" "Z" -sl 2 -cw4 80 40 40 40 rbgAim ;
    radioButtonGrp -l "Up Axis:" -nrb 3 -la3 "X" "Y" "Z" -sl 1 -cw4 80 40 40 40 rbgUp ;

    checkBox -l "Reverse" -v 0 cbRevAim ;
    checkBox -l "Reverse" -v 0 cbRevUp ;

    separator -style "in" -h 3 sep1 ;

    floatFieldGrp -nf 3 -label "World Up Dir:" -v1 1.0 -v2 0.0 -v3 0.0 -cw4 80 50 50 50 ffgUpDir ;
    button -l "X" -w 20 -c ("floatFieldGrp -e -v1 1.0 -v2 0.0 -v3 0.0 ffgUpDir; ") -ann ("Auto Set UpDir to X-Axis") btnX ;
    button -l "Y" -w 20 -c ("floatFieldGrp -e -v1 0.0 -v2 1.0 -v3 0.0 ffgUpDir; ") -ann ("Auto Set UpDir to Y-Axis") btnY ;
    button -l "Z" -w 20 -c ("floatFieldGrp -e -v1 0.0 -v2 0.0 -v3 1.0 ffgUpDir; ") -ann ("Auto Set UpDir to Z-Axis") btnZ ;

    checkBox -l "Auto-Guess Up Direction" -v 0 cbAutoDir ;

    button -l "Orient Joints" -al "center" -c ("cJo_OrientUI();") -ann ("Orient selected joints based on settings above.") btnOJ;


    separator -style "double" -h 7 sepBig ;

    floatFieldGrp -nf 3 -label "Tweak:" -v1 0.0 -v2 0.0 -v3 0.0 -cw4 80 50 50 50 ffgTweak ;
    button -l "ZERO" -w 40 -c ("floatFieldGrp -e -v1 0.0 -v2 0.0 -v3 0.0 ffgTweak; ") -ann ("Zero's tweak values.") btnZero ;

    popupMenu -p ffgTweak ;
    menuItem -l "X=1" -c ("floatFieldGrp -e -v1 1.0 ffgTweak ; ") ;
    menuItem -l "Y=1" -c ("floatFieldGrp -e -v2 1.0 ffgTweak ; ") ;
    menuItem -l "Z=1" -c ("floatFieldGrp -e -v3 1.0 ffgTweak ; ") ;
    menuItem -divider true ;
    menuItem -l "X=5" -c ("floatFieldGrp -e -v1 5.0 ffgTweak ; ") ;
    menuItem -l "Y=5" -c ("floatFieldGrp -e -v2 5.0 ffgTweak ; ") ;
    menuItem -l "Z=5" -c ("floatFieldGrp -e -v3 5.0 ffgTweak ; ") ;
    menuItem -divider true ;
    menuItem -l "X=10" -c ("floatFieldGrp -e -v1 10.0 ffgTweak ; ") ;
    menuItem -l "Y=10" -c ("floatFieldGrp -e -v2 10.0 ffgTweak ; ") ;
    menuItem -l "Z=10" -c ("floatFieldGrp -e -v3 10.0 ffgTweak ; ") ;


    button -l "Manual + Rot Tweak" -al "center" -c ("cJO_tweakUI(1.0);") -ann ("Manually rotates selected joints axis positive.") btnTweakP ;
    button -l "Manual - Rot Tweak" -al "center" -c ("cJO_tweakUI(-1.0);") -ann ("Manually rotates selected joints axis negative.") btnTweakN ;

    separator -style "in" -h 3 sep2 ;

    iconTextButton -style "textOnly" -l ("comet@comet-cartoons.com") -ann ("cometJointOrient - "+$cJO_version+" - "+$cJO_date+" Copyright ©2004 Michael B. Comet All Rights Reserved") -c ("showHelp -a \"http://www.comet-cartoons.com/toons/\"") -h 24 email ;

    formLayout -e
    -af sep0 "left" 0
    -af sep0 "right" 0
    -af sep0 "top" 0
    -an sep0 "bottom"

    -af btnShow "left" 0
    -ap btnShow "right" 0 50
    -ac btnShow "top" 0 sep0
    -an btnShow "bottom"

    -ap btnHide "left" 0 50
    -af btnHide "right" 0
    -ac btnHide "top" 0 sep0
    -an btnHide "bottom"


    -af rbgAim "left" 0
    -an rbgAim "right"
    -ac rbgAim "top" 0 btnShow
    -an rbgAim "bottom"

    -ac cbRevAim "left" 0 rbgAim
    -af cbRevAim "right" 0
    -ac cbRevAim "top" 0 btnShow
    -an cbRevAim "bottom"


    -af rbgUp "left" 0
    -an rbgUp "right"
    -ac rbgUp "top" 0 rbgAim
    -an rbgUp "bottom"

    -ac cbRevUp "left" 0 rbgUp
    -af cbRevUp "right" 0
    -ac cbRevUp "top" 0 rbgAim
    -an cbRevUp "bottom"

    -af sep1 "left" 0
    -af sep1 "right" 0
    -ac sep1 "top" 0 rbgUp
    -an sep1 "bottom"

    -af ffgUpDir "left" 0
    -an ffgUpDir "right"
    -ac ffgUpDir "top" 0 sep1
    -an ffgUpDir "bottom"

    -ac btnX "left" 2 ffgUpDir
    -an btnX "right"
    -ac btnX "top" 0 sep1
    -an btnX "bottom"

    -ac btnY "left" 2 btnX
    -an btnY "right"
    -ac btnY "top" 0 sep1
    -an btnY "bottom"

    -ac btnZ "left" 2 btnY
    -an btnZ "right"
    -ac btnZ "top" 0 sep1
    -an btnZ "bottom"

    -af cbAutoDir "left" 20
    -af cbAutoDir "right" 0
    -ac cbAutoDir "top" 0 ffgUpDir
    -an cbAutoDir "bottom"

    -af btnOJ "left" 5
    -af btnOJ "right" 5
    -ac btnOJ "top" 5 cbAutoDir
    -an btnOJ "bottom"

    -af sepBig "left" 0
    -af sepBig "right" 0
    -ac sepBig "top" 5 btnOJ
    -an sepBig "bottom"

    -af ffgTweak "left" 0
    -an ffgTweak "right"
    -ac ffgTweak "top" 5 sepBig
    -an ffgTweak "bottom"

    -ac btnZero "left" 2 ffgTweak
    -an btnZero "right"
    -ac btnZero "top" 5 sepBig
    -an btnZero "bottom"

    -af btnTweakP "left" 5
    -ap btnTweakP "right" 0 49
    -ac btnTweakP "top" 5 ffgTweak
    -an btnTweakP "bottom"

    -ap btnTweakN "left" 0 51
    -af btnTweakN "right" 5
    -ac btnTweakN "top" 5 ffgTweak
    -an btnTweakN "bottom"

    -af sep2 "left" 5
    -af sep2 "right" 5
    -ac sep2 "top" 5 btnTweakP
    -an sep2 "bottom"

    -af email "left" 0
    -af email "right" 0
    -ac email "top" 0 sep2
    -an email "bottom"

    mainForm ;


    showWindow cometJointOrientWin;
    }
    else // else just pop it up from being minimized again
    {
    showWindow cometJointOrientWin;
    }

    }


    // --------------------------------------------------------------------------

    /*
    * cJo_OrientUI() - UI wrapper for starting an orient
    */
    global proc cJo_OrientUI()
    {
    print ("// cometJointOrient\n");

    int $nAimAxis = `radioButtonGrp -q -sl rbgAim` ;
    int $nUpAxis = `radioButtonGrp -q -sl rbgUp` ;
    float $aimAxis[] = {0,0,0} ;
    float $upAxis[] = {0,0,0} ;

    float $revAim = 1.0 ;
    if (`checkBox -q -v cbRevAim`)
    $revAim = -1.0 ;

    float $revUp = 1.0 ;
    if (`checkBox -q -v cbRevUp`)
    $revUp = -1.0 ;

    if ($nAimAxis == $nUpAxis)
    warning -sl 0 ("The AIM and UP axis are the same! Orientaiton probably won't work!") ;

    $aimAxis[ ($nAimAxis-1) ] = $revAim ;
    $upAxis[ ($nUpAxis-1) ] = $revUp ;

    float $upDir[3] ;
    $upDir[0] = `floatFieldGrp -q -v1 ffgUpDir` ;
    $upDir[1] = `floatFieldGrp -q -v2 ffgUpDir` ;
    $upDir[2] = `floatFieldGrp -q -v3 ffgUpDir` ;

    int $doAuto = `checkBox -q -v cbAutoDir` ;

    string $joints[] = `ls -type "joint" -sl` ;

    // Now do it!
    cJo_Orient($joints, $aimAxis, $upAxis, $upDir, $doAuto) ;

    // End with same stuff selected!
    select -r $joints ;


    }


    // --------------------------------------------------------------------------

    /*
    * cJo_Orient() - The real worker orient proc.
    *
    * $joints is array of joints to orient
    * $aimAxis = is xyz array of what axis of joint does aim
    * $upAxis = is xyz array of what axis of joint does up
    * $upDir = what vector to use for up direction?
    * $doAuto = If possible will try to guess the up axis otherwise
    * it will use prev joint up axis or else world upDir.
    *
    */
    global proc cJo_Orient(string $joints[], float $aimAxis[], float $upAxis[],
    float $upDir[], int $doAuto)
    {

    int $nJnt = size($joints) ;
    int $i;

    vector $prevUp = <<0,0,0>>;

    // Now orient each joint
    for ($i=0; $i < $nJnt; ++$i)
    {

    // First we need to unparent everything and then store that,
    string $childs[] = `listRelatives -children -type "transform" -type "joint" $joints[$i]` ;
    if (size($childs) > 0)
    $childs = `parent -w $childs` ; // unparent and get NEW names in case they changed...

    // Find parent for later in case we need it.
    string $parents[] = `listRelatives -parent $joints[$i]` ;
    string $parent = $parents[0] ;


    // Now if we have a child joint...aim to that.
    string $aimTgt="" ;
    string $child ;
    for ($child in $childs)
    {
    if (nodeType($child) == "joint")
    {
    $aimTgt = $child ;
    break ;
    }
    }

    // print ("// DEBUG: JNT="+$joints[$i]+" Parent="+$parent+" AimTgt="+$aimTgt+" //\n") ;


    if ($aimTgt != "")
    {
    float $upVec[3] = {0,0,0} ;

    // First off...if $doAuto is on, we need to guess the cross axis dir.
    //
    if ($doAuto)
    {
    // Now since the first joint we want to match the second orientation
    // we kind of hack the things passed in if it is the first joint
    // ie: If the joint doesn't have a parent...OR if the parent it has
    // has the "same" position as itself...then we use the "next" joints
    // as the up cross calculations
    //
    float $posJ[3] = `xform -q -ws -rp $joints[$i]` ;
    float $posP[3] = $posJ ;
    if ($parent != "")
    $posP = `xform -q -ws -rp $parent` ;

    float $tol = 0.0001 ; // How close to we consider "same"?

    if ($parent == "" || (abs($posJ[0] - $posP[0]) <= $tol && abs($posJ[1] - $posP[1]) <= $tol && abs($posJ[2] - $posP[2]) <= $tol ))
    {
    string $aimChilds[] = `listRelatives -children $aimTgt` ;
    string $aimChild = "" ;
    string $child ;
    for ($child in $aimChilds)
    {
    if (nodeType($child) == "joint")
    {
    $aimChild = $child ;
    break ;
    }
    }
    $upVec = cJO_getCrossDir($joints[$i], $aimTgt, $aimChild) ;
    }
    else
    $upVec = cJO_getCrossDir($parent, $joints[$i], $aimTgt) ;
    }

    if (!$doAuto || ($upVec[0] == 0.0 && $upVec[1] == 0.0 && $upVec[2] == 0.0))
    $upVec = $upDir ; // or else use user set up Dir. if needed


    string $aCons[] = `aimConstraint
    -aim $aimAxis[0] $aimAxis[1] $aimAxis[2]
    -upVector $upAxis[0] $upAxis[1] $upAxis[2]
    -worldUpVector $upVec[0] $upVec[1] $upVec[2]
    -worldUpType "vector"
    -weight 1.0
    $aimTgt
    $joints[$i]` ;

    delete $aCons ;



    // Now compare the up we used to the prev one.
    vector $curUp = << $upVec[0], $upVec[1], $upVec[2] >> ;
    $curUp = unit($curUp) ;
    float $dot = $curUp * $prevUp ; // dot product for angle betwen...
    $prevUp = << $upVec[0], $upVec[1], $upVec[2] >> ; // store for later

    if ($i > 0 && $dot <= 0.0)
    {
    // Adjust the rotation axis 180 if it looks like we've flopped the wrong way!
    xform -r -os -ra ($aimAxis[0]*180.0) ($aimAxis[1]*180.0) ($aimAxis[2]*180.0) $joints[$i] ;
    $prevUp *= -1.0 ;
    }


    // And now finish clearing out joint axis...
    joint -e -zso $joints[$i] ;
    makeIdentity -apply true $joints[$i] ;


    }
    else if ($parent != "")
    {
    // Otherwise if there is no target, just dup orienation of parent...
    string $oCons[] = `orientConstraint
    -weight 1.0
    $parent
    $joints[$i]` ;

    delete $oCons ;

    // And now finish clearing out joint axis...
    joint -e -zso $joints[$i] ;
    makeIdentity -apply true $joints[$i] ;
    }

    // Now that we're done... reparent
    if (size($childs) > 0)
    parent $childs $joints[$i] ;
    }

    }

    // --------------------------------------------------------------------------

    /*
    * cJO_getCrossDir() - Given three nodes, this gets the cross product of
    * the directions from B->A and B->C.
    */
    global proc float[] cJO_getCrossDir(string $objA, string $objB, string $objC)
    {
    float $cross[3] = {0,0,0} ;

    if ($objA == "" || $objB == "" || $objC == "" ||
    objExists($objA) != true || objExists($objB) != true || objExists($objC) != true)
    return $cross ;

    float $posA[3] = `xform -q -ws -rp $objA` ;
    float $posB[3] = `xform -q -ws -rp $objB` ;
    float $posC[3] = `xform -q -ws -rp $objC` ;

    vector $v1 = << $posA[0]-$posB[0], $posA[1]-$posB[1], $posA[2]-$posB[2] >> ;
    vector $v2 = << $posC[0]-$posB[0], $posC[1]-$posB[1], $posC[2]-$posB[2] >> ;

    vector $vC = $v1 ^ $v2 ; // Do cross product!
    $vC = unit($vC) ; // normalize

    $cross[0] = $vC.x ;
    $cross[1] = $vC.y ;
    $cross[2] = $vC.z ;

    return $cross ;
    }

    // --------------------------------------------------------------------------



    /*
    * cJO_tweakUI() - UI wrapper for starting a joint tweak
    */
    global proc cJO_tweakUI(float $mult)
    {
    float $rot[3] ;
    $rot[0] = `floatFieldGrp -q -v1 ffgTweak` * $mult ;
    $rot[1] = `floatFieldGrp -q -v2 ffgTweak` * $mult ;
    $rot[2] = `floatFieldGrp -q -v3 ffgTweak` * $mult ;

    string $joints[] = `ls -type "joint" -sl` ;

    // Now do it!
    cJO_tweak($joints, $rot) ;

    // End with same stuff selected!
    select -r $joints ;

    }

    // --------------------------------------------------------------------------

    /*
    * cJO_tweak() - Tweaks the rotation of a joint the amount specified
    *
    * $joints is array of joints to orient
    * $rot = is xyz array of how much to rotate
    *
    */
    global proc cJO_tweak(string $joints[], float $rot[])
    {
    int $nJnt = size($joints) ;
    int $i;

    // Now tweak each joint
    for ($i=0; $i < $nJnt; ++$i)
    {
    // Adjust the rotation axis
    xform -r -os -ra $rot[0] $rot[1] $rot[2] $joints[$i] ;

    // And now finish clearing out joint axis...
    joint -e -zso $joints[$i] ;
    makeIdentity -apply true $joints[$i] ;
    }
    }

    // --------------------------------------------------------------------------
     

    Вложения:

    • 3193758.jpg
      3193758.jpg
      Размер файла:
      42,2 КБ
      Просмотров:
      82
  7. Владимир Забелин

    Владимир Забелин Активный участник

    С нами с:
    19.04.2012
    Сообщения:
    400
    Симпатии:
    12
    Баллы:
    17
    а что тут непонятного? в общем случае правильная ориентация костей означает очень простую вещь : первая ост - вдоль кости , то есть строго на следующий джоинт. вторая ось в плоскости, которую определяют текущий джоинт, предыдущий и последующий. ну а третья ось перпендикулярна этой плоскости. проблемы начинаются, когда джоинты лежат на одной прямой, или линия джоинтов меняет выпуклость. Причем в большом количествен случаев ориентация вообще не важна...
     
  8. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Спасибо, Владимир, за Ваш ответ!
    Вот здесь не понял ("Причем в большом количестве случаев ориентация вообще не важна..."). Дело в том, что везде где не читал, говорят, что для успешной анимации, для предсказуемого управление системой сетапа, нужно придерживаться упорядоченной ориентации осей джоинтов (например: если Х у нас продольное вращение, то Z и Y нужно назначить как оси "сгибания" и "разводки конечностей" в сторону соответственно..И если для ноги мы уже определили и со ориентировали, что Z ,например, у нас отвечает за плоскость сгибания, то руке мы уже не можем назначить для сгибания другую ось (не Z)). Потом, много раз слышал о условии обязательных нулевых значениях "Rotate"? иначе обратная кинематика будет себя вести не предсказуемо....
    Пожалуйста, если можно объясните "в чём соль", потому как в голове пока "каша"))
    P.S. Кстати, столкнулся с подобной проблемой ненулевых значениях "Rotate" в "Transform Attributes" тазобедренной кости после применения "Pole vector". В конце концов, получилось это исправить, но вот причину, а значит и логику, так и не понял...
     

    Вложения:

    • 3193873.jpg
      3193873.jpg
      Размер файла:
      213,5 КБ
      Просмотров:
      80
  9. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    вот переориентировал оси джоинтов (см. скрин):
    1.ось "Х" -вдоль кости, т.е. это "продольное вращение"
    2.ось "Z" -в плоскости, которую определяют текущий джоинт, предыдущий и последующий, т.е. "вращение для сгибания", в данном случае ноги.
    3.ось "Y" -перпендикулярна этой плоскости, т.е. "вращение для разведения конечности в стороны"

    я не допустил ошибки, всё верно понял/сделал?
     

    Вложения:

    • 3193978.jpg
      3193978.jpg
      Размер файла:
      24,2 КБ
      Просмотров:
      87
  10. Skif vip

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

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

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    спасибо
     
  12. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Создаю локатор для ступни, теперь нога у меня "держит землю", но после добавлений ограничения сгибания в "limit information"-"rotate", во время приседания нога проваливается.....
    Как это обойти? Или что нужно сделать?
    http://youtu.be/zQPMUw5srnk
     
  13. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    я правильно понимаю, что настройки limit information можно и нужно производить только перед тем как назначить ikhandle, pole vektor и т.п.?
     
  14. Владимир Забелин

    Владимир Забелин Активный участник

    С нами с:
    19.04.2012
    Сообщения:
    400
    Симпатии:
    12
    Баллы:
    17
    когда пытаешься сделать все сразу не читая документации, то бишь без понимания основ, а основываясь на мнении "профи", то в голове образуется изрядная каша. что мы собственно и наблюдаем. с чего вы решили, что без "правильной ориентации джоинтов" простая ик цепочка будет работать некорректно? и в чем именно будет заключаться эта некорректность? и насколько это все важно для ваших задач? осваивать любой предмет нужно постепенно, начиная с самых простых задач, иначе получается, обезьянка за пишущей машинкой: кто-то че-то сказал и давай все дружно фигачить по клавишам. а зачем, почему...
    то что вы сейчас делаете - это не изучение рига, это игра в обезьянку за пишущей машинкой. можно я не буду в этом больше участвовать?
     
  15. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Владимир, Вы правы! Не буду спорить... Но вот как и где на просторах интернета найти среди большого разнообразия информации ту систематичность, о которой Вы говорите?!..."..документация....понять основы" и т.п.. Поймите, Владимир, я любитель, и НЕ собираюсь серьёзно претендовать на профессию риггера или сетапера. Я увлечённый человек, которому хочется научится чему то новому.. "игра в обезьянку"?-да, Вам виднее. Помогаете, подсказываете-спасибо огромное! Но, а если не хотите "в этом больше участвовать"-я ж не заставляет Вас, Вы уж извините. Ещё раз прошу извинения за "игра в обезьянку" или если обидел)
    P.S.-Спасибо за ссылку. Мастеркласс "Риг с затеями и без"-было полезно и интересно! Спасибо!
     
  16. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    Продолжаю читать и мучить джоинты..) Радует, что пока не плюнул и не скачал авториг. Кто-то будет смеяться, но за пару месяцев строя только ноги и ковыряя оси, поле векторы.. узнал и научился тому, что раньше казалось полным ужасом!..)) Да, у меня пока с трудом "сетап коленок" получается, но раньше раздел "Риггинг" для меня вообще тёмной комнатой был..
     

    Вложения:

    • 3195493.jpg
      3195493.jpg
      Размер файла:
      26,4 КБ
      Просмотров:
      83
  17. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    "Pole vector" прибил вот таким способом (скрин: с помощью curve и кластеров констрейтил локатор к джоинту). Делал по уроку "Digital Tutors - Character Rigging for Production in Maya 2011". Но вот преимущества такого способа или особенности так и не понял. (понимаю английский "со словарём") В чём удобства? Локаторы как оставались на своём месте , так и остаются...
    [http://www.youtube.com/watch?v=DB3mSe0p1YE]
     
  18. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    вот, что пока нагородил...)
     

    Вложения:

    • 3195553.jpg
      3195553.jpg
      Размер файла:
      67,6 КБ
      Просмотров:
      87
  19. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    продолжаю дорабатывать...
     

    Вложения:

    • 3197003.jpg
      3197003.jpg
      Размер файла:
      45,9 КБ
      Просмотров:
      89
  20. Куприн

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

    С нами с:
    12.04.2009
    Сообщения:
    802
    Симпатии:
    2
    Баллы:
    20
    спину доделываю
     

    Вложения:

    • 3197233.jpg
      3197233.jpg
      Размер файла:
      78,7 КБ
      Просмотров:
      101
Модераторы: Dark™, Skif

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