getavalon / core

The safe post-production pipeline - https://getavalon.github.io/2.0
MIT License
218 stars 48 forks source link

Rigging validations #160

Open CalleHalldin opened 7 years ago

CalleHalldin commented 7 years ago

Goal

Minimize mistakes and to create a more universal standard.

Motivation Rigs without colors on the the controls, controls without freezed transformation and with constrained deformers/joints not hidden, default lambert1 on models gets published to the animators to often,

Implementation These are not forced and we should be able to un-tick if needed when we publish.

  1. Freeze controls, Check of there is any controls that doesn't have default values, ignore custom values.
  2. Animation Controls color, Check if controls within the _controlsSET has 'no' color.
  3. Unwanted nodes in the viewport, only geo and nurbs curves should be visible.
  4. Lambert1/grey material on models, Check if meshes inside Mesh group dosen't have the default material.
  5. Keys on animation controls, Check within _controlsSET to see if there is any keys done by the rigger.
  6. Default names on control curves, Check the animation control curves within controls_SET to make sure it doesn't have a default name eg. nurbsCircle1
mottosso commented 7 years ago

This is fantastic Calle.

Freeze controls, Check of there is any controls that doesn't have default values, ignore custom values.

Technically, freeze isn't enough and sometimes inapplicable. For example, if the animator has previously animated on a controller with values already set, that animation would become offsetted by the difference between what it was and what it became once frozen when updating his rig.

I've dealt with this before and found the more efficient and scalable approach - that also takes into account non-transform values such as custom attributes - was to "save" values during rigging and "load" them when necessary. Once saved, as a hidden attribute for example, we could then validate against these values, and also enable the animator to "reset" a rig by loading in the default values set by the rigger.

It's relative straightforward to set-up, I can add a "Save Controller Values" and "Load Controller Values" to your Mindbender menu.

Animation Controls color, Check if controls within the controls_SET has 'no' color.

Great.

Unwanted nodes in the viewport, only geo and nurbs curves should be visible.

Agreed.

Lambert1/grey material on models, Check if meshes inside Mesh group has default material.

Perfect.

Keys on animation controls, Check within controls_SET to see if there is any keys done by the rigger.

This I think relates to (1). In my experience, controls may sometimes need a key on them for whatever rigging purposes. We could make it such that for these channels, the rigger must set the channel to un-editable? That way it'll appear grey and we can exclude this from validation.

BigRoy commented 7 years ago

Lambert1/grey material on models, Check if meshes inside Mesh group has default material.

Interesting @CalleHalldin; do you ever want to preview a character (that is rigged) with a preview shader/colors? If so, when do you create such a "preview shader" and when is it applied? Does the animator apply it?

This I think relates to (1). In my experience, controls may sometimes need a key on them for whatever rigging purposes. We could make it such that for these channels, the rigger must set the channel to un-editable? That way it'll appear grey and we can exclude this from validation.

Yes, I believe this would work. No keys on any keyable and unlocked channels for controls.

CalleHalldin commented 7 years ago

Technically, freeze isn't enough and sometimes inapplicable. For example, if the animator has previously animated on a controller with values already set, that animation would become offsetted by the difference between what it was and what it became once frozen.

yes this is exactly the problem, once i notice the issue an animators has in many cases already started animating and it can't be corrected. that's why the pipeline should tell the one doing the rigg that its not freezed before he publish to the animator the first time/all times. Could you elaborate some more why this isn't a good thing to make sure the rigger has done?

It's relative straightforward to set-up, I can add a "Save Controller Values" and "Load Controller Values" to your Mindbender menu.

Sounds like a great feature regardless :) We do have "Set default" in the animation menu, not sure what it does though :)

This I think relates to (1). In my experience, controls may sometimes need a key on them for whatever rigging purposes. We could make it such that for these channels, the rigger must set the channel to un-editable? That way it'll appear grey and we can exclude this from validation.

Sure we could do that, but like i said, all of these validations are in my mind optional and just there to remind the rigger. If a control with an a keyed channel is needed and is the only control that gets an error the rigger can simply un-tick the validator and continue to publish.

Lambert1/grey material on models, Check if meshes inside Mesh group has default material.

Interesting; do you ever want to preview a character (that is rigged) with a preview shader/colors? If so, when do you create such a "preview shader" and when is it applied? Does the animator apply it?

I can see now that i wrote that poorly, what i meant was that i do not want lambert1 materials, not the opposite :) So yeah i want basic representation of color unless a AnimLookdev is provided with a lower res texture.

CalleHalldin commented 7 years ago

Updated so it made since with the lamber1 validator and also added a new validator for anim Control names

mottosso commented 7 years ago

Could you elaborate some more why this isn't a good thing to make sure the rigger has done?

The rigger should ensure a particular set of default values. I'm agreeing with you.

What I wanted to point out is that the Maya Freeze Transforms isn't the best or even a good option. Freezing transforms means putting those values somewhere else, somewhere hidden (see Attribute Editor > Transform Attributes > Local Space), that make working with its actual transform one level more difficult.

What I would recommend is that you store offsets in a parent group, and let the child be what the animator interacts with. That way offsets are explicit and visible to the rigger and developer.

On top of having transforms frozen, there are likely other attributes that also need a default value. This is another case where Freeze Transforms isn't an option.

I'm thinking ahead. I think what we'll do is implement it as you say so we can stare the new problem straight in the eye before we fix it.

CalleHalldin commented 7 years ago

Sure I understand, apply the validator however you like :)