generate JCM raw prop slider as gathered JCM group with option + add raw value in JCM expression

Issue #439 resolved
engetudouiti created an issue

It is kind of advacne enhancement, to adjust JCM effect easy by user. (and we can do same thing in daz, when we show hidden props)

At current, add on already generate JCM(raw) property, as Rig[“pJCMcollorUP50_L”]

all JCM raw prop (user tweakable property which not set driver) are generated as Object ID props as same as other morphs.then all JCM fin prop (driven property by bone pose and other props) are generate as Object data ID props. so we can check them in blender property. or in 3d views property (they are only visible when you change rig as objecct mode in 3d view)

At current,, JCM raw props are not included in fin driver expresison. so even though add on generate them, (as same as other morph raw property,.. we can not use it, without user manually add it in fin driver expression. But it is usualll workflow, show hidden props, and adjust JCM when we need,, if the actor do not have good JCM which fit current morphed actor shape.

you may confirm by this pic,, we only need to show hidden props, then can adjust JCM slider to 100 (1.0) to 0 as I like which currently working. (collar JCM defomaiton)

that means we adjust raw JCM value from 0 to -100. in pic I adjust JCM as 42.7 ,, actually it means I adjust JCM raw as -57.3 (if I make it work I need to set raw as -0.527 then fin value show as 0.473 in blender, if you add raw value in fin driver expression.

Then I hope 2 things

  1. anyway add raw value in expression of fin value driver.. so we can adjust it if user need it. by each JCM as same as daz, you already do same things for other morphs, so I think it may not so hard to make it work so? manually user add it in driver expresison take many time,,
  2. generate those raw slider, in morph section. (with option in bloval or when import JCMs ), so we can easy controll if user need it. as same as daz. (usually we may close the group, or we may open them when I need to adjust, or even though you gorup them as hidden group, It still useful..

I think you offer JCM (or MCM) multipler when import them, but it work as global (all morphe effected). and after set multiple value when we import, we can not adjust JCM, MCM anymore. the reason is actually simple, you do not add raw value in fin value driver expression. I understand you think, it need not (because user not adjust JCM usually), but actually the more you import many morphed shape as baked, we need to adjust jcm effect for good shape render . Actually it often happen with posing. I think. (or you hand-made really good JCM for your character already…)

Of course I know, it is not for normal user. but I really apreciate, if you take time to add raw value in expresison for JCM too. if you do not have reason you hope to avoid it. or user need to manually set-unset driver. with serch them. I think. it can solve by only add JCM slider as visible. and add raw value in driver expression…

Even though I manually make it work, to show fin value with raw slider as same as daz, I need to serch around in all propertys (now we have huge property for rig and rig data id , we can not avoid it,, if we import all default morphs) and keep it visible, so ideally, even though it is advance option, I hope you keep same strucutre as other morph slider (raw prop slider + fin label value)

In pic I actually add driver for one JCM fin, (set raw variable), but to serch it in property and get fin value,, I hope to use add on morph section as same as other morphs,,, ^^;

Comments (19)

  1. Alessandro Padovani

    That’s horrible .. jcms by definition are driven values, that we can “adjust” the final value makes little sense. It is just fair that the advanced user must die to do that 😜. Other than editing the driver I mean.

    For example below I edited the forearm driver to make the elbow bulge less if I don’t like it. That’s rmb > edit driver.

  2. engetudouiti reporter

    Of course you can edit driver one by one as you like. But your way can not adjust strength for each pose. once you set value. Or you need to change the multiple value with rmb and driver just to adjust the strength. If there is driver with slider, I can adjust it anytime without r-clidk and edit driver. with see actual posed mesh and fin value.

    I really do not know what is horrible for you to adjust jcm strength when user need it. It is not special workflow It is same,, when we adjust auto-follow morphs, (usually it is hidden, but there are many case, we actually adjust auto-follow morphs) Only user who do not know how it can work, may just say, JCM should not be edit, but you do if you can.

    It is how daz morphs made. with use raw and fin props. all morphs are actually generated as I described. So Now most of morphs can be imported and set driver by add on. If daz really need not to set raw value, daz do not offer slider for JCM . but we have it (Then we can adjust it anytime we need, just show hidden property)

    At current only JCM raw props are not used to adjust fin value. but daz do not change way about JCM or PBM, FBM,JCM are just hidden. as same as DAZ keep hidden for facial bone property (so we can not directly edit it, untill we show those hidden bone)

    eg I have leg morph product, which only activate hidden JCM to user adjust it with controller, usually it work without user adjust but .it activate as Adbance option. (so we click adbance option, and the product show those hidden morphs, to adjust each JCM (the prodcut offer leg jcms) wiithout “edit ERC = edit driver in blender as you did” .

    The user who bought the product, never say “horrible” or “useless”. you say so the product author?

    . Though actual product offer multipler slider too., but there is no need to set multiple prop for the purpose. we can adjust JCM strength, just use raw value. and slider as same as other morphs, as Option. . if add on include it in expression. = this is how daz made JCM and other morphs work.

  3. engetudouiti reporter

    Then Alessandro, I say frankly. You have mentioned, you do not like to import many JCMs, but you may prefer to use modifier. Or now you import all JCMs ?

    It is your choice. I import all base JCM for all character. so I request it to work more flexible. Actually adjust JCM easy is not horrible for all JCM user. About it you perfectly wrong. If add on can easy add it as option, it not harm any user who use JCMs.

  4. engetudouiti reporter

    To Thomas

    I believe, there is no merit to make any corective morphs (include flexions) as non editable by user. Of course when I make corrective morphs in blender, usually we can not edit it by slider once it is driven by bone transform. it is same about all shape keys. So we use driver editor, then hide driver, or may add new prop like multipler when user need to adjust it with slider. without change driver setting.

    But add on imported JCM (and flexions) we already generate raw and fin props. So we can free change Fin props value with slider about all shape keys. It is actually merit for user who import shape keys with this add on. Then in daz studio, all props include JCM and flexion can be editable with show hidden props option.

    I do not think we need special things only for JCM of Flexion JCMs. I recommend just generate JCM driver as same as daz do.

    if you pose any figure, then adjust JCM or flexion, you may notice, it actually offer many detail variation to get most user like shape with current pose. At least it is better than make it no editable when user hope it.

    JCM or Flexion or MCM is after all just a morph . Though they are controlled by bone pose transform. (= work as Corrective morph), at same time if user can adjust it by slider, it cause no problem. because user know they set value and edit it if they need default defomation, just set them as zero, or they never use option to generate hidden porps as slider. it is same how daz offer hidden morphs.

    I did not request it before because,, you do not generate raw and fin props. as driven prop editable. but now we already have all row props for driven morphs.

    Of course if add jcm raw slider cause problem ( bad peformance) with default value (raw value = 0), or if it is really difficult for some reason I do not notic,e, I reject this request easy. Then I set this topic as minor issue and proposal.

    But if the reason you do not include raw in fin value, because,, JCM should not be editable by user, you think too seriously JCM word meaning. After all they are just morph which deform Linealy with bone transform. any vendor can not offer perfect JCM for all rotation value. so make it editable (can adjust strength) is actually useful for every JCM user. (then we can do it in daz studio), if you remove the function just for the JCM definition, it means add on lost one function for user. I think.

  5. Alessandro Padovani

    Since you asked, my personal workflow is to keep things simple, including jcms. So I tend to import only what is needed. For example full dressed figures hardly need any jcm, unless where the clothing is tight. And shrinkwrap may also work fine enough in most cases.

    Then you do know much more than me as for rigging. And I understand your point. But honestly I still believe that “adjusting” final jcm values makes little sense.

    You may as well use sculpting if you really need to adjust a single pose outside of animation.

  6. engetudouiti reporter

    The user who may not use JCM full, may not plan to adjust it serisouly. So I said your workflow not need such option. But It is not horrible at all for user who actually import base JCMS. There is many case you may hope to adjust it.

    when you pose figure, you may find some problem, then add new morph, or directly edit mesh, or edit JCM strength. or edit JCM shape keys. or apply new modifier.

    Edit JCM strength is most easy way . then even though you change driven shape key temporally, it can reset easy if it offered as one of morph slider for UI. you can set key too for timeline. as same as other props.

    Untill I take time more to adjust Shape key morph, (actually remake shape key), or try to apply new modifier, as first choice I often edit corrective shape key value.

    Daz offer many JCMs for their figure.. at same time we know even though all JCM we imported, actually if we shape character with morphs, it not work perfect. For me those are just shape keys, which ease our work (auto applied) when we animate or pose. to keep actor as real. or more clean.. but there is no need to hide it un-editable. without user not understand way how return it..

    When you apply modifier, You may often adjust modifier setting though once you apply modifier, it auto aapplied but you do not think adjust modifier parameter case by case is un-useful and horrible.

    At same time I understand, we do not hope to see too many slider, without category, but we can easy close them when we do not use those morphs. So it is advance option, when user need to edit jcm strength more easy.. (Then it can be achived without special things. add on already generate all prop which we need… it is just a pity, to avoid free JCM slider even though we generate 2 props for driven shape keys.

  7. Thomas Larsson repo owner

    Implemented in last commit. The feature is controlled by the Make Hidden Sliders setting that already existed. The sliders are displayed in the JCM and Flexions panels.

    The Flexions panel appears even if the feature is turned off, with four sliders (Flex Glute Clench and Flex Quad Left/Right). This is because these morphs appear to be controlled by sliders in DS as well.

  8. engetudouiti reporter

    Thanks Thomas. I hope it was not hard for you and it not change anything if user keep default value. ( do not touch JCM of flexion or custom JCM flexion slider)

    And the way to manage Flexions panel is really reasonable for me. . I do not import Flexions seldom (Not main use G8 but I had thought , it is more important future for adjust muslce effect. as they need.

    It is not just to mimic daz, but many blender rig user often think same thing. if they can edit corrective shape keys (which driven or constrain with bone rotation) value even though they are driven. with clean UI slider. or they need to add it by themself or use driver editor, to hide driver temporally. at least about daz importer all import JCM now user can editable. I apreciate it. thanks.

  9. engetudouiti reporter
    • changed status to open

    Unfortunately,, with test up-date version, I now get JCM slider (raw) and fin label but even though I change raw value, the value not added for JCM ^^; (I set minus value to weak jcm for test,, but in fin expression, it not included, with collar JCM and other do not include raw value,, so do not change fin value.. hope if it is simply you forget to up-date,

  10. Alessandro Padovani

    I don’t know how daz users do it, since daz has very limited animation capabilities it may be so as you say that they tweak the final jcm values. I myself am not a great animator I can barely do the basics. But I took a little course on animation some time ago and I can positively absolutely grant you that, if an animator really had to fiddle with jcms to get the pose right, then the TD would be fired and replaced at once.

    This is not how to do it and it really is horrible. Not to be rude in any way, just honest.

  11. engetudouiti reporter

    I can not understand what your point.

    if you like to render kind of professional animation, you may need to make JCM by your self for each morphed character. it should offer more good animation.

    so it may perfect fit with each pose.. then you need not edit jcm values.

    but import JCM is daz importer option. then we improt those. (it auto adjust shape with pose thanks) then if you do not edit the raw value. it never change your render.

    So what is horrible , if user render current image with adjust JCM temporally by slider?

    your view change,, when you talk about something you request you often say for basic daz user, it is useful. then when you against something, you say it is not need for pro or real animation.

    For pro animation (if I am pro), I do not tweak JCM value for animation, at same time, I do not use improted JCM without editing it for applied morph character. I use this option for temp fix, and may set key if I make non pro animation, just render it with my HD TV. . Do no know pro animator. actually. (almost I do not have interesting, because I never plan to pro animator) If I make animation which need as pro I may not use daz figure too.

    Of course there should be user who plan to make animation with daz figure and blender, and they know how JCM work and when it need. but I do not think they against if the JCM can editable when they need. they only use it when they need it.

  12. Alessandro Padovani

    To reply to your question, “what is horrible”, it’s to expose the jcms in the rig interface, since they’re intended to be “inner mechanics”.

  13. engetudouiti reporter

    I do not believe it. because you can hide it and they are already grouped. if you do not like to show them in UI, just close them.

    and it is only visible when you use the option. At same time, I do not feel any issue, all JCM are shown in morph UI. at all. so I can check easy which JCM are internaly worked without serch mesh shape keys.

    To Thomas,,

    I found you seems somehow miss about if condition with global setting (or detect JCM prop or not) , to activate the JCM slider option.

    If I remove this condition in load morph.py def makeBoneDriver() , now it work (I can control JCM with raw slider)

        def makeBoneDriver(self, string, vars, rna, channel, idx):
            from .driver import addTransformVar
            rna.driver_remove(channel, idx)
            fcu = rna.driver_add(channel, idx)
            fcu.driver.type = 'SCRIPTED'
            string = self.multiplyMults(fcu, string)
            #if GS.useMakeHiddenSliders and isPath(channel): <I hide this if condition)
            final = unPath(channel)
            if isFinal(final):
                raw = baseProp(final)
                string = "u+" + string
                self.rig[raw] = 0.0
                self.addPathVar(fcu, "u", self.rig, propRef(raw))
                self.addToMorphSet(raw, None, True)
            fcu.driver.expression = string
            ttypes = ["ROT_X", "ROT_Y", "ROT_Z"]
            for j,vname,bname in vars:
                addTransformVar(fcu, vname, ttypes[j], self.rig, bname)
            return fcu
    

    ( now it show jcm slider in UI as category always. Though for my purpose not problem. I can not detect how you set

    GS.useMakeHiddenSliders and isPath(channel) return value,, then check those please. (it is reason why it not work)

  14. Thomas Larsson repo owner

    GS.useMakeHiddenSliders is the Make Hidden Sliders global option. By default it is turned off, so you won’t be able to tweak JCMs unless you explicitly turn it on before the JCMs are loaded. This is an advanced option and it is too intrusive to generate these sliders unless it is explicitly requested. The same option also creates sliders for properties that are hidden in DS.

    isPath checks that we are creating a driver for a slider and not for a transform channel. Otherwise extra sliders will be generated for the eyelid or pectoral bones when a character is loaded. Or at least that happened at some stage using testing, the isFinal test two line further down would probably reject this case anyway.

    So the sliders should appear if you turn on the global option before loading.

    Edit: No they don’t. Something has gone wrong.

  15. Thomas Larsson repo owner

    OK, now it should work. Fixing the bug took less time than arguing that there wasn’t one.

  16. engetudouiti reporter

    Thanks you understand something wrong . (I did not test with other import morph, so I suspect my edit may cause issue you described)

    Btw, I test G8.1 Fact morphs and expression, and some custom morph, I can not find any problem, with import each morph as category.

    I really apreciate, now I can use the new morph system for actual pray scene.. (I may hope to test with some driver option though)

    Only remain problem (but it have been problem as same as before) is maybe max limit expression . when we import bounch of morphs which drive other morphs value.

    But I did not expect, we can import those custom morphs now we can.

    , so I wait if you can find good solution as long period future reuqest. if you can add error handler, which may tell user, when it over limit,, I apreciate though, at current add on may generate cut off expression, when we import product morph set of one directory. if add on can stop it, with limit, it may help us. (so remove morph, remove driver need to work stable, when we need to remove those new imported morphs. )

  17. Log in to comment