Home Website Youtube GitHub

Lowpo Sagat_work in progress

Sagat_picker_icon

Hi guys, so you might have seen me in and out of the forum for the past few years as have been really interested in mGear mostly thanks to Miquel and through the Rigging buddies podcas and incredible guests.

I had already talked about this project a while back but a server backup wipped out my previous post. Here is a new one since I am back on this project which I will try to finish… possibly this week with your help.

A while back I came across this great design by the amazing Gop Gap on Instagram and thought it would be a great project to rig a low polygon version of his character for my animation buddies and anyone interested to animate actions shots without the burden of a slow rig.

In few days I modeled the character in a pose similar to the Gop Gap design out of basic primitives and comped some FXs in Photoshop just to show what the final presentation would look like.

When happy about the pose and the proportions, I proceeded to neutralise the character and create my mGear guides.

It is a low polygon character but I felt it would be fun if the face could convey a bit of emotion so the eye patch has a blend shape to convey tension with a compression of the brow. That should be fun for close up shots :slight_smile:

3 Likes

and here was my range of motion to test my skinning and rig.

Unfortunately I ran into several issues at that time then gave up.

Back in those days I was really struggling to understand how the space switches worked and couldn’t figure out how to plug things.

An other issue I ran into was the arms. Since I wanted to be able to use the FK IK match, I thought I could only use the arm_2jnt component but it gave me one joint too many. I have now realised I could probably use the Epic Arm and this is where I am right now!

I will be posting my progress on that thread so this could be helpful for people coming from other autorigs and using mGear for the first time.

Here is a test for the FX I will be using for the final presentation. First time using FX in Maya.

https://youtu.be/rZnS26F7__M

The rig is progressing slowly but surely.

I have started using a free Miro Board to keep track of things. It is pretty cool and takes much less space on my physical walls :slight_smile:

1 Like

Hi Moustache_Animation,

Good stuff, thanks for sharing.

Your screenshot made me think of Trello (trello.com)

I have used it for a while to organize my rigging workflow and it works pretty well. You can have columns with cards (tasks), much you like you did, and inside each task you can have detailed checklists and other stuff to track the progress of related sub-tasks / steps.


image

Have a good day! =)

Thanks Rafael (I should also probably use my real name too)

Yeah that looks a lot more professional than simple Post-It notes!

Cheers

Miro seems to be quite powerful for real-time collaboration as well.
There’s no right or wrong, really. If it works for you, that’s what matters. :slight_smile:

1 Like

Here is how I tackled the Intense feature on the rig. This feature is located on the head control and allows the animator to convey a tense emotion. Animators will have fun with it especially for close-up shots.

This is not the optimal way to do it but here is how I tackled it so far, there is always room for improvement and your comments are welcome.

Currently, this is my “pre custom step” stack:

The eye patch itself is a separate geometry from the body and imported as a “Pre Custom Step”

image

image

Then all the connections are done at the end of the building process :

image

The parent_eyepatch.py step simply parents the eyePatch_geo to the head control (hehe yeah I updated this as parenting to the joint wasn’t a great idea when hiding the joints :slight_smile: ) using:

pm.parent( 'eyePatch_geo', 'head_C0_ctl' )

The import_blendshapes.py step imports my “intense” blendshape target geo in the scene, ideally it should import the .shp file I guess?

    pm.importFile(os.path.join(path, "assets","geoBlendshapesPublish.fbx"))

And finally the Intense attribute and all the connection business is done with the blendshape_connections.py step:

    pm.blendShape( 'bs_face_intense_geo', 'eyePatch_geo', name = 'bsMightyInput' )
    pm.addAttr( 'head_C0_ctl', longName='Intense', defaultValue=0.0, minValue=0.0, maxValue= 1 )
    pm.setAttr( 'head_C0_ctl.Intense', keyable = 1 )
    pm.connectAttr ( 'head_C0_ctl.Intense', 'bsMightyInput.bs_face_intense_geo' )

I hope this can help anyone, feel free to comment.

1 Like

It is possible to add pictures to Miro boards!

Tasks for the day,

1 Like

More “post steps” scripts
If like me you are very new to mGear and pymel, make sure you add the following line at the top of your step script:
import pymel.core as pm

makeCTLvisibleOnplayback.py
It irritates the hell out of me not to be able to see the controls in playback mode especially when tackling walks and various cycles so here is how you disable that feature:

## make sure the animation controls are visible during playback
pm.setAttr ('rig.ctl_vis_on_playback', 0)

footroll_angle_default.py
For that character, I felt I would need to modify the default angles at which the footroll gets triggered:
pm.setAttr( 'Root.foot_angle_0', 0 )
pm.setAttr( 'Root.foot_angle_1', -40 )

1 Like

The picker is nearly complete, I just need to add an IK/FK match once I know how to do it.

  • Orange controls are FK, yellow are IK.
  • The light blue buttons with a plus sign select the entire limb.
  • The hands are separated and moved to the side as I find this much more efficient especially in TV series where the hands are often done last and often mirrored.

Those days I don’t bother adding a picture of the character since I like to reuse my pickers for other characters and having a background picture is not “scalable” on a larger production when done manually.

You can find an article I wrote about Pickers a while back and you might find it interesting:

Turn on the mGear Viewport Menu. Then if you right click on any control you get a right-click menu. On any limb control, you can “Select host”. Or just select the host directly. Once the host is selected, you can right-click “Switch arm to Ik” or “Switch arm to Fk”. There is also seamless space switching for any component’s spaces.

There is also a picker template file that has some code examples for seamless switching.

screenshot_2022-09-08_10-37-05

Yes that is the code I am looking for. Thanks Chris, I will look for it.

Cheers

hum ok I found the code but it seems to be looking for some variables probably fed by the mGear picker and I have no clue how to adapt this to my situation :frowning:

This is the code found on the mGear Animpicker:

from mgear.core import anim_utils

if not __INIT__:
    anim_utils. ikFkMatch_with_namespace(__NAMESPACE__,
                                        "arm_blend",
                                        "armUI_L0_ctl",
                                        ["arm_L0_fk0_ctl", "arm_L0_fk1_ctl", "arm_L0_fk2_ctl"],
                                        "arm_L0_ik_ctl",
                                        "arm_L0_upv_ctl",
                                        ik_rot="arm_L0_ikRot_ctl")```

If you’re outside the context of the Picker, just remove __INIT__ and then you’ll have to define or find your own namespace.

Also, in this code all the control names are hard-coded. Some of these controls might be able to be found procedurally through connections and attributes stored on the host. But I can’t help with that today.

This is just an example that gets the namespace from the first thing you have selected, assuming you have the limb or hostUI selected. If you are in the context of the mGear Picker, you should be able to use the __NAMESPACE__ variable. If you use your own picker tool, you’ll have to store or derive it some other way.

import pymel.core as pm
from mgear.core import anim_utils

# Get the namespace from the thing you have selected.
controlNamespace = pm.selected()[0].namespace()

anim_utils. ikFkMatch_with_namespace(
        controlNamespace,
        "arm_blend",
        "armUI_L0_ctl",
        ["arm_L0_fk0_ctl", "arm_L0_fk1_ctl", "arm_L0_fk2_ctl"],
        "arm_L0_ik_ctl",
        "arm_L0_upv_ctl",
        ik_rot="arm_L0_ikRot_ctl")
1 Like

Oh, thanks a lot Chris!! I just had to change the ik_rot hard coded name! Cheers!!!

ik_rot=“arm_L0_ikRot_ctl”
to
ik_rot=“arm_L0_ik_ctl”

                                       
import pymel.core as pm
from mgear.core import anim_utils

# Get the namespace from the thing you have selected.
controlNamespace = pm.selected()[0].namespace()

anim_utils. ikFkMatch_with_namespace(
        controlNamespace,
        "arm_blend",
        "armUI_L0_ctl",
        ["arm_L0_fk0_ctl", "arm_L0_fk1_ctl", "arm_L0_fk2_ctl"],
        "arm_L0_ik_ctl",
        "arm_L0_upv_ctl",
        ik_rot="arm_L0_ik_ctl")```

So this is how I am setting up my FK neck for the project. I made a little video explaining the process.

Basically I am using a control_01 for the first FK neck control then a modified shoulder_01 aka mighty_neck_01 for the second FK neck control and finally a control_01 for the head control.

The world to parent orient switches for the head are setup using the mighty_neck_01 reference array which can then be accessed through the host.

[placeholder for the component download link]

I just realised there is an issue at the moment with the orientation of the neck_01 control!

The way I am showing it in the video, a forward rotation will be -RY instead of -RX (like the spine FK controls) so to keep a consistency in the behaviour of the rig and keep the animators happy, I will instead rotate neck_C1_root by RZ -90 and parent the head_C0_root to the neck_C1_root instead of the Neck_C1_tip.

1 Like

There has been few changes today.

###### Intense feature update #####

One of them was the import of .shp files as a Post Step for my Eye patch. Here is how I went about it.

Ideally I should get rid of the full hard path at some stage but that should help people.

    pm.blendShape ( 'eyePatch_geo', name = 'bsMightyInput' )
    pm.blendShape('bsMightyInput',e = True, ip = 'Z:/3d/Rigs/Sagat/Scenes/data/deformers/bs_face_intense.shp')
    pm.addAttr( 'head_C0_ctl', longName='Intense', defaultValue=0.0, minValue=0.0, maxValue= 1 )
    pm.setAttr( 'head_C0_ctl.Intense', keyable = 1 )
    pm.connectAttr ( 'head_C0_ctl.Intense', 'bsMightyInput.bs_face_intense_geo' )

Other than that, here is where I am tonight. The rig is nearly complete!

Massive set-back today, I thought I was done with my rig but my files don’t open anymore.

Currently I am using Maya 2019.2 and mGear 4.03 on Windows.

Several of my work files, all the latest ones and the incremental saves, hard crash Maya as soon as I open the files either by double clicking on the file names in the explorer or through Maya’s “open file” menu.

I will open a new thread since this seem to be a recurring problem for other people too.

Variation!