Futalicious/Dicktator morphs incorrect **scale maps not supported in blender**

Issue #1523 open
Realium created an issue

Hello, during my testing with the Futalicious and Dicktator geografts I’ve noticed some issues with a handful of the base morphs, primarily the erection and flaccid presets. All of them, except erection preset 01 seem to have issues with either rotations or scaling. There are also some morphs from Claire3DX such as thickness that have similar issues. It looks like the bones don’t scale down to where the shapekeys for those morphs would need them to be, resulting in visual problems.

As you can see from the screenshots below (NSFW) they appear very broken when used, I’m not sure if this is a known issue.

I’ve tested with both G8F and G8.1F with the MHX rig, although incorrect behaviour can be seen on the morphs prior to converting to MHX.

Diffeo - 1.7.0.1535

MHX - 1.7.0.0073

Blender 3.4.1

I’ve moved the images to the mega folder below.

https://mega.nz/folder/cg8HjAbb#MJZxQRqx-bVLa66b72L_ow

Comments (19)

  1. Alessandro Padovani

    daz studio 4.21.0.5, blender 3.5.0, diffeomorphic 1.7.0.1535

    The culprit seems to be “Scale All 1“ that doesn’t work fine. The reason is that the geograft is imported with inherit scale, even if it is disabled in the global settings. If we disable inherit scale before importing the custom morph then it works fine.

    steps (works fine):

    1. import G8F with futalicious and merge rigs
    2. disable inherit scale for the futalicious bones
    3. import “Scale All 1“

    steps (doesn’t work):

    1. import G8F with futalicious and merge rigs
    2. import “Scale All 1“
    3. disable inherit scale for the futalicious bones, this produces the deformations reported above

    p.s. @Realium you may want to moderate your pictures because this site is not age restricted and there may be children around. Though I understand that the issue requires some pictures of the geograft.

  2. Alessandro Padovani

    diffeomorphic 1.7.0.1541

    update. merge rigs bug.

    It seems it is merge rigs which sets the geografts to full inherit scale. That is, before merging rigs the geograft is correctly imported as no inherit scale, then after merge rigs it is full inherit scale.

    steps:

    1. uncheck inherit scale in global settings
    2. import G8F with a rigged geograft, I tested with futalicious but should be the same for any
    3. check the geograft bones, it is no inherit scale
    4. merge rigs
    5. check the geograft bones, it is full inherit scale

  3. Alessandro Padovani

    bug. important. about inherit scale.

    If we look at the joint editor in daz studio we see that inherit scale can be on or off for each bone. So this property should be imported as usual. Then the global settings could be used to force it on or off if needed, or to keep the daz value. Below an example where I set inherit scale for the hand bone.

    If we look at the duf file there’s no property for inherit scale if it is off, but there is if it is on. Meaning that no property means the default off.

    note. twist bones. It is interesting to note that the twist bones always inherit scale, even if it is off in the joint editor, so it seems they are treated by daz studio as a special case. Unless I miss something of how daz studio handles inherit scale.

  4. Alessandro Padovani

    update. how inherit scale works in daz studio.

    Ok I believe I got it.

    It seems in daz studio inherit scale is different than blender. That is, in blender the scale is inherited only from the parent bone. In daz studio it is inherited from all the parents up the chain. One way to implement this is by scale constraints.

    For example for the chain (collar > shoulder > forearm > hand), suppose we set inherit for shoulder, if we scale collar then all the children are scaled, but if we scale shoulder then the children are not scaled because they inherit from collar but not from shoulder.

    Twist bones seem an exception, they always inherit scale from parent but don't affect children, so they behave as the blender inherit scale.

    Now this kind of implementation is heavy for sure, so I wouldn’t recommend it, but can’t think of another way. Luckily most daz bones don’t inherit so we don’t have to.

    # daz studio inherit scale
    for each bone
        if it is a twist bone
            set inherit scale full in blender as usual
        else if the bone inherit scale from parent "x"
            set a scale constraint for this bone and all the children to copy scale from the bone "x"
    

  5. Thomas Larsson repo owner

    Merge rigs now keeps the inherit scale setting, and the importer sets it for bones. It doesn't seem to be a similar setting for objects in Blender, so child objects are scaled if the parent is and it inherits scale, cf attached file.

    I don't think we should use copy scale constraints. There are some formulas in the duf file that sets the rWrist scales from the rForeArm scales, but for some reason those formulas are ignored by the importer, even if Mesh Fitting is set to Morphed. Will look into that later.

  6. Alessandro Padovani

    Yes inherit scale in daz studio works different for objects, in that case it is the same as blender so no need for copy scale constraints. The procedure described above is only for figures/armatures and you can reproduce the issue by following the description.

    As for the scale formulas in the duf file that’s the exception for the twist bones I was noting above. I didn’t know where it came from. In this case we can make the formulas work, or to simplify things just use full inherit scale in blender as noted above.

  7. Thomas Larsson repo owner

    Now the scale formulas are imported for all twist bones, provided that the global setting Inherit Scale is off.

  8. Alessandro Padovani

    Commit 8450d60.

    The twist bones work fine.

    bug. futalicious scale. As for the futalicious “scale all 1” morph, it seems that lTesticle and rTesticle inherit scale from Scrotum in daz studio, but it doesn’t happen in blender. Thomas can you check if there’s scale formulas in futalicious ? May be we don’t import them. Otherwise I can’t explain why “Scale All 1” works in daz but not in blender.

    steps:

    1. import G8F with futalicious and merge rigs
    2. import “Scale All 1“ and test the morph, it scales all bones but not lTesticle rTesticle

  9. Thomas Larsson repo owner

    The testicles don’t inherit scale. Here is an excerpt from the dsf file:

                "id" : "Left Testicle",
                "name" : "lTesticle",
                "type" : "bone",
                "label" : "Left Testicle",
                "parent" : "#Scortum",
                "rotation_order" : "YZX",
                "inherits_scale" : false,
    

    Nor does the Scale All 1 morph create drivers for the testicles. The bones that get drivers are listed in the terminal window when you import morphs, after the line Building sum drivers:

    Load 2 morphs to Futalicious Genitalia.001
    Making morphs
     = Scale All 1 Scale All
     * Scale All 1
     * Scale All 2
    Making missing morphs level 0
    Building drivers
    Building sum drivers
     + shaft1
     + shaft2
     + shaft3
     + shaft4
     + shaft5
     + shaft6
     + shaft7
     + scrotum
    No rest drivers
    Folder  loaded in 0.743 seconds
    

  10. Alessandro Padovani

    Ok, thank you.

    Then it is a mystery how “Scale All 1“ works in daz studio but not in blender. For now we have to fix inherit scale by hand when it doesn’t match with daz studio. Unless someone can understand why this doesn’t work and how to fix it.

    We’ll keep this one open as unresolved issue. At least we made improvements.

  11. Thomas Larsson repo owner

    I found a difference between the scrotum (and shaft) bones and the testicles. The former have a Scale slider which the latter lack. I can’t find the setting that makes this difference, though.

  12. Thomas Larsson repo owner

    OK, I think I got it. If the general scale slider is hidden, then the bone inherits scale from its parent. Actually, what matters is not if the slider is visible in DS, but if it visible in the source file that defines the asset in the first place.

    At least this works in this case. We should look out for strange scaling behaviour in the future.

  13. Alessandro Padovani

    Thank you for looking at this. I had another look too and I believe the reason is different.

    If we look at the joint editor in daz studio we see that inherit scale for testicles is off, indeed when we scale the parent scrotum the children testicles are not scaled in daz studio. However, if we look at the weight maps in daz studio we see that we also have scale maps. The scale map for the scrotum includes the geometry area for the testicles, and that’s why the scrotum affects the testicles too.

    Unfortunately, since scale maps are not supported in blender I believe we cannot reproduce the daz behavior. So when scale maps are used the scaling will be different in blender.

    p.s. One idea could be to always sum general weight and scale weight in blender, so to have an approximation. But this way the daz weight map would affect the bending deformations too in blender and jcms would not work fine, plus the weight map will be different anyway, so may be this idea makes more damage than benefit.

    # possible approximation, but very bad
    blender general weight = normalize(daz general weoght + daz scale weight)
    

    p.p.s. For this reason we need to reverse the last commit since it introduces “random” scaling inheritance, not the same as daz. For explanation how inheritance works in daz please see my comments above.

  14. Thomas Larsson repo owner

    Reverted previous commit. Changed status to task since it is not a bug but an incompatibility between Blender and DS.

  15. Log in to comment