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
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)
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!
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.
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:
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?
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
edit - Doh, beaten to it!
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.
http://highendnet.com/downloads/tools/syntax_scripting/MEL-language-definition-for-Notepad-5275.html
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...
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
{
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;
}
{
// 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
Thanks for the scripts, anyway - the loop align one sounds pretty useful, I was meaning to write something like that myself!
use mapy and any editor ( I prefer textpad )
http://rodmena.com/mapy/
http://www.highend3d.com/downloads/tools/syntax_scripting/mapy-5054.html
wow thats tru ly embarassing... Oh those dirty comments!... next time I swear i'll wash them
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
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"...
press a make cool button to align to the average orientation of multiple components ( the make cool button provided above, fer instance :poly124:)...
in the tools object space make predictable transformations aligned to the component "Area"...
wash, rinse, repeat...
freeze transform to reset or world space to bypass.
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 )