[Maya-Python] Re: aniMeta - simple rigging tools
Hi Marcus, saw you ragdoll stuff, pure awesomeness! Regarding your questions, HumanIK is IMHO only good for retargeting animation(mocap) data in Maya. It is integrated in aniMeta by creating a hik character along with the actual rig and than there is an extra group with a pairBlend on each relevant control so one can dial in or out the hik effect ( "mocap" attribute on each control ). This allows one to animate/tweak the mocap data, ie for foot locking. I have not implemented a baking step, yet, I guess that depends if it gets becomes a priority for some reason, so far I had exported the animation then directly to game engines, mostly UE. Your question regarding a comparison to other solutions is very interesting, as it touches the design choices made. There are already a few options for auto-rigging out there, why bother putting out another one? First, the key idea behind aniMeta is simplicity with having novice users in mind. In my experience it can be already a challenge for users to install a script/plug-in. My idea was to have everything needed in a compact format with no dependencies/build/platform/installation issues, that is way I made the choice that aniMeta needs to be a single text file that can be started from the plug-in manager. Second, regarding features, the biped template would probably be considered basic when compared to other options out there, especially mGear. but that also makes it fast and has only what I consider the most important features to get some decent game animation loops. It is also vanilla Maya, so a rig created with aniMeta can be opened on another machine that does not have the plug-in installed. That is also a difference to mGear, which uses custom nodes. So IMHO mGear is definitely the choice if you need to customize stuff and want advanced features, aniMeta is more of a light-weight but fast solution, but offers some neat features that maya make it interesting for character TDs. For example. there is a tool to export/import hierarchies(json), there is skinning IO(json) and a procedural build system, which I used last year to build a couple of mGear characters with. So it complements Maya where I see some Maya`s rigging features lack and aniMeta can easily combined with other rigging tools and solutions out there. Some students told me that the smooth weights tool alone already makes it worth having around. I know there isn`t any info about usage of aniMeta yet. But I am in the process of putting info stuff together so people can get a more specific idea of what it is and how to use it. But so far thanks for your interest! : ) Marcus Ottosson schrieb am Dienstag, 11. Januar 2022 um 16:24:07 UTC+1: > Very exciting. :) I'm familiar with your work on Character Modular System, > years ago from Suntoucher Labs. That stuff was next-gen. Keen to dive into > this. > > One question comes to mind from your feature summary above, what are your > thoughts on HumanIK? Is it intended for use by animators, or is it an > integration kind of thing? Like for motion capture, Motion Builder or > Unreal/Unity? > > Also what are your thoughts on other auto riggers out there, in terms of > comparison. When should (or shouldn't) one choose to look at aniMeta over > anything else? Of particular interest to me personally is a comparison with > mGear. > > On Tuesday, 11 January 2022 at 15:17:25 UTC loopy@gmail.com wrote: > >> >> Howdy, I created this auto-riggerfor my students that has features that I >> find vanilla maya lacks and published it on github as open-source. It is >> easy to install, it is just one py file that can be started via the plug-in >> manager. I thought it may be interesting to some of you, so here you go: >> https://github.com/janberger/aniMeta >> >> Here are some features: >> - Biped template ( Unity and Unreal compatible ) >> - HumanIK inegration >> - Skinning IO >> - Very nice Smooth Weights Tool ; ) >> - Picker UI >> - Rig, Pose, Animation IO >> - Transform tools ( mirroring, matching et al ) >> >> Overall the rigging features may seem limited for the Biped, because they >> are ; ) but keep in mind it is for students, especially game design >> students. For more advanced stuff. there is a procedural build system for a >> data-cantric workflow integrated, but I guess I need to write some >> documentation before anybody but me can use it. >> >> Please let me know if you have any questions! >> Jan Berger >> > -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/51610d0e-f0f8-485f-bad2-dd1d51d949afn%40googlegroups.com.
[Maya-Python] aniMeta - simple rigging tools
Howdy, I created this auto-riggerfor my students that has features that I find vanilla maya lacks and published it on github as open-source. It is easy to install, it is just one py file that can be started via the plug-in manager. I thought it may be interesting to some of you, so here you go: https://github.com/janberger/aniMeta Here are some features: - Biped template ( Unity and Unreal compatible ) - HumanIK inegration - Skinning IO - Very nice Smooth Weights Tool ; ) - Picker UI - Rig, Pose, Animation IO - Transform tools ( mirroring, matching et al ) Overall the rigging features may seem limited for the Biped, because they are ; ) but keep in mind it is for students, especially game design students. For more advanced stuff. there is a procedural build system for a data-cantric workflow integrated, but I guess I need to write some documentation before anybody but me can use it. Please let me know if you have any questions! Jan Berger -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/be5f17f9-1806-48a5-96dc-7569e7a41859n%40googlegroups.com.
Re: [Maya-Python] Re: addAttributeChangedCallback within deformer?
I second Chad Vernon`s comment and suggest using the setDependentsDirty method for this purpose. At 03:20 04.09.2011, you wrote: Try using myNode.thisMObject() instead of OpenMaya.MObject(), thus removing the need to have a myMojbect at all Also, the callback function needs to have and only have the arguments found in MNodeMessage::MAttr2PlugFunction. If *args isn't that, then it isn't going to work... On Sep 3, 5:10 pm, johnvdz john.vanderz...@gmail.com wrote: thanks guys. this is basically what i have. class myNode(OpenMayaMPx.MPxDeformerNode ): myMobject=OpenMaya.MObject() def __init__(self): OpenMayaMPx.MPxDeformerNode.__init__( self ) def postConstructor(self): attrChangedCBId=OpenMaya.MNodeMessage.addAttributeChangedCallback( myNode.myMobject, myNode.attrChangedCallback, self) def attrChangedCallback(*args): print 'this node callback is working' however i generally get a # RuntimeError: (kInvalidParameter): Unexpected Internal Failure // this is in the post constructor. not sure if i have implemented it wrong john On 09/04/2011 05:44 AM, Chad Vernon wrote: You can also use setDependentsDirty to check when things change. On Sat, Sep 3, 2011 at 12:33 PM, notanymike notanym...@gmail.com mailto:notanym...@gmail.com wrote: In c++ I usually install it in MPxNode's postConstructor method and remove it in it's ~MPxNode method However I don't know what the ~ equivalent to Python is... On Sep 3, 7:49 am, johnvdz john.vanderz...@gmail.com mailto:john.vanderz...@gmail.com wrote: hi all, i'm really scratching my head here. anyone know of an example out there for attributeCallbacks (MNodeMessage.addAttributeChangedCallback) within a deformer or mpxnode. not sure if i should be putting this in the __init__ func or in its own custom constructor. I'm not really sure about what its passing how to deal with what it passes so any examples would be great. Google search doesn't bring up much python stuff. i need to be able to pass some message to update for the node to recalculate an array of values. thanks in advance john -- view archives:http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe -- view archives:http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe Jan Berger j...@janberger.de :: www.janberger.de -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
Re: [Maya-Python] Re: environment for API calls ?
A short answer would be yes, you can do it and it gives a lt of possibilities, but if you are talking abou a script in the context of a bunch of commands being executed one after another, you should realize that with calling the API you may run into undo/redo issues. I have done it in production but only to do really opportunistic stuff, like copying mesh data around without creating tweaks etc. and where creating a scripted or not plug-in would have caused too much overhead. But I really like this combo of API and Python and can only encouraged to go down the path of Dark Magic Power Moves as I call it ; ) At 18:56 02.09.2011, you wrote: More precisely, if there is a boundary between python scripting and API calls, how is it formalized ? Thanks Adam On 2 sep, 18:52, wannAPI urbnc...@hotmail.com wrote: This is a very basic question: Is it possible to make API calls from the command line, or should they in general be considered apart from python scripts ? Aren't both of the same nature ? This might sound odd but that's one of the conceptual point I'm missing personally. -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe Jan Berger j...@janberger.de :: www.janberger.de -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
Re: [Maya-Python] issues with mPlug
hard to tell from the info provided what might be the cause, especially if it seems to work in other maya versions. Are array attributes or arrays involved? A wrong index can easily crap out maya, but if it works in other versions... At 16:09 23.08.2011, you wrote: Just out of curiosity has anyone encountered issues using MPLug one of our programmers is having an issue with a script that works fine in maya on windows 2011, and 2012 and linux 2011, but not in linux maya 2012. ontop of that he's not quite able to isolate the issue down to the function call. he made a test script out of the same code he's using, but it works fine ( go figure) . however in the much larger script the exact same code totally crashes maya out. i still have my doubts, but I thought I'd throw it out there to see if anyone else has run into anything similar. thanks -=s -- mailto:stephenkm...@gmail.comstephenkm...@gmail.com http://smannimation.blogspot.com/ http://nymayausersgroup.blogspot.com/http://nymayausersgroup.blogspot.com/ http://smann3d.blogspot.com/ -- view archives: http://groups.google.com/group/python_inside_mayahttp://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribehttp://groups.google.com/group/python_inside_maya/subscribe Jan Berger j...@janberger.de :: www.janberger.de -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
Re: [Maya-Python] custom constraint
Didnt they introduce a MPXConstraint class at some point for custom constraints to get this behaviour? At 21:29 20.08.2011, you wrote: I`m working on custom constraint and wonder how Maya does the connections to translate or rotate attribute, so they can be still changed. I will explain it more. If you make Maya constraint, you can still move constrained object around, even if there are connections. Actually Maya keyframes work the same way, you couldn`t animate really if once keyframe is connected object`s attribute values couldn`t change. So I wonder if this is internal way of plug evaluation or I need specific type of attribute (constraintTranslate seems to be simple double3 type). Does anyone know how this works? thanks. -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe Jan Berger j...@janberger.de :: www.janberger.de -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
Re: [Maya-Python] Turning off orient joint in the move options?
jointCtx command maybe? At 06:14 16.08.2011, you wrote: Sent this already, but I never saw it come through... I've been digging for a global var to turn off the orient joint move option (turned on by default in Maya 2012), but I have not managed to find one. I know this is not directly related to Python but I wanted to ping this to all the expertise in here. Anyone know how to set that option to off (through code)? Thanks / Christian -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe Jan Berger j...@janberger.de :: www.janberger.de -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe
Re: [Maya-Python] Re: Adding up child rotations
The example in the blog just spits out what has been put into the TransformationMatrix. The question is whether when you add a rotation this will be kept track of as well, right? If I were you I would take the code from the blog and add some rotation either with rotateBy or addRotation and then see what it spits out. Sorry I can not give you direct answers and/or write code ... At 10:34 AM 3/21/2011, you wrote: My current mel script that I'd like to turn into a scripted plugin: for ($obj in $hir){ string $type = `nodeType $obj`; if (`gmatch joint $type`){ float $jo[] ={}; $jo[0] = `getAttr ($obj + .jointOrientX)`; $jo[1] = `getAttr ($obj + .jointOrientY)`; $jo[2] = `getAttr ($obj + .jointOrientZ)`; rotate -r -os $jo[0] $jo[1] $jo[2] c; } float $rot[] = `xform -q -os -ro $obj`; rotate -r -os $rot[0] $rot[1] $rot[2] $target; } By classic way do you mean using the MMatrix class? Because 'AK Eric' says in the above mentioned description that the MTransformationMatrix [class] will keep track of rotations past 360 degrees rotation order of the node, while MMatrix objects will not. It makes sense: A matrix itself stores orientations as vectors, which have no concept how how far they’ve been ‘rotated’, so the MMatrix object doesn’t track this data. But behind the scenes, the MTransformationMatrix does track this info... http://www.akeric.com/blog/?p=1067 The whole point of the plugin I want to create is to add up how many times the source nodes have spun and incrementaly add the rotations together and output it on to one node. It sounds like MTransformationMatrix::rotateBy would allow me to do this? http://download.autodesk.com/us/maya/2010help/api/class_m_transformation_matrix.html#554b247da58575f45b45446e04bb1afa Thanks! On Mar 21, 6:25 pm, j...@janberger.de j...@janberger.de wrote: You can match transformations with different rotation orders, because internally the rotation order is irrelevant, it is only used when calculating the input and the output ( given it is rotation ). Internally the 4x4 matrix is just a bunch of vectors, that dont know anything about rotation orders and how many times they spun around. So I am not sure if the classic way will get you what you are looking for. t nojun...@gmail.com hat am 21. März 2011 um 03:04 geschrieben: OK! Due to further research, it seems that matching rotations of different rotation orders is a mathmatical imposibility; http://en.wikipedia.org/wiki/Rotation_(mathematics) So, the question now is; What would be the scripted plugin code to do 'relative' additive rotations on one transform from the rotation values of nodes in a hierarchy? I'd like to use this class that supports rotations past 360 degrees using MTransformationMatrix::rotateBy http://download.autodesk.com/us/maya/2010help/api/class_m_transformat... Thanks! -- http://groups.google.com/group/python_inside_maya- Hide quoted text - - Show quoted text - -- http://groups.google.com/group/python_inside_maya Jan Berger j...@janberger.de :: www.janberger.de -- http://groups.google.com/group/python_inside_maya
Re: [Maya-Python] Re: object matrix
Have you tried using MScriptUtil.http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.html#891ecce0036c4ca210c39b27b1ead805asDouble3Ptr ? From the docs: Utility class for working with pointers and references. Utility class for working with pointers to basic types such as int, float and arrays of these types. Class is more applicable for script programming rather than C++. C++ pointers and references have no equivalent in script so this class provides utility methods for working with these type of parameters and return values. References are treated as pointers in script. This class allows creating data and then acquiring a pointer to the data so that information can be passed to class methods requiring references. Common scenarios: * A reference to an integer is required for a parameter: create the http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.htmlMScriptUtil object with the integer create() method, acquire a pointer using http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.html#d9ea6a06354c1e489730649a2d9bf1edasIntPtr(), pass that pointer to the method requiring the reference, create another http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.htmlMScriptUtil object using the int pointer that was returned, query the integer return value using http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.html#e42e1236dd42fccf9f98516deebcbe24asInt(). * A pointer to a list of floats are required for a parameter: create the http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.htmlMScriptUtil object with createFromList(), call asFloatPointer() and pass that to the method. * Several static methods are available for converting python lists to matrices and integer/float arrays. This class is cumbersome to use but it provides a way of building parameters and accessing return values for methods which would normally not be scriptable. At 05:44 AM 1/22/2011, you wrote: hi, i would love to get the worldspace scales but can get the getScale arguments right. What did you use? I end up with tMatrix.getScale(ptr, om.MSpace.kWorld) # Error: line 1: in method 'MTransformationMatrix_getScale', argument 2 of type 'double [3]' # Traceback (most recent call last): # File maya console, line 1, in module # TypeError: in method 'MTransformationMatrix_getScale', argument 2 of type 'double [3]' # Best Regards, katrin -- NEU: FreePhone - kostenlos mobil telefonieren und surfen! Jetzt informieren: http://www.gmx.net/de/go/freephone -- http://groups.google.com/group/python_inside_maya Jan Berger j...@janberger.de :: www.janberger.de -- http://groups.google.com/group/python_inside_maya
Re: [Maya-Python] Re: object matrix
If you have the worldMatrix the scale is in matrix[0][0] matrix[1][1] and matrix[2][2] At 01:17 PM 1/22/2011, you wrote: hi, yes, i did as described here http://groups.google.com/group/python_inside_maya/browse_thread/thread/1b0eae1c73c93042/ebbf7af9b00a26e4?hl=deq=#ebbf7af9b00a26e4 but couls figure out th emissing argument... I only need worldspace scale from marix, maybe there is an easyer way after all? Thanks, katrin Original-Nachricht Datum: Sat, 22 Jan 2011 12:08:16 +0100 Von: Jan Berger j...@janberger.de An: python_inside_maya@googlegroups.com Betreff: Re: [Maya-Python] Re: object matrix Have you tried using MScriptUtil.http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.html#891ecce0036c4ca210c39b27b1ead805asDouble3Ptr ? From the docs: Utility class for working with pointers and references. Utility class for working with pointers to basic types such as int, float and arrays of these types. Class is more applicable for script programming rather than C++. C++ pointers and references have no equivalent in script so this class provides utility methods for working with these type of parameters and return values. References are treated as pointers in script. This class allows creating data and then acquiring a pointer to the data so that information can be passed to class methods requiring references. Common scenarios: * A reference to an integer is required for a parameter: create the http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.htmlMScriptUtil object with the integer create() method, acquire a pointer using http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.html#d9ea6a06354c1e489730649a2d9bf1edasIntPtr(), pass that pointer to the method requiring the reference, create another http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.htmlMScriptUtil object using the int pointer that was returned, query the integer return value using http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.html#e42e1236dd42fccf9f98516deebcbe24asInt(). * A pointer to a list of floats are required for a parameter: create the http://download.autodesk.com/us/maya/2010help/API/class_m_script_util.htmlMScriptUtil object with createFromList(), call asFloatPointer() and pass that to the method. * Several static methods are available for converting python lists to matrices and integer/float arrays. This class is cumbersome to use but it provides a way of building parameters and accessing return values for methods which would normally not be scriptable. At 05:44 AM 1/22/2011, you wrote: hi, i would love to get the worldspace scales but can get the getScale arguments right. What did you use? I end up with tMatrix.getScale(ptr, om.MSpace.kWorld) # Error: line 1: in method 'MTransformationMatrix_getScale', argument 2 of type 'double [3]' # Traceback (most recent call last): # File maya console, line 1, in module # TypeError: in method 'MTransformationMatrix_getScale', argument 2 of type 'double [3]' # Best Regards, katrin -- NEU: FreePhone - kostenlos mobil telefonieren und surfen! Jetzt informieren: http://www.gmx.net/de/go/freephone -- http://groups.google.com/group/python_inside_maya Jan Berger j...@janberger.de :: www.janberger.de -- http://groups.google.com/group/python_inside_maya -- GMX DSL Doppel-Flat ab 19,99 Euro/mtl.! Jetzt mit gratis Handy-Flat! http://portal.gmx.net/de/go/dsl -- http://groups.google.com/group/python_inside_maya Jan Berger j...@janberger.de :: www.janberger.de -- http://groups.google.com/group/python_inside_maya
Re: [Maya-Python] getting a node's typeID
I`m not sure I have enough info to give specific advice, I presume the node may not exist that you want to get the typeId for? If MDGModifier does not do the job how about just creating one and then use MGlobal::deleteNode() to get rid of it? Just a thought... At 09:56 PM 9/22/2010, you wrote: On Sep 22, 2010, at 9:39 PM, Jan Berger wrote: there is MFnDependencyNode::typeId() to get it for a specific node type I guess one would need to use the create function beforehand yes, it's not a static/class method so the MFnDependencyNode class needs to be instantiated to use that method... meaning you need an existing node. i've done some very nasty things using dg modifiers to create ghosedt nodes that do not yet exist to find out their type, the revert the dgmod, but i'd rather not have to do that. -chad At 08:26 PM 9/22/2010, you wrote: i've searched for this before without avail, but it's biting me again in a different context, so i thought i'd check: is there a way to get the typeId of a node without having an existing instance of the node? i would expect a static method on MFnDependencyNode, like the following: MFnDependencyNode.getTypeId('transform') but i can't find anything -chad -- http://groups.google.com/group/python_inside_maya Jan Berger mailto:j...@janberger.dej...@janberger.de :: www.janberger.de -- http://groups.google.com/group/python_inside_mayahttp://groups.google.com/group/python_inside_maya -- http://groups.google.com/group/python_inside_maya Jan Berger j...@janberger.de :: www.janberger.de -- http://groups.google.com/group/python_inside_maya
Re: [Maya-Python] getting a node's typeID
there is MFnDependencyNode::typeId() to get it for a specific node type I guess one would need to use the create function beforehand At 08:26 PM 9/22/2010, you wrote: i've searched for this before without avail, but it's biting me again in a different context, so i thought i'd check: is there a way to get the typeId of a node without having an existing instance of the node? i would expect a static method on MFnDependencyNode, like the following: MFnDependencyNode.getTypeId('transform') but i can't find anything -chad -- http://groups.google.com/group/python_inside_maya Jan Berger j...@janberger.de :: www.janberger.de -- http://groups.google.com/group/python_inside_maya