Home Technical Talk

Maya questions

polycount lvl 666
Offline / Send Message
PolyHertz polycount lvl 666
I've been trying to use maya more lately, and have been running into some roadblocks, was hopeing maybe someone here could help clear up a few of the things I'm having issues with.

1. curve snaping only seems to work sporadicly when attempting to slide verts along an edge, is their some trick to getting it to work 100% of the time?

2. In max it's possible to make splines volumized (renderable), but in maya it seems you need to extrude a shape along the path to get the same effect. Is their a quick way to volumize them in maya as well that Im just not seeing?

3. Is their any plugins or functions similar to maxs shell/twist/bend modifiers? I can live without twist/bend probably, but shell I find endlessly useful.

4. While as the move manipulator seems to have many different options for its axis, the rotate and scale manipulators seem barren. Is their a way to use the move tools axis settings on the other manipulators?

5. I've run into this issue twice now where the universal manipulator will no longer appear. 'Show manipulator' doesn't fix it, and so far the only way I've found to fix it is to uninstal and reinstal maya. Is their something I might be breaking or is this a known bug? If so, other then reinstaling any fixes known?

6. The Bridge tool always appears to put a twist on faces when bridging to create a hole through the mesh. the twist option no matter how much modified does not change this.

Replies

  • ghib
    Hi PolyHertz, hope these help.

    1. The way I use curve snap is to select your vert then press and hold C then hover over the edge you want to snap it to and press MMB to slide. Works 100% time for me.

    2. Not that I know of.. without some scripts.

    3. For shell you can select all polys then use Extrude and move along the z-axis (blue) in local mode. For twist/bend etc you'll find them under the Animation menu Create Deformers > non-linear.

    4. Not sure exactly what options you're looking for but if you hold W,E or R and left mouse lick you'll get various options. Scale will show up more options if you're in sub-object mode (world, object, local etc)

    5. This is something that used to baffle me for AGES until relatively recently. You might have at some point put the manipulator into some mode that you cannot use on certain types of objects or component types. Meaning press and hold W and LMB to check if you're in 'normal' mode. Not sure if this will fix your problem but restarting the app will fix it. (rubbish fix I know)

    6. I just had a quick mess around with this and discovered that setting Bridge Offset to 1 fixes this problem (albeit on a pretty simple example)
  • MoP
    Offline / Send Message
    MoP polycounter lvl 18
    1. Check what ghib said, I never use snap to curve so I don't really know.

    2. This is something that really annoys me about Maya, coming from Max. I need to make two objects for every "solid" curve I want - one for the curve spline, one for the shape to loft. I just want to click the "renderable" box! I might see if I can write a simple script for this functionality.

    3. You will not find anything as powerful as the Shell modifier in Maya. The closest you will come is what ghib said, an Extrude set to all faces. However if you just do a standard extrude it will not even be close to Max's Shell, since any modifications you do afterward will include the extruded polygons.
    I have had some luck using the "polyDuplicateAndConnect" MEL command, to create an instance of the Shape below the same Transform node, then setting the polyExtrude node to work on shape.f
    [*] (different to all faces, since this includes all faces you may end up adding later, rather than just all the current faces which are usually represented as shape.f[0:9] for ten consecutive faces). Then it kinda works more like Max's Shell, although you still don't get outline extrude curve control or anything. There aren't any scripts for this either, I've looked.
    You will have to suffer some pain in Maya for a while if you were very reliant on Shell in Max.

    4. Again you're gonna feel pain on this coming from Max, where EVERY mode (move, rotate, scale) has the same set of coordinate spaces to choose from. Maya's Move has the most options, Rotate has mostly the same, but Scale is very limited in my experience. You're probably going to have to rely on using Insert a lot more to move around the pivot point manually, and get used to finding different approaches to scaling/rotating things.

    5. ghib seems to have this covered, I've never run into it.

    6. As ghib said, you should be able to adjust the Bridge Offset value in the node properties after doing a polyBridge command. For some reason it greys out the box (usually Maya-speak for "locked attribute") but you can still change it by typing a new value in, or sliding with MMB. Max's Bridge command usually seems to detect the best offset to start with, but Maya's bridge seems to ALWAYS need tweaking, it has never got the right offset value for me first time. You can change it manually though, for sure.

    Hope that helps!
  • Toast
    Offline / Send Message
    Toast polycounter lvl 11
    2) PaintFX.

    Paint Effects > Curve Utilities > Attach Brush To Curves (make sure you are using the default brush). Open up the options box and you have a massive amount of options to tune.

    If you're rendering with mental ray, just covert to polys and keep history.

    5) Just map the Universal Manipulator tool to a hotkey, mines at Ctrl + T.
  • PolyHertz
    Offline / Send Message
    PolyHertz polycount lvl 666
    Thanks ghib and mop, thanks that helps alot :)
    Toast: the Universal manipulator has ctrl+t as its default hotkey, but using that doesn't really solve the issue.

    for question 4 what I really want to figure out how to do is make it so that the axis of rotate/scale is parallel to the selection, like how move is (and rotate isn't) here:
    Untitled-2.jpg

    It also seems like I might have to learn some mel to get what I want out of Maya, and am wondering if their was any integrated script editors with syntax highlighting (ex: MEL studio pro) that are available for current version of Maya?
  • Funky Bunnies
    Offline / Send Message
    Funky Bunnies polycounter lvl 17
    for that last one, you can use the Move Component tool - which I think is now in Edit Mesh->Transform Component

    as for MEL, I sure wish they'd recompile Mel Studio for Maya :( I tend to just use Maya 7 for all my scripting for that reason. There is a thing called Maxya, the learning edition is free, but I haven't used it.

    There are always external editors that are easy to get highlighting in too, though. Like Context
  • benclark
    for question 4 if you select the edge and use Edit Mesh > Transform Component, then click on the blue ring it will give you better rotation rotation handles to work with

    edit - Doh, beaten to it!
  • MoP
    Offline / Send Message
    MoP polycounter lvl 18
    I use Notepad++ for more complex scripts, it doesn't have a MEL syntax highlighter but TCL is close enough to work. Context looks pretty good too, I keep meaning to give it a try.

    I still can't believe how horribly stunted and rudimentary Maya's built-in script editor is, considering how much reliance the majority of Maya users place on MEL. It's like giving someone a car with a bunch of obscure old levers and pulleys instead of a steering wheel.
  • Toast
  • MoP
    Offline / Send Message
    MoP polycounter lvl 18
    Ah nice, cheers!

    Edit: Downloaded it, and gah, whoever wrote that has weird colour choices! I'm probably going to end up rolling my own definition now that I've seen how easy it is...
  • claydough
    Offline / Send Message
    claydough polycounter lvl 10
    been meaning to clean a multi pipe for orientation fer years, however all mah macros werk fine and keep me lazy.

    till that day...
    hope dis helps:

    cly_oriental.mel previews ( ps. use freeze transform or world space for default orientation reset )






    //for a single edge selection whose orientation iz desired
    global proc cly_orientalEdge
    {
    string $init_edge[] = ` ls -sl -fl`; //get edge
    string $edge_Selections[] = `filterExpand -sm 32 -ex 1 $init_edge` ; //check for desired assumption
    if (`size $edge_Selections` > 1 )
    error " only one edge can be used to designate orientation ";
    if (`size $edge_Selections` < 1)
    error " one edge must be selected whose direction will be used to orient the transformation axis ";

    string $edge_shape[] = `ls -sl -o`; // get shape
    string $edge_tr[] = `filterExpand -sm 12 -expand true $edge_shape`; // get object to parent to reference null
    string $edge_parent[] = `listRelatives -allParents $edge_tr`; //get parent now to re-establish parent later
    int $parntCheck = 0;
    if (`size $edge_parent` )
    $parntCheck = 1;
    string $toVtx[] = `polyListComponentConversion -fe -tv $init_edge`;
    string $vtxList[] = `filterExpand -sm 31 -expand 1 $toVtx`;
    float $locator_position1[] = `xform -q -ws -t $vtxList[0]`;
    float $locator_position2[] = `xform -q -ws -t $vtxList[1]`;
    spaceLocator -p 0 0 0 -n cly_delete1; // zero position
    spaceLocator -p 0 0 0 -n cly_delete2; // " "
    xform -ws -t $locator_position1[0] $locator_position1[1] $locator_position1[2] cly_delete1;
    xform -ws -t $locator_position2[0] $locator_position2[1] $locator_position2[2] cly_delete2;
    aimConstraint -offset 0 0 0 -weight 1 -aimVector 1 0 0 -upVector 0 1 0 -worldUpType "vector" -worldUpVector 0 1 0 cly_delete1 cly_delete2;
    // force axis change
    parent $edge_tr[0] cly_delete2;
    makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $edge_tr[0];
    if ( $parntCheck == 1 )
    parent $edge_tr[0] $edge_parent;
    else
    parent -w $edge_tr[0];

    delete cly_delete1 cly_delete2;
    select $init_edge;
    }


















    // for a closed face ROW LOOP selection whose orientation is desired ( nice for limbs )



    global proc cly_orientalFaceRow()
    {
    // git dem selections and parent
    string $edge_shape[] = `ls -sl -o`; // get shape
    string $edge_tr[] = `filterExpand -sm 12 -expand true $edge_shape`; // get object to parent to reference null
    string $edge_parent[] = `listRelatives -allParents $edge_tr`; //get parent now to re-establish parent later
    int $parntCheck = 0;
    if (`size $edge_parent` )
    $parntCheck = 1;
    string $init_selection[] = `ls -sl -fl`; // closed face row loop error message if this size isn't greater than 2 ( lamina or higher? )
    // selection lists end
    // determine the components making up the cylinders caps
    string $PLisBO[] = `polyListComponentConversion -ff -te -bo $init_selection`;
    string $PListBoExp[] = `filterExpand -sm 32 -expand 1 $PLisBO`; // border edges

    string $beginvL[] = `polyListComponentConversion -fe -tv $PListBoExp[0]`; // beginning with the edge $PListBoExp[0]...
    string $beginV[] = `filterExpand -sm 31 -expand 1 $beginvL`; // we get the beginning vert associated
    string $tailE = $PListBoExp[0];
    string $tailV = $beginV[0] ;

    string $vrtBuild[] ={};
    $vrtBuild[0] = $beginV[0];

    string $edgeBuild[] = {}; // will be the build of edges determining the origin cap
    $edgeBuild[0] = $tailE;
    int $endIt = 0; // loop switch
    int $stopit = 0;
    while ( $endIt == 0 ) {
    string $lisE[] = `polyListComponentConversion -fv -te $tailV`;
    string $vrtEW[] = `filterExpand -sm 32 -expand 1 $lisE`; // vert`s edge wings $vrtEW
    for ( $e in $vrtEW ) {
    int $beginEdgeCheck = stringArrayContains( $e, $PListBoExp );
    int $eContainsCheck = stringArrayContains( $e, $edgeBuild );
    if ( !$eContainsCheck && $beginEdgeCheck) {

    string $nextvL[] = `polyListComponentConversion -fe -tv $e `; //build next vert
    string $nextV[] = `filterExpand -sm 31 -expand 1 $nextvL`; //

    $tailE = $e; // travel edgeloop
    int $s = `size( $edgeBuild )`;
    $edgeBuild[$s] = $e; // build loop array

    for ( $v in $nextV ) {
    int $vrtContainsCheck = stringArrayContains( $v, $vrtBuild );
    if ( !$vrtContainsCheck) {
    int $s = `size( $vrtBuild )`;
    $vrtBuild [$s] = $v;
    $tailV = $v; // designate the edge's vert to determine next edge wings
    }
    }
    }
    else if ( $stopit > `size( $PLisBO )`)
    $endIt = 1;
    }
    $stopit++;
    }
    // now the leftover Border edges will be the tail cap
    string $otherEdgeBuild[] = {}; // closed face row loop error message if this size doesn't grow ( must be a cylinder not open or cone )
    int $eCheck;
    for ( $p in $PListBoExp ) {
    $eCheck = stringArrayCount( $p, $edgeBuild );
    if ( !$eCheck ){
    int $s = `size( $otherEdgeBuild )`;
    $otherEdgeBuild[$s] = $p;
    }
    }
    string $PListTarget[] = `polyListComponentConversion -fe -tv $otherEdgeBuild `; //build next vert
    string $targetVrts[] = `filterExpand -sm 31 -expand 1 $PListTarget`; //
    // Cap builds end


    // addbob to git the positions
    //to do: if $targetVrts size is < 1 then... error " A closed face row loop was not presented";
    // to do: or average the open face collection's face normals and serve that instead?
    float $addbob[] = `xform -q -ws -t $targetVrts[0]`; // *addbob the tail_________
    for ( $b in $targetVrts ) {
    if ( $b != $targetVrts[0] ) {
    float $bobAdd[] = `xform -q -ws -t $b`;
    $addbob[0] = ( $bobAdd[0] + $addbob[0] );
    $addbob[1] = ( $bobAdd[1] + $addbob[1] ); //loop add to addbob
    $addbob[2] = ( $bobAdd[2] + $addbob[2] );
    }
    }
    float $clyTx = $addbob[0] / size( $targetVrts);
    float $clyTy = $addbob[1] / size( $targetVrts); // divide added bob by the size of the array to get an average tail position
    float $clyTz = $addbob[2] / size( $targetVrts); // to do: change variable name to locationPosition2

    $addbob = `xform -q -ws -t $vrtBuild[0]`; // *now addbob the head______________
    for ( $b in $vrtBuild ) {
    if ( $b != $vrtBuild[0] ) {
    float $bobAdd[] = `xform -q -ws -t $b`;
    $addbob[0] = ( $bobAdd[0] + $addbob[0] );
    $addbob[1] = ( $bobAdd[1] + $addbob[1] ); //loop add to addbob
    $addbob[2] = ( $bobAdd[2] + $addbob[2] );
    }
    }
    float $clyx = $addbob[0] / size( $vrtBuild);
    float $clyy = $addbob[1] / size( $vrtBuild); // divide added bob by the size of the array to get an average head position
    float $clyz = $addbob[2] / size( $vrtBuild); // to do: change variable name to locationPosition1
    // addbob done ( discrete procedure? )

    // constrain n switch
    spaceLocator -p 0 0 0 -n cly_delete1;
    xform -ws -t $clyTx $clyTy $clyTz cly_delete1;
    spaceLocator -p 0 0 0 -n cly_delete2;
    xform -ws -t $clyx $clyy $clyz cly_delete2;

    aimConstraint -offset 0 0 0 -weight 1 -aimVector 1 0 0 -upVector 0 1 0 -worldUpType "vector" -worldUpVector 0 1 0 cly_delete1 cly_delete2; // "aim" the locators will get the new orientation

    // force axis change
    parent $edge_tr[0] cly_delete2;
    //makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $edge_tr[0]; // to do: deleteMe after debug
    makeIdentity -apply true -r 1 $edge_tr[0];
    if ( $parntCheck == 1 )
    parent $edge_tr[0] $edge_parent;
    else
    parent -w $edge_tr[0];
    delete cly_delete1 cly_delete2;
    select $init_selection;
    // constrain n switch end
    }
    // End face row loop pipeline

  • MoP
    Offline / Send Message
    MoP polycounter lvl 18
    I love how your code comments are written the same as you type posts :D

    Thanks for the scripts, anyway - the loop align one sounds pretty useful, I was meaning to write something like that myself!
  • claydough
    Offline / Send Message
    claydough polycounter lvl 10
    PolyHertz wrote: »

    It also seems like I might have to learn some mel to get what I want out of Maya, and am wondering if their was any integrated script editors with syntax highlighting (ex: MEL studio pro) that are available for current version of Maya?



    use mapy and any editor ( I prefer textpad )

    http://rodmena.com/mapy/

    http://www.highend3d.com/downloads/tools/syntax_scripting/mapy-5054.html
  • claydough
    Offline / Send Message
    claydough polycounter lvl 10
    MoP wrote: »
    I love how your code comments are written the same as you type posts :D

    Thanks for the scripts, anyway - the loop align one sounds pretty useful, I was meaning to write something like that myself!


    wow thats tru ly embarassing... Oh those dirty comments!... next time I swear i'll wash them
  • MoP
    Offline / Send Message
    MoP polycounter lvl 18
    Hey, at least you comment stuff. I've seen some really crazy long scripts with no comments in sight, must be hell to come back to them later if they need changing. I always comment at least a few parts just to make it very clear which sections are for what.
    I've seen some crazy stuff where the comments are longer than the actual code, and basically describe something you can read by looking at the code, so pointless :)
  • breakneck
    Offline / Send Message
    breakneck polycounter lvl 13
    Transform Component .. .thanks guys!
  • claydough
    Offline / Send Message
    claydough polycounter lvl 10
    breakneck wrote: »
    Transform Component .. .thanks guys!


    unless u r only transforming one component at a time...
    "transform component" only aligns to 1 axis predictably.
    ( and is creating history every time u use it. )

    orientation for multi selection pipeline:

    from a selection of components ( a face row loop fer example ) whose axis is obviously "not aligned"...
    Untitled-10006.jpg


    press a make cool button to align to the average orientation of multiple components ( the make cool button provided above, fer instance :poly124:)...
    Untitled-10007.jpg


    in the tools object space make predictable transformations aligned to the component "Area"...
    Untitled-10008.jpg

    wash, rinse, repeat...
    freeze transform to reset or world space to bypass.
  • claydough
    Offline / Send Message
    claydough polycounter lvl 10
    PolyHertz wrote: »
    for question 4 what I really want to figure out how to do is make it so that the axis of rotate/scale is parallel to the selection, like how move is (and rotate isn't) here:
    Untitled-2.jpg

    Actually.. in yer move tool example only the normal direction ( x axis in dis case ) is aligned to the component selection.


    alignment for move and rotate from a single edge... ( 1rst make cool button above )
    Untitled-1.gif
Sign In or Register to comment.