Barzing - Copy Paste Morphs Deltas



  • @TomsGX Thanks for your feedback,

    i'm going to check the Edit config pb. It's probably because i didn't initialize the file in the package.
    It's not a temp file, it's the config file, and will always exist.

    For the list of morphs, the aim is not to copy all the morphs listed by "Z1 - List all figure morphs". in the list appear some dials that probably shouldn't appear (ie all hidden dials are listed and some that shouldn't be treated). V4RShldrDeltUp:1 is probably a magnet and shouldn't appear in the list (i'm going to check it).

    Copying all the list of morphs in the config file you ask the tool to copy further times the same morphs. In fact when you ask for example to copy BODY:FBMHeavy, the script will copy all the dependent morphs on each body parts to the destination figure. And as you ask to copy the hip:FBMHeavy, chest:FBMHeavy, ... they will be copied 2 times and it's not necessary

    the Lists Z1 -> Z3 are just here to help you to pick up the morphs you want to copy.

    But seeing your need : copy S4 morphs on SASHA-16, it's not this tool you need, because the morphs you want to copy already exist on SASHA-16. What you want is probably to copy the values. So a CTRL-C / CTRL-V on body and heads should be enough.

    For Rem_Dup, i'm going to check and correct.



  • Tool corrected and re-uploaded.

    Config file Edit is corrected and should work.
    V4RShldrDeltUp:1 is a Magnet dial and shouldn't at anytime be copied.
    if i can remove it from the list morphs, i'll do it in a next version.

    Again, thanks for your feedback.



  • I added a quick start in the readme :

    Quick start

    1- In Poser, load the figure from which you want to copy the morphs
    2- load the destination figure on which the morphs you want to copy do not exist
    3- Go in "Pose\Barzing\Morphs Tools Set\Copy-Paste Morphs\Figures\Copy Paste Deltas"
    4- Click "0. Edit Config", your preferred text editor will open the config file
    5- there is a pre-existing example, remove it
    6- create your copy group in first line : "#My group"
    7- on next lines add the morphs you want to copy, for example "BODY:FBMGoblin"
    PBMGoblin is the Internal Name of the morph Goblin
    To find the internal Name you can go in property panel of the BODY of your source figure
    Left-click the little triangle next to the dial morph, select 'setting' the Internal Name will appear here
    8- Save the config file
    9- Select the source figure in the scene
    10- Click "2. Copy Morphs Deltas" (wait)
    11- Select the destination figure in the scene
    12- Click "3. Paste Morphs Deltas" (wait)
    13- find your morphs on the destination figure in the group "#My group" in this example case on BODY.



  • Hi Barzing, thank you for the update and clarification. The quick start also helps a lot.

    I think I found another possible issue when I was testing the updated script. In my S4 figure I have these two dials under Morphs for the head:
    UpperCheeks_ReducePuffiness_1
    UpperCheeks_ReducePuffiness_3

    When I click to list all of the head morphs, it only displays
    UpperCheeks_ReducePuffiness_1
    and seems to miss the second one. This also happens for another pair of morphs under the Body too. Obviously the names of the dials are almost the same except for the end where I put _1 and _3 to separate them.



  • @TomsGX

    Hi TomsGX,

    It's not a standard S4 morph, so i supposed it's a custom one.

    Is "UpperCheeks_ReducePuffiness_3 " is the internal Name of the morph ?

    To find the internal Name you can go in property panel of the HEAD of your source figure
    Left-click the little triangle next to the dial morph, select 'setting' the Internal Name will appear here



  • Hi yes, the puffiness are both my own custom morphs.. they both do a similar reduction of puffiness in the cheeks and I was a bit lazy in naming them :)

    I'll check to see if the internal name of the _3 is something very different from the _1 version...



  • @barnardino

    Hi Barzing,

    I selected "setting" and what I see is that the internal names for:
    UpperCheeks_ReducePuffiness_1
    UpperCheeks_ReducePuffiness_3

    are an exact match for what I see on the dial name. So I am not sure why the script only finds "UpperCheeks_ReducePuffiness_1" but does not list "UpperCheeks_ReducePuffiness_3".

    BTW, when I am in the setting of the dial, I rename it to a new name that is shorter e.g. from "UpperCheeks_ReducePuffiness_3" to "reducepuffiness3" and just as a test I click on Z3. List Head Morphs, but it still shows the original longer name of the dial instead of the renamed dial. I even save the project, exit Poser, then run Poser again and reload the project, but List Head Morphs still lists it under its original longer name not as "reducepuffiness3", not sure why. Even though I changed the internal name, the Z3. List doesn't seem to be aware that it has changed...?



  • @TomsGX Hi

    Just to be sure :

    • what is your poser version ?
    • can you confirm that you changed the 'Internal Name' on settings like it appears here in this example ?
      alt text

    Z3 list all internal names of existing dials on the current selected figure's head, it's not based on any saved information.

    Can you check this pls, before i investing further.

    Ty.



  • Ok I'll check tomorrow (Poser 10/2014 is installed on my PC at work). I don't think the dialog box that I saw looked like the one in your screenshot though... I don't remember seeing the "internal name" label, I think it just said "name" on mine. Maybe my work computer doesn't have the latest update/patch?



  • @TomsGX ok if you have PP2014 it's the reason you can't find the internal name, i realize that i need to do a button to list Dials Name vs Internal Names.



  • Ah okay, I'll just wait for an update before I proceed any further then. Is there any plans to also have the script be able to transfer over textures and materials to the target figure? I'm not sure otherwise how else to completely port a character over from V4/S4 to Sasha (I believe in P11 you could make a mat pose INJ? But I don't have access to P11 at home or at work, not sure how else to do it).



  • @TomsGX Hi TomsGX, i updated the tool, with a Z4 button that allow you to list actor vs Internal Name vs Dial names. You have to redownload it from sharecg.

    Thanks for your feedback.



  • @TomsGX said in Barzing - Copy Paste Morphs Deltas:

    Ah okay, I'll just wait for an update before I proceed any further then. Is there any plans to also have the script be able to transfer over textures and materials to the target figure? I'm not sure otherwise how else to completely port a character over from V4/S4 to Sasha (I believe in P11 you could make a mat pose INJ? But I don't have access to P11 at home or at work, not sure how else to do it).

    You can just save your materials as collection in material library and reload it on your final character.



  • Hello, thank you for that tip about material collections, that was VERY useful! :)

    I tried the updated tool. Using Z4 to generate a list of the names. So for example, my custom morphs on the S4 character have these two:
    head:V42_HeadMT_raise_upper_eye_tip_(V42_HeadMT_raise_upper_eye_tip_)
    head:V42_HeadMT_raise_upper_eye_tip(V42_HeadMT_raise_upper_eye_tip)

    Now I then paste these two into the parms2copy.txt, correct? But when I then click to copy the deltas, it gave the error message:

    head:V42_HeadMT_raise_upper_eye_tip_(V42_HeadMT_raise_upper_eye_tip_) doesn't not exist on this figure !

    I will try this again at work tomorrow, but I am sure I had the source figure selected (well the Body, not sure if I am supposed to select the Head).



  • @TomsGX at the top of list you have the format :

    #All Parameters in selected figure by Actors - format is actor:Parameter_Internal_Name_(Dial_Name)

    What you want in parms2copy.txt is actor:Parameter_Internal_Name

    So you don't have to copy all of what listed by Z4, Z' is just to help you to find Dial Name vs Internal Name.
    Here you just have to copy head:V42_HeadMT_raise_upper_eye_tip_ in parms2copy.txt if you want to copy this dial.

    Remember Z4 is just here to help you to find your internal Name vs Dial Name
    fro example : in this list you can look for the dial name : "UpperCheeks_ReducePuffiness_3" (it should appears between paranthesis) and you'll find the internal name, so what you need to copy in parms2copy.txt in the format actor:Internal Name



  • Ah thank you! That makes much more sense! I left out the (Dial_Name) and was able to copy over my custom face morphs to Sasha now! It works!!!

    I have a request, is it possible to have one more script e.g. "z5", which can show the same thing as z4, but it only lists those dials which have a non-zero value? I noticed that even though I did copy-paste on my S4 character's Body to Sasha's Body, the chest (breasts) still look different.

    I am not sure what is missing to recreate the chest look completely. There must be some other morphs that are not on Sasha (probably these are third-party morphs that I injected into my S4) which I need to copy over but I don't know which ones they are unless I exhaustively go through all the dials looking for non-zero settings on them. It might be faster if a script could just list which ones are non-zero (or maybe even indicate if there are non-zero dial morphs that exist only on the source figure but not on the target figure? Or is that too complicated for a script?)

    Thank you for your help!



  • UPDATE: actually instead of basing a Z5 on Z4, it would be better to generate a list without the dial names (i.e. base it on the Z1) since otherwise it would mean having to manually erase a lot of (Dial_Name) entries...

    What I tried this afternoon is to take the Z2 Body morphs listing and simply paste the entire thing in the parms2copy.txt file. If your script will not copy over any morphs that already exist on Sasha, then my plan was that simply copying over all the Body morphs will include the extra 3rd party morphs on my S4 character, and this will give Sasha the missing chest morphs needed to recreate the S4 character's chest. However I saw this error:

    Traceback (most recent call last):
    File "D:\Local\Runtime\Libraries!Barzing\PasteMorphsDeltas.py", line 357, in <module>
    File "D:\Local\Runtime\Libraries!Barzing\PasteMorphsDeltas.py", line 296, in Main
    AttributeError: 'NoneType' object has no attribute 'AddValueOperation'



  • @TomsGX just downloaded the script and looked into the hierarchy of the zip file, as it struck me that the paths in the Traceback message of both of your posts looked suspicious. The zip file confirms that the hierarchy of folders is Runtime, Libraries, !Barzing, so there should actually be a backslash before the !Barzsing in both of those reported paths in the traceback.

    Is it possible you have a typo in the config that omits the backslash, i.e. "Runtime\Libraries!Barzing\PasteMorphsDeltas.py" should be "Runtime\Libraries!Barzin\PasteMorphsDeltas.py"?

    Though, now that I think about it further, if you did actually have a folder called "Libraries!Barzing", in which the PasteMorphsDeltas.py resided, that might still work.

    ...

    Oops, phurphy detected. It looks like the forum formatting software is mucking with us. I see my own post is missing the backslash before the exclamation mark. Carry on. As you were. [Backs from thread kowtowing profusely]



  • @anomalaus What's actually strange is that you made me check my work computer's file hierarchy and I realized that the traceback error message refers to d:\ but in actuality my Barzing folder is located here:

    E:\Program Files\Smith Micro\Poser Pro 2014\Runtime\Libraries\!Barzing

    It's on E: so I don't know why the traceback refers to a different hard drive...

    Another update: I started to erase many of the entries in my Parms2copy.txt to see if I could identify which ones were causing the error. I eventually got down to about 35 entries left and the error is now:

    Traceback (most recent call last):
    File "D:\Local\Runtime\Libraries\!Barzing\PasteMorphsDeltas.py", line 357, in <module>
    File "D:\Local\Runtime\Libraries\!Barzing\PasteMorphsDeltas.py", line 241, in Main
    poser.error: Figure has no actor by that name

    I assume this is because the internal name and dial name are not the same. It occurs to me that now I have to look at each of the 35 entries to see which one is the dialname that I need to find the true internal name for (by using the new Z4). Whew, this is a lot of work...



  • @barnardino looks like you may have an occurrence in the PasteMorphsDeltas.py script where the parameter is not tested for being None, prior to calling the parm.AddValueOperation() method.