Still remain fail to generate scale constrain, (only drv bone scale)

Issue #1118 closed
engetudouiti created an issue

When I import G3, and import basic morphs only, I often see add on set driver for a few facial lip drv bones.

At current I find 2 lip bones usually set Z scale(blender bone axis) driver.

LipLowerMiddle(drv) and LipUpperMiddle(drv)

I do not know which morph drive it clear, then I check some lip bones in daz studio,

Then actually these 2 lip bone daz Y scale was driven by visemes

LipLowerMiddel was driven by eCtrlLvW = (W)

LipUpperMiddel was driven by eCtrlLvF = (F)

as my simple test, generated driver seems scale drv bone for blender axis, correctly.

But even though drv bone driven and change scale, without you set Scale Constrain for deform bone, it never deform.

I think you currently set Scale as False not to generate scale driver constrain. But at least about facial bone, and some body bone can easy attach scale constrain without complex chain scale, or connected/not problem.

I may recommend these things, to work facial scale bone controller

1_ set drv bone scale driver as same as before. when import basic morphs

2_ current add on seems failed to generate driver when Daz use general scale as key (not describe each bone axis , but use General scale) as key. (see issue #1117), iimporter seems try to set driver for first axis only. but general scale is most simple one, so it need to generate driver correctly for al scale axis. (no need to convert axis ^^; it should be more easy)

(seems general scale problem already solved thanks ^^)

3_ you may make bone list then when add scale constrain, if it not break rig , you add constrain. (if you think, all scale morph should work for all pose bone, simply generate scale constrain, as same as rotation/ translate, but I afraid some bone will cause issue, when user try to import complex control, which change each chain bone scale.. (so this is option.. if some bone not work well, I may report , so you can remove constrain, only about these bone)

4. you may better to change current “Make bones posable” function, at current all scene which saved before, simply can not add new constrain type. if other constrain already used for the deform bone. (then there seems no meaning to finalize mesh I feel,,without user remove some custom morphs >> but when user tyr it, UI easy break,,,so maybe you not recommend it..

===============================

about lip scale constrain it seems work now. (but it may depend how we install morphs with many options) see my last reply.

then sometimes add on may generate all constrain, but sometimes, miss, when user try to import new morph. which use transfomr bone. The main problem is, “Make all bones posable” function.

Comments (14)

  1. engetudouiti reporter

    Then I already set constrain with script,, so some scene lip have scale constrain .but some not. (but I do not remember, which scene I run script clear )

    But import new g3 scene >> import basic morphs with all bones posable option, current add on not add scale constraints for these lip bones (but drv bone only scale Z axis)

    you may think it is small effect, but actually not, it add thick for lip clear with W. (scale along with Z axis)

    if it work correctly.

    Then I try to apply Finishing >> “Make all bones posable” , it never add constrain for the lip.

    I run my custom script (check drv and add constrain when it not), it out-put console,

    lHeel(drv) lHeel rotation
    rHeel(drv) rHeel rotation
    lowerJaw(drv) lowerJaw location
    lowerJaw(drv) lowerJaw rotation
    rBrowInner(drv) rBrowInner location
    rBrowMid(drv) rBrowMid location
    rBrowOuter(drv) rBrowOuter location
    lBrowInner(drv) lBrowInner location
    lBrowMid(drv) lBrowMid location
    lBrowOuter(drv) lBrowOuter location
    CenterBrow(drv) CenterBrow location
    MidNoseBridge(drv) MidNoseBridge location
    MidNoseBridge(drv) MidNoseBridge rotation
    lEyelidInner(drv) lEyelidInner location
    lEyelidInner(drv) lEyelidInner rotation
    lEyelidUpperInner(drv) lEyelidUpperInner location
    lEyelidUpperInner(drv) lEyelidUpperInner rotation
    lEyelidUpper(drv) lEyelidUpper location
    lEyelidUpper(drv) lEyelidUpper rotation
    lEyelidUpperOuter(drv) lEyelidUpperOuter location
    lEyelidUpperOuter(drv) lEyelidUpperOuter rotation
    lEyelidOuter(drv) lEyelidOuter location
    lEyelidOuter(drv) lEyelidOuter rotation
    lEyelidLowerOuter(drv) lEyelidLowerOuter location
    lEyelidLowerOuter(drv) lEyelidLowerOuter rotation
    lEyelidLower(drv) lEyelidLower location
    lEyelidLower(drv) lEyelidLower rotation
    lEyelidLowerInner(drv) lEyelidLowerInner location
    lEyelidLowerInner(drv) lEyelidLowerInner rotation
    rEyelidInner(drv) rEyelidInner location
    rEyelidInner(drv) rEyelidInner rotation
    rEyelidUpperInner(drv) rEyelidUpperInner location
    rEyelidUpperInner(drv) rEyelidUpperInner rotation
    rEyelidUpper(drv) rEyelidUpper location
    rEyelidUpper(drv) rEyelidUpper rotation
    rEyelidUpperOuter(drv) rEyelidUpperOuter location
    rEyelidUpperOuter(drv) rEyelidUpperOuter rotation
    rEyelidOuter(drv) rEyelidOuter location
    rEyelidOuter(drv) rEyelidOuter rotation
    rEyelidLowerOuter(drv) rEyelidLowerOuter location
    rEyelidLowerOuter(drv) rEyelidLowerOuter rotation
    rEyelidLower(drv) rEyelidLower location
    rEyelidLower(drv) rEyelidLower rotation
    rEyelidLowerInner(drv) rEyelidLowerInner location
    rEyelidLowerInner(drv) rEyelidLowerInner rotation
    lSquintInner(drv) lSquintInner location
    lSquintOuter(drv) lSquintOuter location
    rSquintInner(drv) rSquintInner location
    rSquintOuter(drv) rSquintOuter location
    lCheekUpper(drv) lCheekUpper location
    rCheekUpper(drv) rCheekUpper location
    Nose(drv) Nose location
    Nose(drv) Nose rotation
    lNostril(drv) lNostril location
    lNostril(drv) lNostril rotation
    rNostril(drv) rNostril location
    rNostril(drv) rNostril rotation
    lLipBelowNose(drv) lLipBelowNose location
    lLipBelowNose(drv) lLipBelowNose rotation
    rLipBelowNose(drv) rLipBelowNose location
    rLipBelowNose(drv) rLipBelowNose rotation
    lLipUpperOuter(drv) lLipUpperOuter location
    lLipUpperOuter(drv) lLipUpperOuter rotation
    lLipUpperInner(drv) lLipUpperInner location
    lLipUpperInner(drv) lLipUpperInner rotation
    LipUpperMiddle(drv) LipUpperMiddle location
    LipUpperMiddle(drv) LipUpperMiddle rotation
    LipUpperMiddle(drv) LipUpperMiddle scale
    @Add LipUpperMiddle  add scale constrain
    rLipUpperInner(drv) rLipUpperInner location
    rLipUpperInner(drv) rLipUpperInner rotation
    rLipUpperOuter(drv) rLipUpperOuter location
    rLipUpperOuter(drv) rLipUpperOuter rotation
    lLipNasolabialCrease(drv) lLipNasolabialCrease location
    rLipNasolabialCrease(drv) rLipNasolabialCrease location
    lNasolabialUpper(drv) lNasolabialUpper location
    rNasolabialUpper(drv) rNasolabialUpper location
    lNasolabialMiddle(drv) lNasolabialMiddle location
    rNasolabialMiddle(drv) rNasolabialMiddle location
    lEye(drv) lEye rotation
    rEye(drv) rEye rotation
    lNasolabialLower(drv) lNasolabialLower location
    lNasolabialLower(drv) lNasolabialLower rotation
    rNasolabialLower(drv) rNasolabialLower location
    rNasolabialLower(drv) rNasolabialLower rotation
    lNasolabialMouthCorner(drv) lNasolabialMouthCorner location
    rNasolabialMouthCorner(drv) rNasolabialMouthCorner location
    lLipCorner(drv) lLipCorner location
    lLipCorner(drv) lLipCorner rotation
    lLipLowerOuter(drv) lLipLowerOuter location
    lLipLowerOuter(drv) lLipLowerOuter rotation
    lLipLowerInner(drv) lLipLowerInner location
    lLipLowerInner(drv) lLipLowerInner rotation
    LipLowerMiddle(drv) LipLowerMiddle location
    LipLowerMiddle(drv) LipLowerMiddle rotation
    LipLowerMiddle(drv) LipLowerMiddle scale
    @Add LipLowerMiddle  add scale constrain
    rLipLowerInner(drv) rLipLowerInner location
    rLipLowerInner(drv) rLipLowerInner rotation
    rLipLowerOuter(drv) rLipLowerOuter location
    rLipLowerOuter(drv) rLipLowerOuter rotation
    rLipCorner(drv) rLipCorner location
    rLipCorner(drv) rLipCorner rotation
    LipBelow(drv) LipBelow location
    LipBelow(drv) LipBelow rotation
    Chin(drv) Chin location
    Chin(drv) Chin rotation
    lCheekLower(drv) lCheekLower location
    rCheekLower(drv) rCheekLower location
    BelowJaw(drv) BelowJaw location
    lJawClench(drv) lJawClench location
    rJawClench(drv) rJawClench location
    lPectoral(drv) lPectoral rotation
    rPectoral(drv) rPectoral rotation
    

    you may see it check all drv first, then only when there is no same type constrain, it add constrain. so about this case, it only add scale consrtrain for 2 lip bones with start @ mark

    = it is real correction. (then user can check what is going on, and which constrain was added clear)

    Then If we do not have scale constrain >>just use add on offer, Make all bones posable >> Finalize armature

    it simply freeze and remove un-necessary one (if it was generated), without necessary constrain. then not forgive user to add new constrain with your add on any-more. so I think it is simply un-useful. then recommend just change your up-date function more reliable one first.

  2. engetudouiti reporter

    It now partially solve issue. but it remain case which not work.☹

    I think new version add Copy scale for facial lip bone when I import thanks. (it seems depend which option I use to install morphs, Then I notice, there remain case which not generate scale constraint) .

    I test with easy import (it may try to import all facial bone basic morphs)

    I test with import as standard morphs (it also try to import all facial bone basic morphs at same time)

    About these case, add on seems generate scale constrain for both lips as same as other const.

    but then now I add new custom controller, which try to change scale for other bone.

    eg at current Pectoral bone only have Transform and rotation constrain.

    Then I import general scale pectoral morph (cotroller). now add on can generate drv for al axis scale.

    (thanks!), but it not generate scale constraints for pectoral bone.

    Then now I use Finish> make all bones posable but it not generate scale constrain for pectoral.

    That means same thing will happen for many facial bone. some bone may have 3 constrain. but some not have scale constrain. then when I import new vendor morph which try to scale them, it not work.

    So I keep open this topic.

    untill you can offer “Make all bones posable” should generate constrain which currently used for drv,

    at same time if it can remove un-necessary one, it is best. (my script not do it at current = not finalize, but must add constrain which currently used for drv) Then we no need to use “Finalize armature”

    ====
    then my purpose was simply add some scale, rot, loc controller for merged gen bone. my G3 gen is really simple structure, it only have 2 merged bone, then I may need to control without import many shape morphs,

    but for these issue, add on miss generate constrain often. (maybe it only work when I import morph which use all constrain first,,) if I add new one later, add on often miss generate constrain. and there is no way without user manually add it.. but new morph system driver is complex = it is not easy to add driver forumula , so I hope, simply import as custom morph >> generate drv, and constrain correctly.

    (though to it work, I must need to make daz controller morph first, I think it is usual to work with current add on morph system )

  3. Thomas Larsson repo owner

    Make All Bones Posable now creates a copy scale constraint too. I thought I could get away with skipping that, but apparently not.

  4. engetudouiti reporter

    Thanks I am already made test Scale morph for head and pectoral so if it work correctly , I can happy close this issue^^

    As you said I do not hope to add un-necessary constrain, if we can.. but at current I can not confirm actually hand-made or added vendor morphed worked correctly or not. so up-date function is most important.

  5. engetudouiti reporter

    No it still not work unfortunatelly,, or you think make all bones posable only work when I generate rig from scratch?😫

    I clear see, drv are made when import scale control morphs. correctly added. (general scale oK) but no scale constrain generated..

    I checked make all bones posable when I import these morphs, + after import, I click “make all bones posable”

    I confirm currently used version and source with git up-date, then I can see I use recent version. (I de-activate and activate add on to confirm up-date) So you may need to check how your “make all bones posable” work ..

    As for me I can correct it with my script, but if others try to use it, >. finalize armature >> convert rig >> it may remain some un-suable controller,

    and there is no way easy correct it. at same time finalize armature make things more difficult when user notice problem and try to correct it, I suppose.

  6. engetudouiti reporter

    🤔 I now try to read your script, then check Make all bones posable class, function,

    but I do not know why it miss up-date.. I see you actually try to check each drv types…

    But how I use “make all bones posable”, it never add new constrain, when I import morph which need to add new constrain.. and FInish >> make all bones posable.

    you may check this output log?

      Rig Genesis 3 Female already has extra driven bones
      Rename bones
      Change constraints
      Restore bone drivers
      Restore sum drivers
      Update scripted drivers
      Update drivers
      Update vertex groups
      Update shapekeys
    Make All Bones Posable completed in 2.3 seconds
    Rig Genesis 3 Female already has extra driven bones
      Rename bones
      Change constraints
      Restore bone drivers
      Restore sum drivers
      Update scripted drivers
      Update drivers
      Update vertex groups
      Update shapekeys
    Make All Bones Posable completed in 2.3 seconds
    

    My import 2 facial bone morphs were, one try to use facial bone scale, another try to use rotation for facial bones.

    to make it work, I must need to add new constrain, for some facial bones. (which have no constrain for the transform)

  7. engetudouiti reporter

    I may hope you modify your out-put log, when I use make all bones posable (import option / finish option)

    to show each constrain for each bone. (temporally to solve this issue)

    I suppose if it failed, or even though add on notice, it, it simply miss generate constrain I suppose.. it seems only check which type drv used,, (loc , rot, scale) but do nothing for deform bone… I suppose you do almost same thing more smart way (so I really know only about basic python)

    about this scene,, my scirpt catch these (I run my script after use “make all bones posable” compledted)

    as you can see, there are many constrain, which actually need to generate.. (@ start)

    Make All Bones Posable completed in 2.3 seconds
    lHeel(drv) lHeel rotation
    rHeel(drv) rHeel rotation
    lowerJaw(drv) lowerJaw location
    lowerJaw(drv) lowerJaw rotation
    rBrowInner(drv) rBrowInner location
    rBrowInner(drv) rBrowInner rotation
    rBrowMid(drv) rBrowMid location
    rBrowOuter(drv) rBrowOuter location
    lBrowInner(drv) lBrowInner location
    lBrowInner(drv) lBrowInner rotation
    lBrowMid(drv) lBrowMid location
    lBrowOuter(drv) lBrowOuter location
    CenterBrow(drv) CenterBrow location
    CenterBrow(drv) CenterBrow rotation
    @Add CenterBrow  add rot constrain
    MidNoseBridge(drv) MidNoseBridge location
    MidNoseBridge(drv) MidNoseBridge rotation
    lEyelidInner(drv) lEyelidInner location
    lEyelidInner(drv) lEyelidInner rotation
    lEyelidUpperInner(drv) lEyelidUpperInner location
    lEyelidUpperInner(drv) lEyelidUpperInner rotation
    lEyelidUpper(drv) lEyelidUpper location
    lEyelidUpper(drv) lEyelidUpper rotation
    lEyelidUpperOuter(drv) lEyelidUpperOuter location
    lEyelidUpperOuter(drv) lEyelidUpperOuter rotation
    lEyelidOuter(drv) lEyelidOuter location
    lEyelidOuter(drv) lEyelidOuter rotation
    lEyelidLowerOuter(drv) lEyelidLowerOuter location
    lEyelidLowerOuter(drv) lEyelidLowerOuter rotation
    lEyelidLower(drv) lEyelidLower location
    lEyelidLower(drv) lEyelidLower rotation
    lEyelidLowerInner(drv) lEyelidLowerInner location
    lEyelidLowerInner(drv) lEyelidLowerInner rotation
    rEyelidInner(drv) rEyelidInner location
    rEyelidInner(drv) rEyelidInner rotation
    rEyelidUpperInner(drv) rEyelidUpperInner location
    rEyelidUpperInner(drv) rEyelidUpperInner rotation
    rEyelidUpper(drv) rEyelidUpper location
    rEyelidUpper(drv) rEyelidUpper rotation
    rEyelidUpperOuter(drv) rEyelidUpperOuter location
    rEyelidUpperOuter(drv) rEyelidUpperOuter rotation
    rEyelidOuter(drv) rEyelidOuter location
    rEyelidOuter(drv) rEyelidOuter rotation
    rEyelidLowerOuter(drv) rEyelidLowerOuter location
    rEyelidLowerOuter(drv) rEyelidLowerOuter rotation
    rEyelidLower(drv) rEyelidLower location
    rEyelidLower(drv) rEyelidLower rotation
    rEyelidLowerInner(drv) rEyelidLowerInner location
    rEyelidLowerInner(drv) rEyelidLowerInner rotation
    lSquintInner(drv) lSquintInner location
    lSquintOuter(drv) lSquintOuter location
    rSquintInner(drv) rSquintInner location
    rSquintOuter(drv) rSquintOuter location
    lCheekUpper(drv) lCheekUpper location
    rCheekUpper(drv) rCheekUpper location
    Nose(drv) Nose location
    Nose(drv) Nose rotation
    Nose(drv) Nose scale
    @Add Nose  add scale constrain
    lNostril(drv) lNostril location
    lNostril(drv) lNostril rotation
    rNostril(drv) rNostril location
    rNostril(drv) rNostril rotation
    lLipBelowNose(drv) lLipBelowNose location
    lLipBelowNose(drv) lLipBelowNose rotation
    rLipBelowNose(drv) rLipBelowNose location
    rLipBelowNose(drv) rLipBelowNose rotation
    lLipUpperOuter(drv) lLipUpperOuter location
    lLipUpperOuter(drv) lLipUpperOuter rotation
    lLipUpperInner(drv) lLipUpperInner location
    lLipUpperInner(drv) lLipUpperInner rotation
    LipUpperMiddle(drv) LipUpperMiddle location
    LipUpperMiddle(drv) LipUpperMiddle rotation
    LipUpperMiddle(drv) LipUpperMiddle scale
    rLipUpperInner(drv) rLipUpperInner location
    rLipUpperInner(drv) rLipUpperInner rotation
    rLipUpperOuter(drv) rLipUpperOuter location
    rLipUpperOuter(drv) rLipUpperOuter rotation
    lLipNasolabialCrease(drv) lLipNasolabialCrease location
    rLipNasolabialCrease(drv) rLipNasolabialCrease location
    lNasolabialUpper(drv) lNasolabialUpper location
    rNasolabialUpper(drv) rNasolabialUpper location
    lNasolabialMiddle(drv) lNasolabialMiddle location
    rNasolabialMiddle(drv) rNasolabialMiddle location
    lEye(drv) lEye rotation
    rEye(drv) rEye rotation
    lNasolabialLower(drv) lNasolabialLower location
    lNasolabialLower(drv) lNasolabialLower rotation
    rNasolabialLower(drv) rNasolabialLower location
    rNasolabialLower(drv) rNasolabialLower rotation
    lNasolabialMouthCorner(drv) lNasolabialMouthCorner location
    lNasolabialMouthCorner(drv) lNasolabialMouthCorner rotation
    @Add lNasolabialMouthCorner  add rot constrain
    rNasolabialMouthCorner(drv) rNasolabialMouthCorner location
    rNasolabialMouthCorner(drv) rNasolabialMouthCorner rotation
    @Add rNasolabialMouthCorner  add rot constrain
    lLipCorner(drv) lLipCorner location
    lLipCorner(drv) lLipCorner rotation
    lLipLowerOuter(drv) lLipLowerOuter location
    lLipLowerOuter(drv) lLipLowerOuter rotation
    lLipLowerInner(drv) lLipLowerInner location
    lLipLowerInner(drv) lLipLowerInner rotation
    LipLowerMiddle(drv) LipLowerMiddle location
    LipLowerMiddle(drv) LipLowerMiddle rotation
    LipLowerMiddle(drv) LipLowerMiddle scale
    rLipLowerInner(drv) rLipLowerInner location
    rLipLowerInner(drv) rLipLowerInner rotation
    rLipLowerOuter(drv) rLipLowerOuter location
    rLipLowerOuter(drv) rLipLowerOuter rotation
    rLipCorner(drv) rLipCorner location
    rLipCorner(drv) rLipCorner rotation
    LipBelow(drv) LipBelow location
    LipBelow(drv) LipBelow rotation
    Chin(drv) Chin location
    Chin(drv) Chin rotation
    lCheekLower(drv) lCheekLower location
    lCheekLower(drv) lCheekLower rotation
    @Add lCheekLower  add rot constrain
    lCheekLower(drv) lCheekLower scale
    @Add lCheekLower  add scale constrain
    rCheekLower(drv) rCheekLower location
    rCheekLower(drv) rCheekLower rotation
    @Add rCheekLower  add rot constrain
    rCheekLower(drv) rCheekLower scale
    @Add rCheekLower  add scale constrain
    BelowJaw(drv) BelowJaw location
    BelowJaw(drv) BelowJaw rotation
    @Add BelowJaw  add rot constrain
    lJawClench(drv) lJawClench location
    lJawClench(drv) lJawClench scale
    @Add lJawClench  add scale constrain
    rJawClench(drv) rJawClench location
    rJawClench(drv) rJawClench scale
    @Add rJawClench  add scale constrain
    lPectoral(drv) lPectoral rotation
    rPectoral(drv) rPectoral rotation
    

  8. Thomas Larsson repo owner

    All copy constraints are created the first time the bone is made posable. So if you made the bone posable with the previous version that missed the scale constraints, those are not generated, no.

    I don’t want to mess too much with the code that works.If it is important to you I could make a tool that removes the drv bones, so you could regenerate them from scratch.

  9. engetudouiti reporter

    Thomas almost all G3 figure scene, which user had made with make all bones posable with other version may keep to lost lip scale modify, even though it is used by basic morphs Vismes. and you had set driver for drv bone.

    Then pectoral bone auto added Rotation constrain, because it is used by sholder move.. then when you import transform pose controll, it only generate drv, and they never worked.

    So about those scene, your “Make all bones posable” can correct those when user first use it?

    or you think no, they need to re-generate ? (I just ask how it work, if you confirm I understand, your tool how work. or I really do not know how I can use “all bones posable” correctly.

  10. engetudouiti reporter

    mmm,,, Ok I may close it, because at least I have script for g3,, so without I miss something it work for me,

    but I really think you may better to make (and rename) function to up-date constrain (or resume for up-date)

    because you have offered Make all bones posable always. and it not means, Up-date (resume) constrain. it is for set driver, and drv bone + make constrain (sometimes it have failed)

    I think you needed to add it as different function. eg “Update Constrain” (so it only used to re-sume constrain, when some constrain broken or miss, then if it not work, you can correct it without touch “make all bones posable”

  11. Log in to comment