Importing Custom JCM/Flexions doesnt create driver

Issue #331 resolved
Steven Aston created an issue

Want to take a second to thank you for the amazing work you have done on this plugin. Been using it since 2019, and the progress you have made lately is awesome!

So the issue im having is trying to import the Zevo Bend control morphs. (https://www.daz3d.com/bend-control-for-genesis-8-male-s)

When I import them as custom JCM, it says why am I trying to import flexions? So I tried using the custom flexions instead, and here it imports the morphs, but it just creates shapekeys and doesn't create any drivers.

Comments (22)

  1. Steven Aston reporter

    Yes, but that just imports the default flexions. It doesnt select the bend control ones. I have to use custom to be able to select them.

  2. engetudouiti

    custom flextion bascially only work when you bend etc, so it may not generate controller, but may work when you pose bone (driven by bone)

  3. engetudouiti

    I think, add on can not full support about your link prodcut..

    usually zevo shape controller need many ERC to it work in daz studio, I do not think add on can full support (import all with auto set driver for each morph relation) the product.

    Maybe you can import shape morph individually as custom morph,, or you can import basic flexion morphs, (which may change with bone pose) but may not auto set ERC as same as daz way. so some controler may not generated,. and even though you can import all , some morph, controller may not keep relation.

    do you check log in console? it may offer which file could not import .

  4. Steven Aston reporter

    Its not a compatibility issue with the morphs. The bend control JCMs worked fine in version 1.41 with 2.79, They stopped working when I switched over to 2.81 and 1.42. Figured it would come back since it was the dev version and just kept using 2.79 to import and add the bend control, then finished up in 2.81. But I have now switched to over to the latest version and noticed its still not working, hence opening this issue.

  5. Xin

    Yes, I agree with Steven, there are cases where the addon could create drivers, but doesn’t. The hard part, the code for reading formulas and creating Drivers, is already there, so it would make sense to fix that (at least for Steven’s case that is basically a JCM).

    Related: see the last message in #311 .

  6. Thomas Larsson repo owner

    This part of the code has been quite messy. It still is, but I think that I have brought some order to it. In the last commits, there is a change to the UI: the Import Custom JCMs and Import Custom Flexions buttons are gone, and instead all kinds of custom morphs are handled by Import Custom Morphs. This button has some new options:

    • Property Drivers: Drive morph with rig properties.
    • Bone Drivers: Drive morph with bone rotations (JCMs).
    • Double Drivers: Drive morph with both type of drivers.

    Property drivers are only created if no bone driver is found, or if Double Drivers is enabled. The advantage of collecting everything into a single tool, apart from reducing the number of buttons, is that you can import all morphs in a directory, and they are automatically divided into different types.

  7. Xin

    Yes, I really like that change. Much cleaner, and allows for future new cases to be handled there too, without cluttering the UI with an ever increasing number of buttons.

    I will test it later or tomorrow. Thanks again Thomas.

  8. Steven Aston reporter

    @Thomas Larsson Wow That was fast! Thank you so much, I really Appreciate it! 😃 Just tried it out, works great, all drivers loaded properly, JCMs working nicely 😎
    I like the UI change as well 👍

    FYI, Import custom JCM button is still there 😉

    PS, where can I go to ask a few questions about the material converter? Dont want to start an “issue” for that since its just a question.

  9. Steven Aston reporter

    Just noticed the drivers for the FlexBiceps are incorrect, Set to Forearm twist bone instead of forearm bend bone.

  10. engetudouiti

    If double driver option work well, huge progress thanks.Then I have bunch of questions about current import morphs. I think it related with this topic, but I may make new topic, if you hope to close as solved)

    what I need to know is,, when it may not work. .Some vendor offer master controller for their morph package, which can adjust each morph effect .

    master controller are usually just multiple with other morphs value so user can adjust how it work. it may be offered as ON and OFF all controller (boolean) type, or sometimes vendor offer each JCM multipler with jcm name. to adjust effect as advance option.

    and Xin case,, (characterJCM which made to work only for sepcific character morph like PBMVictoria7 . there are many type morph which work only with character morph.)

    Then I hope to know these sepcific case.

    1_ jcmCustom1.dsf (bone move this shape key) = it already work. then usually this morphs are hidden. so we need not controller.

    2_ F(P)BMXXX.dsf (partially OK though edit bone not auto adjust to shape, then may not use often. and if user already include this morph value, I suppose plug in not keep current FBM or PBM value. (so when we import this morph, , even though we already use FBMXXX as 0.3 for character, it will be shown as 0 )

    3_ pjcmXXXCustom1.dsf ( this morph are multipled with F(P)BMXXX.dsf . and JCMcustom 1 value. It is supposed to adjust jcmCustom1.dsf effect, only for the character(XXX) . Then it change effect with the F(P)BMXXX value. )

    4_ mutliple controller of vendor JCMs or Flextions . There are 2 cases, it only change one JCM effect. or it change multiple JCMs effect at same time (like group master controller)

    I mainly hope Thomas confitm about 3 and 4. they will be imported correctly, with current options?

    about 3 ,I think when user import type 3 character JCMs, it may not show right effect with many case.

    because usually we mix Aiko7 or Victoria7 etc. so if user mix Aiko7 as 0.3. the Aiko7 character JCM need to be multipled as 0.3 , but add on can not find the value when we import I think.

    So I may request, if there is way user can control it when import. (eg,, when import character specific JCMs,, offer mutliple controller,,, which can only change same character JCMs . like group.

    then we can manually input correct value. for them. actually I have not imported those character jcms, but as read your document, and current progress,, if we import those character jcm often,, it may need. (or it not work as user expect)

  11. Thomas Larsson repo owner

    Steven, the biceps bug should be gone. Well, not really. The code currently only allows shapekeys to be driven by a single bone, because all jcms behave like that. The biceps morph is driven by both the bend and twist bones, however, and the second bone was chosen. Now it is only driven by the bend bone. This is not correct, but the influence of the twist bone is not so easy to see.

  12. Thomas Larsson repo owner

    engetudouiti, the plugin loads JCMs driven by bones (actually only by a single bone, but that should change), and other morphs driven by properties.

    If you want to mix JCMs for Aiko and Victoria you need to import both and use the Mix Shapekeys tool. Both JCMs are imported at full strength. There used to be a strength parameter that multiplied the shapekeys, but I never used it and removed it at some point. It might be an idea to bring it back. The plugin doesn’t keep track of the character mix, but if you import Aiko JCMs at strength 0.3 and Victoria JCMs at strength 0.7 you should get the right mix, provided that the shapekey names don’t clash.

  13. Steven Aston reporter

    Just grabbed the latest build with the bicep fix, this build is giving an error on the custom morph import.

    ython: Traceback (most recent call last):
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.91\scripts\addons\Diffeomorphic-import_daz-adf7f7afb8f2\error.py", line 247, in execute
    self.run(context)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.91\scripts\addons\Diffeomorphic-import_daz-adf7f7afb8f2\morphing.py", line 949, in run
    props = self.getAllMorphs(namepaths, context)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.91\scripts\addons\Diffeomorphic-import_daz-adf7f7afb8f2\morphing.py", line 702, in getAllMorphs
    missing = self.getPass(passidx, list(namepaths.items()), props, scn)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.91\scripts\addons\Diffeomorphic-import_daz-adf7f7afb8f2\morphing.py", line 731, in getPass
    props1,miss = self.getSingleMorph(name, path, scn)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.91\scripts\addons\Diffeomorphic-import_daz-adf7f7afb8f2\morphing.py", line 600, in getSingleMorph
    isBoneDriven = self.buildShapeFormula(asset, scn, self.rig, self.mesh)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.91\scripts\addons\Diffeomorphic-import_daz-adf7f7afb8f2\formula.py", line 384, in buildShapeFormula
    ok = self.buildSingleShapeFormula(expr["value"], rig, ob, skey, verbose)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.91\scripts\addons\Diffeomorphic-import_daz-adf7f7afb8f2\formula.py", line 408, in buildSingleShapeFormula
    makeSomeBoneDriver(expr, skey, "value", rig, ob, bname, -1)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.91\scripts\addons\Diffeomorphic-import_daz-adf7f7afb8f2\formula.py", line 424, in makeSomeBoneDriver
    uvec = convertDualVector(vec/D, pb, False)
    TypeError: unsupported operand type(s) for /: 'list' and 'float'

    location: <unknown location>:-1

  14. engetudouiti

    @Thomas

    Yes about character JCM mixing it is what I means. I usually mix Aiko, or Victoria with another G3character .. so mostly single character JCM is matter. or maybe choose most used Character value JCM. (if I really add those JCM to improve bend posing more) ,

    after all to work correctly we must need to multiple the character PBM value for all “same character JCMs”. but not need muilitple about “base JCMs” or not multiple different character JCMs

    and I think if a few user may miss understand, but we need not import Vicitoria7 PBM to import Victoria7 jcms for this add on improted character. (of cousre you can do it ,if you hope to add some V7 taste,, later,,)

    but it is already baked. when we make and exprot from daz,. so we only need to keep victoria 7 PBM value in text. file, which used for the character, then need to multiple the value for all Victoria7 related JCM which we import by add on.

    ., but not multiple with other shape key, and base JCMs

    So I may request or hope to find good way, without manually serch the character JCM shape keys after import, but can group character jcms (which may need multiple) and separate another JCMs (which need not mutliple or need different multiple values) add on will offer as advance option. (but do not know clear how we can do it )

    about base JCM we need not any multipler, but as I said, it may not bad if you offer simple all jcm mutlipler too… (so user can check the defomation cuased by JCM or not,, if we hope to remove JCM effect may set as 0. then if JCM happend to work bad for some posing,, we may hope to ease it,, with multipler like 0.5 (though it is simply multiple all base character JCM like genesis3 JCMs)

    About these things are basically user need manual work with planning clear,, so I hope some good way or ease our work. as future request.. (of course the importance is quite law I understand)

  15. Thomas Larsson repo owner

    Steven, the crash should be gone. Strange that it did not happen to me.

    engetudouiti, mixing character-specific jcms is for the advanced user only. Such a user can keep track of the character mix in DS, and then import the jcms with the appropriate weights. Or import several types of jcms at full strength and mix them together in Blender. The plugin cannot guess everything that a user wants to do, and better to provide the basic tools only.

  16. engetudouiti

    @Thomas

    I agree. I just hoped to know current limitation. In doc you wrote about full Aiko and Aiko JCMs. so I worry if some of user may import those character JCMs, without care mixing value. (or believe plug in auto adjust it , when it need)

  17. Steven Aston reporter

    Thomas, I am now getting this error with the latest build.

    Traceback (most recent call last):
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\error.py", line 247, in execute
    self.run(context)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\morphing.py", line 949, in run
    props = self.getAllMorphs(namepaths, context)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\morphing.py", line 702, in getAllMorphs
    missing = self.getPass(passidx, list(namepaths.items()), props, scn)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\morphing.py", line 731, in getPass
    props1,miss = self.getSingleMorph(name, path, scn)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\morphing.py", line 600, in getSingleMorph
    isBoneDriven = self.buildShapeFormula(asset, scn, self.rig, self.mesh)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\formula.py", line 382, in buildShapeFormula
    ok = self.buildSingleShapeFormula(expr["value"], rig, ob, skey, verbose)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\formula.py", line 406, in buildSingleShapeFormula
    makeSomeBoneDriver(expr, skey, "value", rig, ob, bname, -1)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\formula.py", line 422, in makeSomeBoneDriver
    uvec = convertDualVector(vec, pb, False)
    File "C:\Users\Steven\AppData\Roaming\Blender Foundation\Blender\2.83\scripts\addons\Diffeomorphic-import_daz-03a9cf8494e4\formula.py", line 465, in convertDualVector
    nvec[i] = uvec.dot(Vector(euler))
    AttributeError: 'list' object has no attribute 'dot'

    location: <unknown location>:-1

  18. Thomas Larsson repo owner

    Steven, now I was able to reproduce the bug. It should be gone now. With the last commit, I have imported all standard jcms, flexions, and the bend control morphs. Nothing crashed and the results look reasonable.

  19. Log in to comment