facs and face controls for G3

Issue #1721 resolved
Alessandro Padovani created an issue

1.7.2.1780

Until now we can use FACS for G8 G81 G9, this gives us the ability to import facecap and livelink mocaps, other than using the face controls provided with G81. We can’t use G3 because FACS are not provided for G3.

Well guess what, I noticed that G3 has exactly the same face bones and facial mesh as G81, apart the eyelashes that are not separated. Thus I was curious and tried to transfer the G81 FACS. Success. So, to get FACS for G3 it is enough to transfer from G81. The only drawback is that the transfer tool doesn’t work across different armatures, that is, it transfers the shapekeys but not the drivers, because it is intended for merged meshes. So we need an option for the transfer tool to transfer drivers to another armature, of course provided that the destination has bones with the same names.

Below my result with G3 FACS, since I couldn’t transfer the drivers to the G3 armature I binded the G81 armature instead. Note that also the eyelashes work quite fine, though they’re just transferred shapekeys with no vendor morphs.

steps:

  1. load G3 and G81
  2. load G81 FACS
  3. transfer FACS from G81 to G3
  4. bind the G81 armature to the G3 mesh to drive the FACS (we need a new option to transfer drivers)

Comments (10)

  1. Thomas Larsson repo owner

    This was a fun challenge. It can now be done in two steps:

    1. When transferring shapekeys, disable the new Shapekeys As Drivers option. By transferred shapekeys are driven by the original shapekey, which allows us to optimize away the armature fin drivers. But in this case we want to keep the fin drivers. Note that the G3 shapekeys are still driven by the G8 armature.
    2. Use the new Advanced Setup > Morphs > Copy Drivers tool with default settings. G8 is active and G3 selected. Now the G3 shapekeys are driven by the G3 armature.

  2. Thomas Larsson repo owner

    Note that shapekey transfer only works fine for unmorphed meshes. I tried to transfer from default G8F to a short G3F that was scaled to 95%. The result was as expected, i.e. horrible. But you can still do it in three steps:

    1. Transfer shapekeys from default G8F to default G3F with transfer method = Nearest Face.
    2. Transfer shapekeys from default G3F to short G3F with transfer method = By Number.
    3. Copy drivers from G8F to short G3F.

  3. Thomas Larsson repo owner

    The eye blink shapekeys don’t seem to work fine. Probably because all eyelid vertices very close to each other at rest, and the algorithm doesn’t manage to distinguish them properly. That would be a limitation rather than a bug.

  4. Alessandro Padovani reporter

    Commit b6d5028.

    Nope. There’s something wrong here, the eye bones don’t seem to transfer drivers.

    1. Transfer shapekeys without “shapekeys as drivers“. This works fine, I can see the transferred shapekeys in G3, if I move the G8 sliders the G3 shapekeys are affected.

    2. Copy drivers with default settings. This has issues, some bones are driven and some not. For example “jaw open” works fine and it drives the jaw bone, same with tongue morphs they drive the tongue bones. While “eye blink“ and the other eye morphs don’t drive the eye bones. I also tried “override existing drivers“ but it’s the same.

    note. nearest face precision. Also there’s a issue transferring the tongue shapekeys, as some vertices of the inner mouth are affected too. I don’t know what’s the precision for “nearest face“, but since the G3 and G8 meshes are exactly the same, there shouldn’t be any confusion about what vertices to transfer. Perhaps you may want to add a new transfer option for meshes that are exactly the same but with a different vertex order, or make “nearest face“ more precise. Let me know.

    p.s. With “import to modified meshes“ in the global settings, we may also “disconnect“ the G3 eyelashes it this can help. There’s also a “topology“ option for transferring vertex groups in blender, but doesn’t work for shapekeys.

  5. Thomas Larsson repo owner

    Blinking works now. The problem was that the eyelids (or their drv bones) were already driven in G3. With the override option enabled, new drivers were added, but I didn’t realize that the old drivers were still there and had to be explicitly removed.

    The tool does not add drivers for non-existing bones. This means that we have to be careful about when we make bones posable. E.g., this does not work:

    1. Import G8 with facs and make bones posable.
    2. Import G3 with make bones posable.
    3. Transfer morphs and drivers G8 => G3.

    The problem is that in G8, the driven jaw bone is lowerJaw(drv), but G3 does not have such a bone so the driver is ignored. What works is this:

    1. Import G8 and G3 with default settings.
    2. Import G8 facs.
    3. Transfer morphs and drivers G8 => G3.
    4. Make all G3 bones posable.

  6. Thomas Larsson repo owner

    The tongue shapekeys work fine here.

    Edit: I import the figures with unmorphed mesh fitting. It is possible that dbz introduce rounding errors, or that some small morph has been baked into the mesh.

  7. Thomas Larsson repo owner

    Note that all old drivers for the face bones are removed, so if we want to use both G3 face morphs and facs on the same character, we must transfer facs from G8 first and add the G3 morphs afterwards. Although if we have facs we probably don’t want the G3 morphs.

  8. Alessandro Padovani reporter

    Commit ba6966e.

    That is wonderful, everything works fine now thank you for the fix. Using unmorphed resolves the issues with shapekeys, also everything you say makes sense, we first transfer FACS then do everything else. I also tried to import G3 with the G81 face controls and she works great.

    note. Transfer shapekeys didn’t work fine because I forgot to disable the “mouth realism HD“ morphs in daz studio, that are different for G3 and G8, once I do that the tongue is fine with dbz.

    There's a couple issues with face controls, but this is generic not related to G3 it's the same with G81.

    1. eyes controls. The "r_Eye" "l_Eye" controls for the single eyes are driven and we can't use them unless we make all bones posable. They should work without bones posable. The "Eyes" control for both eyes works fine without bones posable. Below it's G3 with the eye control "locked", but the same happens with G81.

    p.s. Now I realize that r_Eye l_Eye are driven by Eyes so this is “right“, in blender we need bones posable.

    2. tongue controls. The shapes for "Tongue_In" "Tongue_Out" are fine before merge rigs, but after convert to widgets they get misplaced and overlap each other. Again same for G3 and G81.

  9. Alessandro Padovani reporter

    Commit 4ae6f87 works fine. I'm closing as resolved and I believe we have a nice improvement here for G3 figures, thank you for looking into this.

  10. Log in to comment