It has been a while, so what happened? Well, things were going smoothly in February last year, and then, a seemingly unending supply of new projects hit.
From a single 3D project at a time (Planet Sheen, or Fanboy and ChumChum) Bardel exploded to doing more and more simultaneous productions, Teenage Mutant Ninja Turtles, Monsters Vs. Aliens, LeapFrog, The Prophet and a large number more on the horizon or in the works. Needless to say, all of this hitting at the same time (plus getting married this year and discovering Coursera online classes) has turned things into a whirlwind of time spent doing many other things besides blogging.
But, it is never too late to get back in the swing of things. I have discovered a lot of new things in my blogging hiatus, mainly a love for Machine Learning (especially Neural Networks), and how they can be applied to some very interesting data analysis or image processing and computer vision, and will be the target of a few upcoming posts.
Along the way, I was also getting involved in CUDA and some of the interesting GPU problems available which I think are worthy of a few posts, especially if I can get something interesting happening.
Not that things have really calmed down, but I have missed writing about new and exciting things, and have a few more technologies to test and work through... Like everything, you learn to adapt or get left behind.
Until next time, I remain....
Michael Hubbard
http://michaelhubbard.ca
Game Programmer Technical Artist
Sunday, November 24, 2013
Sunday, February 19, 2012
Code of the Day: DK Anim
dkAnim 0.7.0 script by danielk: http://www.creativecrash.com/maya/downloads/scripts-plugins/animation/c/dkanim/
dkAnim 0.7.0 is a MEL script for importing or exporting animation channels, and relies on node names instead of node hierarchies (like the built-in Maya animation transfer).
Language: MEL
Type: Maya Editor Script
Script Files: 1
Number of lines: 1046
Functionality: 7.5
The script does a good job saving and loading, although it is not very fast (compared with the builtin option). Perhaps the most useful option is the ability to replace certain nodes and add prefixes which would be very beneficial if the model has changed at all (although the .dkanim file that is created is a text file, so likely that could also be modified). The format of the text file is again non-standard, but has some hierarchical structure to it that makes it more flexible to use than straight line by line processing.
Design: 6.5
Most of the code except for the read and write functions are small and self contained. The read and write however because it is a custom format are quite complex and the level of nesting is quite deep for some of the branching statements. There are a few global variables used to pass information around, mostly to keep the refresh state organized. The code also uses quite a number of variables in the read and write code which makes the design more complex.
Style: 6.5
The code formatting is not completely consistent, especially related to the indentations. The code nesting I mentioned does go up to 14 levels deep of a combination of if/else branching and while loops, which can be pretty hard to follow the overall path of the code.
Documentation: 6.5
The header comment really doubles as the documentation as it is quite verbose and gives a lot of information about how the tool was used and why it was created. The in code documentation are pretty much non-existent, except for the occasional line of commented out code and the one comment "//Does File Exist?".
Reusability: 5.5
The code in a few places is tightly coupled to the UI (and the refresh globals). There are a number of places that look like they could be reusable, but otherwise not too bad. The maintenance or bug fixes on having to work with the read and write logic would be tricky based on their complexity and the use of a custom format.
Overall: 7
The script does a nice job of providing an alternative to Maya's builtin .anim channel transferring. If you need an option that works purely on the names of the nodes, and has a few additional options for saving information that is not keyed, this could be a useful script to look at.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
dkAnim 0.7.0 is a MEL script for importing or exporting animation channels, and relies on node names instead of node hierarchies (like the built-in Maya animation transfer).
Language: MEL
Type: Maya Editor Script
Script Files: 1
Number of lines: 1046
Functionality: 7.5
The script does a good job saving and loading, although it is not very fast (compared with the builtin option). Perhaps the most useful option is the ability to replace certain nodes and add prefixes which would be very beneficial if the model has changed at all (although the .dkanim file that is created is a text file, so likely that could also be modified). The format of the text file is again non-standard, but has some hierarchical structure to it that makes it more flexible to use than straight line by line processing.
Design: 6.5
Most of the code except for the read and write functions are small and self contained. The read and write however because it is a custom format are quite complex and the level of nesting is quite deep for some of the branching statements. There are a few global variables used to pass information around, mostly to keep the refresh state organized. The code also uses quite a number of variables in the read and write code which makes the design more complex.
Style: 6.5
The code formatting is not completely consistent, especially related to the indentations. The code nesting I mentioned does go up to 14 levels deep of a combination of if/else branching and while loops, which can be pretty hard to follow the overall path of the code.
Documentation: 6.5
The header comment really doubles as the documentation as it is quite verbose and gives a lot of information about how the tool was used and why it was created. The in code documentation are pretty much non-existent, except for the occasional line of commented out code and the one comment "//Does File Exist?".
Reusability: 5.5
The code in a few places is tightly coupled to the UI (and the refresh globals). There are a number of places that look like they could be reusable, but otherwise not too bad. The maintenance or bug fixes on having to work with the read and write logic would be tricky based on their complexity and the use of a custom format.
Overall: 7
The script does a nice job of providing an alternative to Maya's builtin .anim channel transferring. If you need an option that works purely on the names of the nodes, and has a few additional options for saving information that is not keyed, this could be a useful script to look at.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
Saturday, February 18, 2012
Code of the Day: XY Shrink Wrap
xyShrinkWrap 0.1 script by riviera: http://www.creativecrash.com/maya/downloads/scripts-plugins/modeling/misc/c/xyshrinkwrap
xyShrinkWrap 0.1 is a MEL script that modifies an object to fit the first selected object inside the second selected object.
Language: MEL
Type: Maya Editor Script
Script Files: 1
Number of lines: 167
Functionality: 5.5
The script has no interface and relies on selection. The code uses geometry constrains to setup the shrinkwrap functionality. It appears as if the object that gets wrapped does not always keep its shape, but instead is modified to fit inside its wrapper object. It is not quite the same as the XSI shrinkwrap which actually uses the normals of the object to do the wrapping, but instead is more of a place one object inside of another "wrapping".
Design: 6
The code is broken up into logical components, and even has a wrapper around some of the warning print statements which can be helpful for debugging (instead of having to comment out all the existing print/warn statements). The main function for doing the wrapping is a little more complex than it could be (with numerous nested if and for statements. The name wrap is also a builtin Maya MEL function, so it would probably benfit from choosing a different name.
Style: 7
The code formatting is pretty consistent and the overall use of whitespace is appropriate. The variable names and function names are pretty good (although wrap, xyShrinkWrap, wrapc may be a little too similar). The code makes use of some comments and is organized in a logical way.
Documentation: 6
The header is a little sparse and would benefit in explaining how to use the code, or what it is supposed to do (such as which object to select first to get shrink wrapped), or how to invoke the script. There are some code comments which are helpful though.
Reusability: 7
The code base is quite small and the main wrap function is coded in such a way that it is possible to invoke the wrap function through parameters (which is quite helpful). Overall, from the clean organization and comments it would likely be a fairly easy script to maintain or extend.
Overall: 6
It is not quite the XSI shrinkwrap tool, but may have its uses in certain cases. It mentions it is based on the fitMorph.mel script, which is a more descriptive name of what the tool actually does.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
xyShrinkWrap 0.1 is a MEL script that modifies an object to fit the first selected object inside the second selected object.
Language: MEL
Type: Maya Editor Script
Script Files: 1
Number of lines: 167
Functionality: 5.5
The script has no interface and relies on selection. The code uses geometry constrains to setup the shrinkwrap functionality. It appears as if the object that gets wrapped does not always keep its shape, but instead is modified to fit inside its wrapper object. It is not quite the same as the XSI shrinkwrap which actually uses the normals of the object to do the wrapping, but instead is more of a place one object inside of another "wrapping".
Design: 6
The code is broken up into logical components, and even has a wrapper around some of the warning print statements which can be helpful for debugging (instead of having to comment out all the existing print/warn statements). The main function for doing the wrapping is a little more complex than it could be (with numerous nested if and for statements. The name wrap is also a builtin Maya MEL function, so it would probably benfit from choosing a different name.
Style: 7
The code formatting is pretty consistent and the overall use of whitespace is appropriate. The variable names and function names are pretty good (although wrap, xyShrinkWrap, wrapc may be a little too similar). The code makes use of some comments and is organized in a logical way.
Documentation: 6
The header is a little sparse and would benefit in explaining how to use the code, or what it is supposed to do (such as which object to select first to get shrink wrapped), or how to invoke the script. There are some code comments which are helpful though.
Reusability: 7
The code base is quite small and the main wrap function is coded in such a way that it is possible to invoke the wrap function through parameters (which is quite helpful). Overall, from the clean organization and comments it would likely be a fairly easy script to maintain or extend.
Overall: 6
It is not quite the XSI shrinkwrap tool, but may have its uses in certain cases. It mentions it is based on the fitMorph.mel script, which is a more descriptive name of what the tool actually does.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
Friday, February 17, 2012
Code of the Day: Flock
Flock 1.0 script by JohnKG: http://www.creativecrash.com/maya/downloads/scripts-plugins/c/flock
Flock 1.0 is a MEL script for creating a swarming group of particles around a locator.
Language: MEL
Type: Maya Editor Script
Script Files: 1
Number of lines: 195
Functionality: 6.5
The script offers a few controls (initial size, spacing, speed, range, min/max distance and influence), which gives a few nice options for initial setup. The script particles themselves move similar to flying bugs (apparently it is a derivative of the gnat script), so any more complex flocking (such as that of birds or other animals) is not really what the script is about. The code does give a warning in Maya 2012, which is not that unexpected since it is an older script:
// Warning: -r/runtime should be replaced with -rbd/runtimeBeforeDynamics or -rad/runtimeAfterDynamics. //
Design: 6
The code uses a number of global variables to pass information around, and creates a very long expression for the dynamics. The script also automatically begins playing back the newly created particles, which should really be an option in the UI, as in many cases there will need to be additional tweaks before wanting to play back the animation.
Style: 5
While creating dynamics expression can be complicated, it is probably best if it is does not use 20 variables and is over 2400 characters long in a single one liner. If the dynamics expression is that complicated, it would be worthwhile to build up the expression through intermediate strings to at least add in the debugging. The rest of the code has inconsistent spacing and indentation, and there are a number of places where code is commented out (especially non-working versions of the dynamic expression string).
Documentation: 6.5
The code gives a lot of information in the header about what the script is supposed to do, but the only comments in the code are for commented out functionality.
Reusability: 6
The code base is pretty small, basically an interface to setup a dynamic expression for particles. The UI uses empty text files instead of one of the layouts to setup the position and spacing of the UI, but otherwise would be easy to maintain. There is not a lot of code that could be reused however as it is heavily reliant on the global variables.
Overall: 6.5
If you need a lot of bugs as dynamic particles that move in a flocking movement this is a quick and easy way to set them up. It is apparently similar to the "gnats.mel" script, but with more options.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
Flock 1.0 is a MEL script for creating a swarming group of particles around a locator.
Language: MEL
Type: Maya Editor Script
Script Files: 1
Number of lines: 195
Functionality: 6.5
The script offers a few controls (initial size, spacing, speed, range, min/max distance and influence), which gives a few nice options for initial setup. The script particles themselves move similar to flying bugs (apparently it is a derivative of the gnat script), so any more complex flocking (such as that of birds or other animals) is not really what the script is about. The code does give a warning in Maya 2012, which is not that unexpected since it is an older script:
// Warning: -r/runtime should be replaced with -rbd/runtimeBeforeDynamics or -rad/runtimeAfterDynamics. //
Design: 6
The code uses a number of global variables to pass information around, and creates a very long expression for the dynamics. The script also automatically begins playing back the newly created particles, which should really be an option in the UI, as in many cases there will need to be additional tweaks before wanting to play back the animation.
Style: 5
While creating dynamics expression can be complicated, it is probably best if it is does not use 20 variables and is over 2400 characters long in a single one liner. If the dynamics expression is that complicated, it would be worthwhile to build up the expression through intermediate strings to at least add in the debugging. The rest of the code has inconsistent spacing and indentation, and there are a number of places where code is commented out (especially non-working versions of the dynamic expression string).
Documentation: 6.5
The code gives a lot of information in the header about what the script is supposed to do, but the only comments in the code are for commented out functionality.
Reusability: 6
The code base is pretty small, basically an interface to setup a dynamic expression for particles. The UI uses empty text files instead of one of the layouts to setup the position and spacing of the UI, but otherwise would be easy to maintain. There is not a lot of code that could be reused however as it is heavily reliant on the global variables.
Overall: 6.5
If you need a lot of bugs as dynamic particles that move in a flocking movement this is a quick and easy way to set them up. It is apparently similar to the "gnats.mel" script, but with more options.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
Thursday, February 16, 2012
Code of the Day: Spiralizer
Spiralizer 1.2.0 script by marble: http://www.creativecrash.com/maya/downloads/scripts-plugins/modeling/misc/c/spiralizer
Spiralizer 1.2.0 is a MEL script for creating a spiral of any NURBs surface.
Language: MEL
Type: Maya Editor Script
Script Files: 2
Number of lines: 103
Functionality: 6
The script takes a NURBS surface and creates a spiral curve based on the surface and the only option in the window "Number of turns". The result is quite nice when used on simple NURBS surfaces, but a few more options would improve the usability of the tool. More complex NURBS appear to produce more unexpected results. The fact that it replaces the NURBS surface that was selected can in some cases be a little less user friendly than giving the user the option to keep the original.
Design: 6.5
The code is split into two files of about ~50 lines each. Each file only contains one function, but it is still a decent separation of UI and the rest of the code. One thing that was a bit unusual was creating a number of empty labels for spacing rather than using any of the layout options (such as formLayout) to get the spacing in the UI.
Style: 6
The code is tiny, but what is there does not appear to have any code indentation. The UI however is indented, but the if statements and rest of the code body is all on the first column. I am not sure if this was intentional or not, but I found the button name "cButt" to be an unusual choice.
Documentation: 7.5
The code only comments one function but that it really all that is necessary. The code comes with a readme for installation as well that is pretty straightforward.
Reusability: 7.5
The code is tiny and would be fairly easy to maintain and debug as this is one of the smallest scripts I have reviewed. Overall, it would be trivial to debug or maintain this code.
Overall: 6
The result is decent for simple surfaces, although it would be great to have some more options (especially not deleting/modifying the original NURBs surface. This is a very specific tool, but gives a quick and nice result for what it does.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
Spiralizer 1.2.0 is a MEL script for creating a spiral of any NURBs surface.
Language: MEL
Type: Maya Editor Script
Script Files: 2
Number of lines: 103
Functionality: 6
The script takes a NURBS surface and creates a spiral curve based on the surface and the only option in the window "Number of turns". The result is quite nice when used on simple NURBS surfaces, but a few more options would improve the usability of the tool. More complex NURBS appear to produce more unexpected results. The fact that it replaces the NURBS surface that was selected can in some cases be a little less user friendly than giving the user the option to keep the original.
Design: 6.5
The code is split into two files of about ~50 lines each. Each file only contains one function, but it is still a decent separation of UI and the rest of the code. One thing that was a bit unusual was creating a number of empty labels for spacing rather than using any of the layout options (such as formLayout) to get the spacing in the UI.
Style: 6
The code is tiny, but what is there does not appear to have any code indentation. The UI however is indented, but the if statements and rest of the code body is all on the first column. I am not sure if this was intentional or not, but I found the button name "cButt" to be an unusual choice.
Documentation: 7.5
The code only comments one function but that it really all that is necessary. The code comes with a readme for installation as well that is pretty straightforward.
Reusability: 7.5
The code is tiny and would be fairly easy to maintain and debug as this is one of the smallest scripts I have reviewed. Overall, it would be trivial to debug or maintain this code.
Overall: 6
The result is decent for simple surfaces, although it would be great to have some more options (especially not deleting/modifying the original NURBs surface. This is a very specific tool, but gives a quick and nice result for what it does.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
Wednesday, February 15, 2012
Code of the Day: PoseMan
PoseMan 1.3.5 script by Francis Vega: http://www.creativecrash.com/maya/downloads/scripts-plugins/c/poseman-pose-manager--2
PoseMan (PoseManager) 1.3.5 is a MEL script for creating various 3D rig control icons.
Language: MEL
Type: Maya Editor Script
Script Files: 1
Number of lines: 3616
Functionality: 8.5
The script has some very nice functionality in creating and organizing poses. One of the things I particularly liked was the inclusion of default camera settings for creating a screenshot of the pose. The format of the poses appears to be a simple text file which is ok, but a standard data format would likely be more reusable. The ability to create "section" tabs to help organize the poses is also a nice approach, as are all the options available for organizing and applying the poses.
Design: 6.5
I never really like instructions that require modification of the code to set path variables. While the $POSEMAN_LOGO is not required, it would still be better if the code used relative paths or some of the Maya environment variables to find the correct image path. The rest of the code is actually quite well organized into logical functions and while there are a number of globals and evals, the code flow is organized and structured.
Style: 8
The code formatting is nicely organized with consistent spacing and clear and descriptive function and variable names. The commenting and use of whitespace make the code quite easy to read, although with the size of the file, it would benefit from splitting up some of the functionality into new files.
Documentation: 7.5
The code commenting is quite well done and the readme gives some install information. The code is quite readable, but some extra documentation would be nice as there are quite a few features that are not immediately obvious and require some experimentation. It is a little unusual that some of the comments are in another language (Spanish I think) but not all of them, especially since the code function and variable names are English.
Reusability: 7
The code has a few functions that could be reusable, but the code in a lot of places is not obvious what it is supposed to do based on the function names. The code style would also help improve how much debugging would be required in maintaining this script. The non-English comments help confuse a few areas when trying to debug (unless you have a programmer on the team that is bilingual).
Overall: 8.5
The functionality is great, and the code quality is very high. The comments in another language is a little unusual, but otherwise is quite easy to follow. A good approach to creating a pose library, with a few nice features not seen in some of the more standard libraries.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
PoseMan (PoseManager) 1.3.5 is a MEL script for creating various 3D rig control icons.
Language: MEL
Type: Maya Editor Script
Script Files: 1
Number of lines: 3616
Functionality: 8.5
The script has some very nice functionality in creating and organizing poses. One of the things I particularly liked was the inclusion of default camera settings for creating a screenshot of the pose. The format of the poses appears to be a simple text file which is ok, but a standard data format would likely be more reusable. The ability to create "section" tabs to help organize the poses is also a nice approach, as are all the options available for organizing and applying the poses.
Design: 6.5
I never really like instructions that require modification of the code to set path variables. While the $POSEMAN_LOGO is not required, it would still be better if the code used relative paths or some of the Maya environment variables to find the correct image path. The rest of the code is actually quite well organized into logical functions and while there are a number of globals and evals, the code flow is organized and structured.
Style: 8
The code formatting is nicely organized with consistent spacing and clear and descriptive function and variable names. The commenting and use of whitespace make the code quite easy to read, although with the size of the file, it would benefit from splitting up some of the functionality into new files.
Documentation: 7.5
The code commenting is quite well done and the readme gives some install information. The code is quite readable, but some extra documentation would be nice as there are quite a few features that are not immediately obvious and require some experimentation. It is a little unusual that some of the comments are in another language (Spanish I think) but not all of them, especially since the code function and variable names are English.
Reusability: 7
The code has a few functions that could be reusable, but the code in a lot of places is not obvious what it is supposed to do based on the function names. The code style would also help improve how much debugging would be required in maintaining this script. The non-English comments help confuse a few areas when trying to debug (unless you have a programmer on the team that is bilingual).
Overall: 8.5
The functionality is great, and the code quality is very high. The comments in another language is a little unusual, but otherwise is quite easy to follow. A good approach to creating a pose library, with a few nice features not seen in some of the more standard libraries.
Until next time,
Michael Hubbard
http://michaelhubbard.ca
Tuesday, February 14, 2012
Book Review: More Hyper-Realistic Creature Creation
Autodesk Maya Techniques Official Training Guide More Hyper Realistic Creature Creation by Erick Miller and Jeff Unay and Paul Thuriot and Rudy Grossman is both a long title and an interesting read. The book focuses mainly on facial modeling (mostly using blend shapes), facial rigging (joint driven components) and full body setup (full body IK, influencing the skin, caching out deformations).
The book has some interesting information such as how to adjust to production changes. Accomodating art/design changes can be accomplished by creating a blend shape from the old base head to all blend shapes, which not only saves work, but also perserves all the original information. For accomodating topology changes the first option is to setup a driver to the new topology, or the second option is to bake toplogy to targets.
The list of standard (required) blend shape targets was quite thorough and included:
ooh mouth shapes (in between targets)
lips mouth up and down (upward and downward facial shturds)
lip corners up/down optional , smile frown
upper and lower lip roll (or lip curl)
lip corner sideways (inward pull/outward strecth)
lip mouth pull forward and back
lip volume shapes flattened /tightened and puffed out lips
eye blinks/wide open eyes
tightly squinted eyes
cheeks up/down (cheek squint, cheek droop)
puffed out and sucked in cheeks
inward outward and updward downward flares, nose sneer snarl
brow up and down (furrow and raise)
forehead brow sideways (inward pull/outward stretch)
jaw clench/foreched clench, neck clench
custom shapes
jaw corrective shape
Overall, the book is quite slim (at 157 pages) which makes it a quick read, but it comes with a DVD full of great example scenes and code scripts/plugins (which I will see about reviewing in another post(s)). If nothing else, the book is useful as a guide to the examples, but has some good information on more high level concepts and information. In some ways it is a sequel to Hyper-Realisitc Creature Creation, so it may be better to read that first, but still stands well enough on its own.
Bye for now,
Michael Hubbard
http://michaelhubbard.ca
The book has some interesting information such as how to adjust to production changes. Accomodating art/design changes can be accomplished by creating a blend shape from the old base head to all blend shapes, which not only saves work, but also perserves all the original information. For accomodating topology changes the first option is to setup a driver to the new topology, or the second option is to bake toplogy to targets.
The list of standard (required) blend shape targets was quite thorough and included:
ooh mouth shapes (in between targets)
lips mouth up and down (upward and downward facial shturds)
lip corners up/down optional , smile frown
upper and lower lip roll (or lip curl)
lip corner sideways (inward pull/outward strecth)
lip mouth pull forward and back
lip volume shapes flattened /tightened and puffed out lips
eye blinks/wide open eyes
tightly squinted eyes
cheeks up/down (cheek squint, cheek droop)
puffed out and sucked in cheeks
inward outward and updward downward flares, nose sneer snarl
brow up and down (furrow and raise)
forehead brow sideways (inward pull/outward stretch)
jaw clench/foreched clench, neck clench
custom shapes
jaw corrective shape
Overall, the book is quite slim (at 157 pages) which makes it a quick read, but it comes with a DVD full of great example scenes and code scripts/plugins (which I will see about reviewing in another post(s)). If nothing else, the book is useful as a guide to the examples, but has some good information on more high level concepts and information. In some ways it is a sequel to Hyper-Realisitc Creature Creation, so it may be better to read that first, but still stands well enough on its own.
Bye for now,
Michael Hubbard
http://michaelhubbard.ca
Subscribe to:
Posts (Atom)