Tongue Morphs on G9 don't work correctly

Issue #2011 open
Maneki created an issue

I tried the “silly” expression on G9 and noticed that the tongue isn’t quite right, first one is Daz and second one is Blender:

Comments (32)

  1. Prenses Karolin

    If I remember correctly, this problem has been there for a long time. I hope it will be solved as soon as possible.

  2. Thomas Larsson repo owner

    I can see the problem with the Silly morph, but I don’t think Tongue up is the problem. It isn’t a shapekey, but a driver that bends the tongue bones: tongue01 -20 deg, tongue02 -20 deg, tongue03 -10 deg, You need to import the FACS morphs first, because the tongue morphs are not found if you just start with FACS expressions. Again the reason is that the tongue bones are not part of G9 but of G9 mouth.

  3. Alessandro Padovani

    1.7.4.2082

    I did my test with easy import, checking facs with details and expressions + transfer to face, and the issue still applies here. Unless you mean we have to import by hand first facs then facs details then facs expressions, then transfer to face.

    In daz studio the facs are available under “pose controls > head”, subdivided in various categories.

  4. Maneki reporter

    I don’t think the FACs details are necessary but I tried manually importing FACs first after easy import and then manually import the expression presets but the tongue still doesn’t get lifted up that way.

  5. Thomas Larsson repo owner

    One bug has been fixed. The jaw left and right properties were not clamped, which doubled the effect of the jaw left-right slider. Something is still off, however. What is really strange is that e.g. the l_cheek bone is not affected by any of the FACS morphs used by the silly expression, but it is still not in the same position when I load it as a dbz file.

  6. Alessandro Padovani

    If you look at “currently used“ you can see that when “silly“ is enabled a number of other facs is adjusted, including for example “mouth smile“ which does move the “l_cheek“ bone. Entering the “parameter settings” under “sub-components“, we can see all the used ERCs including “mouth smile”.

    Perhaps the culprit is you don’t have to stop at the first iteration level for facs, or daz morphs in general, but it is recursive, possibly including thus avoiding loops.

    p.s. My understanding of this is, daz and blender really work in different ways, especially for morphs daz is a hell. That’s why, instead of trying to do “the same as daz“, we should try to import those morphs we need for animation in blender, and stick with them, eventually by baking so to avoid complex relations. At least this is what I do. So it doesn’t matter to me if my morphs set behaves or not the same as daz, those are what I need. Then I understand this doesn’t work to import daz poses but I’m not too much concerned in importing all the possible daz poses, unless I really need some of them in my project.

    In short for an efficient workflow I believe the general rule is: “Use daz to bake what you need, then use blender. Do not expect everything from daz works in blender”.

    It is a very inefficient workflow to try to turn blender into a clone of daz studio. It is not.

  7. Thomas Larsson repo owner

    With the new Show Used Morphs Only setting we can see the the same list of currently used morphs in Blender too. Show Final Morphs Valuees must be turned on too.The question now is why Mouth Smile doesn’t move l_cheek in Blender.

  8. Thomas Larsson repo owner

    The l_cheek mystery is solved: it has an ERC morph. By setting the ERC method to Armature, and changing the code a little (remove the line disableERC in line 775 of morphing.py), the l_cheek bone end up in the right place. The tongue bones are still misplaced however.

    ERC morphs are always disabled for standard morphs, because I didn’t think they matter much in that case. Maybe we should reconsider. At least it is good to know why there is a discrepancy with DS.

  9. Thomas Larsson repo owner

    There is now a new ERC method, Armature All, which morphs bones for all morphs, including FACS. The old method which only applied to custom morphs is renamed to Armature Custom.

    Here is a comparison of the Silly morph, imported with DBZ, before and after morphing armature. Not perfect, but as good as it gets.

  10. Prenses Karolin

    I updated the last Add-On version and this problem still persists for me. I have shared my global settings and import settings.

  11. Alessandro Padovani

    Commit 2019bdc.

    I can confirm that ERCs don’t work fine, even with the new method “armature all“. Below there’s a comparison of the silly expression, ERC vs DBZ, most bones are not moved correctly, this is not limited to the tongue but affects the other facial bones as well.

    workaround. If we use “import DBZ morph“ with “ERC by translation“ then everything works fine, but this means to export a dbz for each morph we want in blender.

  12. Thomas Larsson repo owner

    Well, I'm stuck. I created a pose preset which is essentially the silly morph, except that it uses the facs morphs directly. It imports fine after morphing armature. So why does the silly morph behave differently?

  13. Alessandro Padovani

    I guess we should compare the currently used morphs in daz and blender and see if there’s any difference. The fact that silly uses a lot of FACS doesn’t help. Will look into this and let you know what I find.

  14. Thomas Larsson repo owner

    I think I have found the problem. There is a separate facs_ctrl_silly.dsf file for the mouth, located at

    \data\Daz 3D\Genesis 9\Genesis 9 Mouth\Morphs\Daz 3D\FACSExpressions

    The base facs_ctrl_silly.dsf invokes a large number of FACS morphs, but the mouth facs_ctrl_silly.dsf adds an extra rotation to the tongue01 bone that the plugin is missing.

  15. Thomas Larsson repo owner

    Finally, the Silly morph works correctly. The ERC method must be Armature All, and the tongue only jumps into place after you press the Morph Armature button.

    The fix is that morphs are loaded to all known figures, not only G9 but also the mouth, eyes, etc. This interferes with automatic transfer of shapekeys to face meshes, so that option is disabled by default for now. Need to investigate how to deal with that later.

    I would not really recommend to use this feature though, because handling ERC morphs is an extra overhead, and Silly seems to be the only FACS expression for which it matters.

  16. Alessandro Padovani

    The mouth silly morph only adds some bone rotation, I mean no bone translations or mesh shapes are involved. Thus there shouldn’t be any interference with current ERCs. ERC bone rotations can always be loaded as keyframes, they don’t need to change the rest pose. It is only ERC bone translations which need either to change the rest pose or to add a reverse shapekey.

    Unless I miss something. Let us know.

    note. Silly daz update. Unfortunately DAZ did some messing with G9, releasing before she was ready and then publishing various fixes on the way. Among them there’s a correction on the Silly morph so we have to be sure that the G9 starter pack and the separate G9 expressions do match with the release date.

    http://docs.daz3d.com/doku.php/public/read_me/index/86958/start

    http://docs.daz3d.com/doku.php/public/read_me/index/86962/start

  17. Thomas Larsson repo owner

    You don’t need ERC morphs when you load FACS expressions, but they are needed for the base FACS morphs, because they change the pivot points for the tongue bones. Specifically it is the Tongue In morph that does this. Then the ERC method must be set to Armature to display the Morph Armature button, but that could be changed of course.

  18. Alessandro Padovani

    Thank you for the explanation, I was under the misunderstanding that with “ERC All“ you used ERCs for regular morphs too.

  19. Thomas Larsson repo owner

    Automatic transfer to face meshes is back now. Shapekeys are no longer transferred to the standard face meshes (G9 lashes, eyes, mouth etc), because they are part of the standard figure and the morphs that they need are already loaded.

  20. Alessandro Padovani

    Nope, commit 3fe4d00 doesn’t seem to work fine. Below the comparison ERC vs DBZ, it still has most bones out of place, including the tongue that doesn’t fit. As for the tongue it seems the bones are only rotated but not translated. I did a clean G9 install just to be sure there isn’t any 3rd party error involved, as it may happen in the daz library.

    steps:

    1. set “ERC All“ in the global settings
    2. easy import G9 with facs + facs details + facs expressions + transfer to face
    3. dial in the “Silly” expression
    4. compare with a “Silly” dbz

  21. Thomas Larsson repo owner

    The tongue looks fine here. The morphed bones are shorter than the dbz ones, but they have the same pivot and orientation which is what matters for deformation. The lower eyelid bones seem to be off, though.

    Did you remember to hit Morph Armature after setting the Silly slider? The Auto morph armature option doesn’t do anything until you change frame. It’s for updating the armature during animation.

  22. Alessandro Padovani

    Yes of course, I didn’t hit “morph armature” silly of me thank you. With “morph armature“ there’s a little difference with “l/r_eyelidlower” and “l/r_squint”, but everything else is perfect. Again the difference is minimal if this is hard to fix we may close as resolved since the main pose works fine.

  23. Prenses Karolin

    I would like to ask a question about ERC, which I am not very familiar with.

    I just imported my characters and did all the edits, but I have never used ERC (None selected).

    What I want to ask is if ERC is useful. I don't understand what exactly it does (I tested it and it didn't change anything)

    If it's useful, I'll import my characters again with the latest plugin version and reorganize them.

  24. Thomas Larsson repo owner

    Enhanced Remote Control (ERC) are generalized morphs, which in practice come in three types:

    1. Shapekeys that change the mesh.
    2. Bone translations, rotations and scale transformations that affect the meshes.
    3. Changes to the bones' pivot point without affecting the meshes.

    The first two types exist in Blender too, but the third does not. So the plugin does some extra tricks to mimic that. This is necessary to mimic the DAZ morphs exactly in Blender, but it comes with a performance cost. See

    ERC Morphs and FACS

    Morphing Armatures

    Morphing Armatures and Rendering  

    New Way to do Morphing Armatures

  25. Thomas Larsson repo owner

    It is not possible to use the Translation ERC method for FACS morphs, and the picture below shows why. To make it, I removed line 776 in morphing.py:

    disableErc = True
    

    Each individual FACS morph looks reasonably good, but the corrective shapekeys have small errors which seem to pile up for the Silly expression. The conclusion is that the Translation method is approximate and should only be used for a few morphs.

  26. Log in to comment