Transfer Expression G3->G8?

morkmork Posts: 278

I know it might be difficult, but is there any way to convert G3 expressions for G8?

I'm super picky with expressions and in the end I have 2 packs which work really great for me:

"Feel It" - for "older" characters
"Z Bewitching" - for younger characters

I also have others, but most of the time they don't work well on random characters.

It'd be so sad to lose those expression morphs and I'm not so happy with buying new packs of which I might use 1 in the end only again, because the others are not versatile enough.
I know I could return the products if not satisfied, but I rather not buy at all than to return stuff all the time - it's just not my shopping mentality to try&error on purchases.

Any way I can rescue these expressions? I noticed some still do work, but some don't or they move only a part of the face. Can this be "fixed" in any way? Is it just like a regular morph transfer?

Thank you very much :)

«1

Comments

  • nicsttnicstt Posts: 11,715

    I have transferred some, how well depends if bone-based or morph as far as I know.

    There is a thread for discussing transferring morphs.

  • morkmork Posts: 278

    I think those G3 expressions that don't work so well on G8 use bones on top of the morphs (like "Z BE Happy Bite Lip" of Z Bewitching)
    There are others which look 1:1 like for G3, but they look like pure morphs. Any way to convert the ones that use bones as well?

    Not sure if that is covered by the morph thread, which focuses more on transfering shapes, which does work for me. But if it is in general the same approach, I'll jump through these hoops.
     

  • G3 and G8 expressions are mostly bone based. It's what set the G3 apart from previous figures. As near as I can figure it, this was an industry thing. That is, the Poser root of Daz tech was all about posing figures for reference. But the tech evolved as something for art in its own right, which is a niche market. Then the rest of 3D tech shifted to games and entertainment and Daz has been upgrading tech to be relevant in those spaces.

    Games and entertainment use bones for face movement. Daz used morphs. Upgrades were needed. But some ideas die hard, so lots of Vendor artists sill pgrade their expressions using morphs. Additionally, Daz uses it's in house HD tech for more and more detail with G8. At first this didn't make sense to me, but thing my brain engaged. Games won't use the HD tech, at least not directly outside cutscenes, because they have to keep the poly count down. Meanwhile, entertainment has the cash to make a bridge if they really want that tech, or will roll their own if they don't have it already. So HD morphs aren't a big deal from a business standpoint out side the core business of selling figures to masses.

    What this means for your question is that if you aren't a Daz PA, you won't be transfering HD morphs between figures. This is kind of an answer to your question in the sense that if any of these expression you want to move have an HD component, it will be impossible to move them completely. The basic bone movements and morphs will go between figures if you're very care, but not the rest.

    There is a way to make anything transfer between G3 and G8 and vice versa, but it's complicated, and I'm not sharing with anyone who hasn't demonstrated a pretty good understanding of what kind of damage they could do their library if they get it wrong. So far, only nicstt has taken me up on that, so I have one witness who knows I'm not full of it, at least.

    That said, if you know how to do an ERC freeze, there is a way to do this one morph/expression at a time. 

    There are many ways to send morphs between figures, So that's not an issue. Pick any one you like except direct transfer between figures. It's not that that method won't work. It's just that it works differently and is harder to explain. So you want a method like the Redz tut in my sig, where you export an object file as the morph and then add it in morph loader. 

    But don't just do it, No yet. This is going to be different, a bit. What you do is follow the tut up to the point where you dial in the shape. Instead select the expression you want on G3 and add to favorites. Launch Transfer Utility and check closest vertex first Smart left right filtering. Uncheck everything elese except for Morphs, and highlight the Morphs line. On the right side of the modal window, uncheck both check boxes and change the dropdown box to Favorites. Run the transfer. select the G8 and find the moprh you just ransfered. It should be in the same property group as it is on G3. If you can't find it easily, go back to it in G3, click on the gear icon and slect proerty settings and copy the name (not LABEL). Return to G8 and filer by the name you copied. TU doesn't copy labels over. Once you find the transfered morph on G8, dial it to 100% and export per the tutorial. I believe Redz's tut tells you to delete g3 from the scene. Don't do that yet. Instead, export the morph and delete G8. we only want to work with G3 for a moment. Select G3 in the Scene tab (she should otherwise be invisible. if she isn't you've already messed up somewhere. Best close studio and start over from the begining). Right click on the parameters tab and click restore figure. Once G3 is restored, dial in the expression. Right click the parameters tab again and select edit mode. Right click on the slider for the morph and select ERC Bake (Delta Add ... etc). Go File > Save As > Pose Preset. In the modal window right click anywhere in the area with check box that says Genesis 3 Female and chose Check Only > All Modified Only from the menu. Accept.

    Open a new Scene. Add a G8 to the scene.

    Return to the tutorial and proceed with the instructions on importing a morph. I recommend using the Attenuate by function and the head split deformer in the g8 Developer Kit to prevent morph changes to the body, but you can also use the remove deletas from favorites method, as well. Key point is that all mothods will induce minor changes in the body. and you don't need those changes for morphed expression. DO NOT ADJUST RIGGING TO SHAPE. Seriously. Don't. It's not necessary. Find the pose you just saved in the Content Library and apply it to G8.

    I can't stress enough, you have to import the morph via morph loader, then apply the pose. Order of operations is important here.

    Once you have the morph imported and have cleared out unnecessary body deltas by whatever method, and applied the pose, dail the morph and ERC Freeze.  Save the Morph as instructed in the Tutorial. Rinse, repeat.

    What you're doing is extracting the bones posistions by using ERC bake and saving as a pose. Because G3 and G8 have identical face bones, poses for one work on the other.  Looking at them in Joint editor, it may seem like they wouldn't work, but they do. So once you bake the pose control, you can extract the details of pose and move them to G8. Using transfer utility to move the morph means that only the morph part was moved over. Applying the pose preset activating the morph and ERC freezing recreates the links as they existed on G8.

    Limitations:
    Some of G8's expression controls have different labels than they do on G3. As a result, they may have different names, as well. This means they will not be activated by expressions that call them as written for G3. You can try to fix that manually. It's tedious, but not difficult.  It does mean this won't always work, necessarily. Should work 7 or 8 times of 10.

  • barbultbarbult Posts: 24,839

    Paragraph 7 says "Don't do that yet. Instead, export the morph and delete G8". What does "export the morph" mean? Does that mean to save the morph as a Morph Asset or something else?

  • Follow Redz's tutorial. Up to the point where you are instructed to delete G3, but don't delete G3.

    You will be instructed to do an export. That is the export that I'm talking about. At this point you would delete G8 from the scene and proceed to work with G3 to create the pose preset.

  • barbultbarbult Posts: 24,839

    Follow Redz's tutorial. Up to the point where you are instructed to delete G3, but don't delete G3.

    You will be instructed to do an export. That is the export that I'm talking about. At this point you would delete G8 from the scene and proceed to work with G3 to create the pose preset.

    OK, I think I understand. Thanks for the clarification.

  • morkmork Posts: 278

    Thank you very much for that comprehensive explanation, Singular Blues. Very much appreciated!

    I already learned how to completely mess up my library with saving things as assets, which then load on all my figures and make things go *boooom*. :)
    I think I know how NOT to do it again. Maybe. And if, I now can repair it. :)

    Good to know that it is possible and to know what steps might be required. I'll give it a try right now and report back. Would be so great to not lose those expressions (which are non-HD, thankfully)

    Again, thank you!

  • morkmork Posts: 278
    edited July 2017

    Hm it kind of works, but I get the same error that I have with almost all my transferred morphs: the shoulders move when I apply the morph, which they should not.
    Guess I have to go back to that transfer-thread and check what I did wrong again. But I'm on the right track, thank you!

     

    Edit: I figured it out, partially. I did use the "remove deltas" method, as I did not understand the other method yet. It is very cumbersome, especially since a couple of the eye parts are not part of the Eye region - which means you need to de-select the vertices on a couple of eye parts instead of just de-selecting the eye region.
    But it does work, which is great!

    Now I need to automate this. I can't imagine to do that more than once or twice manually in a row. :D

     

    Edit2:
    Because "pics or it didn't happen": attached a quick render of G3F and G8F for comparison.

    Edit3:
    Because all good things are three. :)
    This helped me a lot when trying to figure out that "remove deltas" stuff:
    https://download.daz3d.com/forums/discussion/180631/remove-selected-deltas-from-favourites-can-t-find-this-function-anymore-in-the-new-ds-version

    G3F_ZBE-HappyBiteLip.png
    494 x 800 - 580K
    G8F_ZBE-HappyBiteLip.png
    494 x 800 - 461K
    Post edited by mork on
  • fastbike1fastbike1 Posts: 4,078

    In the few examples I've tried, Zev0's G3 to G8 pose converter also works on expressions and hand poses. Again,I've converted several packs, but only looked a few. In those that I've tried on character, my general impression is that they seem more natural on G8. Some of the "bite lip" ones don't look quite right, but i haven't tried G3 and G8 side by side

    Here are some examples.

    G8 Expression Conv 1.png
    750 x 1125 - 977K
    G8 Expression Conv 2.png
    750 x 1125 - 854K
    G8 Expression Conv 3.png
    750 x 1125 - 1M
  • morkmork Posts: 278
    edited July 2017

    fastbike1:
    I managed to transfer the expressions that don't use bones as well (pure morphs), it were those with bones, like "lip bite", which did not transfer well. The morph part did, but not the bone part.
    With what Singular Blues has described, that also works. Sounds more complicated than it actually is. It's just a lot of manual work.

    Edit:
    Hm. I still have a problem with expressions where the mouth is open. It looks a little bit like the attachment.
    (inline images do not work really well with drag&drop, btw. the base64 encode results in too much body text. only works for very small images)

    I guess I need to stick closer to the guide...  :D

    Edit2:
    Not sure what I did wrong. I follow the first steps of redz tutorial, exporting G8 as obj, delete g8, import the exported g8. I can then dial in morphs, but for the ones where the mouth is open, it always looks like Neo. There is not exactly much I can mess up in these very few, easy steps. :(

    the-matrix-neo-mouth.jpg
    550 x 288 - 27K
    Post edited by mork on
  • morkmork Posts: 278

    Follow Redz's tutorial. Up to the point where you are instructed to delete G3, but don't delete G3.

    You will be instructed to do an export. That is the export that I'm talking about. At this point you would delete G8 from the scene and proceed to work with G3 to create the pose preset.

    Problem for me is, there is no instruction "delete G3". There is a "delete G8", but that is a very very early step of redz guide.
    I still try to figure out where I exactly have to branch to your guide, I guess that Neo-effect is because I did something wrong at that point.

    Maybe I should reiterate what I did:

    1. Load "G3F to G8F Morph Transfer" scene
    2. Export as obj, DAZ settings but no "Write groups"
    3. Delete G8
    4. Import obj created in Step 2
    5. Start Transfer Utility. Transfer from G3 to G8F_G3FMorphs, no other settings, just hit Accept.
      => The imported G8F_G3FMorphs figure will pose to an A pose.
    6. Save as scene, so it can be re-used and steps 1-5 don't have to be repeated. New scene name: transfer.duf

      ! At this point I already get the Neo-effect on G8, when I dial in a G3 expression, where the mouth is open. No need to proceed, it won't get any better. :-(
  • Singular BluesSingular Blues Posts: 737
    edited July 2017

    Please watch this video. It's 10 minutes of your life you won't want back. You need to know all this stuff if you are going to mess with head morphs.

    I apologize for mixing up the figure to delete instruction. I actually never use Redz Tut. I have a my own thing I do, which is pretty much insanely difficult to describe.

    Dealing with distortion:

    Okay, so this version of the tut is different than the one I was familiar with. Like I said, I don't use it. I directly transfer between figures using some custom stuff.

    So here's the issue, in a nut shell. Start Transfer Utility. Transfer from G3 to G8F_G3FMorphs, no other settings, just hit Accept.  That right there will break stuff, all right.

    I cannea promise things won't stay brokededen-ish around the eyes. G3 and G8 just don't line up there very well. it's something that one hopes to see solved but is otherwise a risk. Eyes might go bad at any time. Always a risk. If it happens, might as well give up and hope a solution comes by later.

    Right, so back to the point which what's wrong with "Start Transfer Utility. Transfer from G3 to G8F_G3FMorphs, no other settings, just hit Accept"?

    I said, "Launch Transfer Utility and check closest vertex first Smart left right filtering. Uncheck everything elese except for Morphs, and highlight the Morphs line. On the right side of the modal window, uncheck both check boxes and change the dropdown box to Favorites."

    So here's the thing. What Redz's tut is doing is making one big blob of G8F_G3Fmorphs that has every single morph G3 has boiled into it. Which is fine, but by using default settings in TU all these morphs are very, very coarse. To fix that, you need to change "Start Transfer Utility. Transfer from G3 to G8F_G3FMorphs, no other settings, just hit Accept" to "Start Transfer Utility. Transfer from G3 to G8F_G3FMorphs, check closest vertex first and smart left right filtering, hit Accept"

    You will still create a big blob of G8F_G3Fmorphs that has every single morph G3 has boiled into it but they will either be extremely accurate or broken, and with the head morphs you need it to be extremely accruate or broken, so you know which ones won't go across.

    Post edited by Singular Blues on
  • morkmork Posts: 278

    Thank you once again. I'll try this for sure. :)

    For now I did what I can do best, I converted the files with a script. Not perfect yet, but very close. Some differences might be due to the shape conversion g3->g8, dunno. Close enough, for today. :)
    Right is the original (g3), left the copy (g8). Character: Blaire. Expression: "Z BE Pure Joy".
    It's only 50% converged, I'm on CPU only, sorry.

    G8_G3_Blaire_ZBE-PureJoy_50p.png
    1200 x 742 - 1M
  • With a script? Mind sharing? I'd like to see what you did.

  • morkmork Posts: 278

    I need to mention that it wasn't all too hard, since I realized all the duf files do is spin some existing dials.
    Mapping old morphs to new morphs and compensate for the differences was the part that consumed the most time.

    There are some mappings missing for sure, because I could only map what I had in the files. Need to run it on my other expression packs as well, to cover more mappings.
    Mapping vertices and/or bones would be a completely different story, I need to find an expression that uses them first.

    I'll share my quick+dirty script when I'm back at home. I try to convert it to DAZ script right now, but boy, that "documentation"... :D

     

  • No worries. I'm working on the same thing. So far, I've reached hypothesis stage on how to actally map the verts.

    I'm pretty sure there's an easier way to do what I have in mind, but the only way I can think of to preserve the ERC is to literally copy the original file from the source figure to the destination figure, so rather than trying to remap the vert via an array, I need to do with regex.

    Right now, I think I've figure out how create an ordered list mapping the verts between the two figures.

    I have no idea if it will work because I don't know if the morph transforms are in world space of local space based on normals. If the former, it won't work. If the latter, it should.

    As far as remapping the ERC, that will be trivial compared to figuring out how to handle 12000 find and replace operations without everything exploding.

  • morkmork Posts: 278

    Sorry, I did not make it to post the script at the weekend. But here it is:

    https://pastebin.com/fk73Ecfy

    A couple of things, in case you actually want to run the script:

    1. Please read this carefuly. If you run this script, you run it on your own risk. It was never ment to be shared in this state. I recommend it for educational purposes only. :)
    2. It's a PHP script - simply because I can do those the fastest
    3. It's a command-line script. You point it to a folder containing a COPY of a G3 expression product. Like this:
      php convertExpressionG3G8.php "/media/_DAZ/DAZStudio4_Content/People/Genesis 8 Female/Expressions/Z Bewitching"
      In my case that's a linux path, the product has already been copied to G8 (read next point). That folder contains DUFs and PNGs.
    4. COPY the product you want to update first, point the script at the copy. NEVER point it at the original. If somethings goes wrong, you can copy again and retry.
    5. It should make a backup, but please don't rely on that. Make a copy.
    6. My DUFs are all uncompressed already. If they are compressed, this will not work. The script has NO detection of compressed files, please don't run it on such. At all. :)
    7. It likely will complain about unhandled morphs. I did only adjust those morphs that occured in my products, you might have other products which use different morphs.
          If so, either decide if you want to ignore the morph - then add a regex to $ignore
          Otherwise, find out to which G8 morph it maps. Do a str_replace to rename the morph. If the morph behaves differently (like it is now inverted), also add one or more DAZ_key_mul() lines, or whatever it takes.
    8. I'm not yet happy with the mouthOpen morph. In the render I posted above you can see, that it is still off. This is because MouthOpen now opens further than G3, but there is no MouthOpenWide anymore.
    9. Just in case you ask what that huge string is there for: It should contain all G8F base morphs, so it can clearly tell me which G3 morph name it cannot map to G8. Otherwise it would fail silently and I'd probably never notice that a morph is missing.
    10. That script is a mess, like I told you. :-D

    Have fun!

  • That's useful information. Thank you :)

  • morkmork Posts: 278

    I found the error on the mouth, it was pretty obvious. I create a factor, add MouthOpenWide to it and multiply MouthOpen with it. If MouthOpen is 0, that will always result in 0.

    Fix would be like this:

    $factor = 0.55;DAZ_key_mul($data, 'eCTRLMouthOpen', $factor);if (($val = DAZ_key_getVal($data, 'eCTRLMouthOpenWide')))  {    DAZ_key_add($data, 'eCTRLMouthOpen', $val[1]);}

    Much better, yet still not perfect.

    And I finally managed to move this script to a DAZ script. I'd like to test it a little more and hopefully speed up the "search for expressions", which is rather brute force and takes a while, then I will release it into the wild. Does a pretty good job on about 90% of my expressions. Learned quite a bit about DAZ script, it's cool once you get the hang of it. Also I found some hidden expressions, that were hidden within some products. I'll add a method to move these to the Expressions folder  I think.

  • sapatsapat Posts: 1,735

    Wow, amazing!  Thanks. laugh

  • morkmork Posts: 278
    edited July 2017

    Oookay, so here it is, my very first DAZ Studio script ever. Please be gentle with me :D

    BETA

    This is a beta version. I can not find any more errors, but you might be more successful in that.
    It *should* not destroy anything, but I cannot give any guarantee. Please use at your own risk.
    If you are an experienced user, this is for you. Otherwise please wait a few days, until all bugs could be ironed out.
     

    What it does

    It converts Genesis 3 Female Expressions to Genesis 8 Female.
    The conversion is not perfect, but very close most of the time. If there is something off, it's usually the mouth. Not much, though.

     

    What it does not

    It does not recognize some products from external stores. Not sure how I can fix that yet.
    It cannot process connect encrypted content. If you use it on such, things will break! Don't do it! Can't do anything about it, sorry.
    On mixed content products, it will try to convert everything. "Expressions and Poses" products are such. I'll try to fix that.
    It does not convert any HD product
    It does not convert bones and/or meshes
    It does no perfect conversion, but close enough, I'd say.

     

    How to install

    Unzip to your content library.
    The script should be under Scripts/mork/ConvertExpressionG3F_G8F

     

    How to use

    I numbered the order of what you need to do. :-)
    Almost every item, text, button, whatever, should have a hover tooltip - hover it with the mouse to get more info.

    1. First search for expressions. That will take quite a while, I need to find out how to speed that up. But result will be cached for your session.
    2. Check some options.
      1. Dry-run - check this to simulate the conversion. It will not change anything. Recommended for every first conversion run.
      2. Move to Expressions - not implemented yet
      3. Use cached search results - after your first search, you can check this to speed up follow-up searches. Data is cached until you restart DAZ.
    3. Pick a target content library, in case you have multiple. The default library is checked by default. No connect libraries allowed.
    4. Chose the compression of the converted files. Either leave untouched (same as original), compress or uncompress them.
    5. After you did 1., you should find the G3F expressions here. Click any of them to start the conversion.
      Please wait, a window will pop up when it's done.

    When you close the script, a new window might pop up. It will contain a list of morphs that could not be mapped.
    If there are any morphs that look like a DAZ morph, please report it back to me and I will map it.

    Have fun! :)

    -mork

    Edit:
    Updated to 1.01 beta
    I forgot about mixed content products, like "Poses and Expressions" products. I fixed it for the one I have, hope that fixes them all.

    zip
    zip
    ConvertExpressionG3F_G8F_v1.01beta.zip
    26K
    Post edited by mork on
  • This is going to be quite useful.

  • barbultbarbult Posts: 24,839
    edited July 2017

    I'm fairly experienced with Daz Studio, and brave, so I gave it a try. My review: EXCELLENT! We have some really clever people sharing great scripts and tutorials in this forum!

    The script was easy to unzip and install. I was impressed and very pleased that the script handles products installed by Daz Connect and is smart enough to know it cannot put its created files in Daz Connect folders. The script even offers a Dry Run mode that goes through all the motions but doesn't write anything to your library. so if you are hesitant, try that first to get an understanding of how it works.

    For the most part, the expressions that the script found and converted appear to work pretty well. It seems to work great with Emma and Jordi products. The script even converted full, upper, and lower expressions successfully. Even expressions with the tongue sticking out worked well. In some cases, I compared the converted G8F expression with just applying the original G3F expression to G8F. In many cases, I could see that the G8F converted expression was closer to the thumbnail than just applying the unconverted G3F expression. That assured me that the script was doing its thing successfully. I'm sure they are not all perfect, as mork, warned us. I got a huge long list of unmapped morphs. But even if they don't perfectly match the original and not all expressions are processed, most that are converted, work and are still good looking and useful.

    I'll add some comments here in hopes of helping make the script even better:

    The script found 13 products in my libraries that have expressions. I don't buy a ton of expression packs, so this is probably pretty accurate. I found one product with expressions that the script didn't identify. Tender Moments for Genesis 3 has two kissy face expressions and a default expression. They are compatible with Genesis 3 Female, but the script did not find that product.

    The script found Hopeful Model Poses and Expressions for Genesis 3 Female(s), but did not convert any of the expressions inside. the product contains 10 expressions compatible with G3F. It also didn't convert the couple expressions in Talisken Hair and Character for Genesis 3 Female(s) and FWSA Chastity HD for Genesis 3 Female. Daily poses for the Genesis 3 Female(s) has only one expression, a reset expression, but it wasn't converted, either.

    The Olympia 7 Expressive expressions were converted, but most appear to do nothing or maybe only move the eyes or mouth a tiny bit - nothing like the thumbnails. A long list of unknown morphs was shown in the Log-Output pane. They were things like Grin01, Laugh01, Cheek%20Squish%20Left.

    One thing threw me off at first. The expressions that are in pose products get put in Genesis 8 Female/Poses instead of Genesis 8 Female/Expressions. I couldn't find them at first and thought they were skipped. I ran the script again, using the cached search results (fast and an excellent feature of the script). This time I paid closer attention to the Log-Output pane and saw that it explicitly told me exactly where they were saved to. Wonderful! I found them with no problem once I understood. when running the script a second time on the same product, the script even warned me that files would be overwritten and gave me the chance to cancel. The script has a Yes to All option to allow overwrite, but it would be nice to have a No to All option, too, so it didn't require so many clicks on No to get out of it if you don't want to overwrite.

    I was unable to guess what [CON] and [CON-CUS] mean in the list of found expression products.

    Finally, thank you mork, for sharing this script with us.

     

     

    Screenshot 2017-07-26 15.18.55 G3F Expression Products Found.png
    816 x 639 - 47K
    Screenshot 2017-07-26 15.22.13 unknown morphs in progress pane.png
    804 x 638 - 66K
    Screenshot 2017-07-26 15.23.13 unknown morps found Ultra Genesis.png
    808 x 640 - 70K
    Screenshot 2017-07-26 15.24.32 unmapped morphs page 1.png
    566 x 2078 - 49K
    Screenshot 2017-07-26 15.24.45 unmapped morphs page 2.png
    570 x 2074 - 49K
    Post edited by barbult on
  • barbultbarbult Posts: 24,839
    edited July 2017

    Here is a comparison of a G3F expression on G3F, the same expression on G8F without conversion, and the converted expression on G8F. The improvement due to the conversion is very evident. The converted expression looks much more like the original.

     

     

    Hip Hop G3F Expression on G3F.jpg
    800 x 1000 - 359K
    Hip Hop G3F Expression on G8F.jpg
    800 x 1000 - 350K
    Hip Hop converted to G8F.jpg
    800 x 1000 - 348K
    Post edited by barbult on
  • morkmork Posts: 278

    Thank you very much for that extensive and positive feedback. I'm really glad it is of help to someone, so it was worth all the trouble to actually make it. :)

    I own only a very few expression packs, one of them is of Emma and Jordi, so I had only a very limited set I could test with, unfortunately.
    Since yesterday Olympia 7 added to that list, so I can definitely fix those now. The more data I have to test with, the less problems. :)
    I'll check your unmapped morphs and add those that need to be mapped, thank you very much for reporting these back!

    About the Expressions being in a Pose folder
    Some products come with expressions, but they don't put them into the dedicated Expressions folder. That's bad, because you quickly forget about them - I do.
    That is what the, at this time greyed out, option "Move to Expressions" was meant for - to move them to the Expressions folder after converting, so you can find them more easily.
    Right now it does not do this and the Expressions will be in the same folder where the script found them - like "Poses/PoseXY/BonusExpression".
    That's why you did not find them. I hope to implement that Move feature soon.
     

    About that [CON], [DIM], [COM-CUS], [DIM-CUS]
    You can hover the text over the list of found morphs, it will tell you what it is:
    [CON] this is a connect content
    [DIM] this is regular content, installed with DIM or manually
    -CUS tells you that this content is not in the Expressions folder, but somewhere else. I added it so you know you won't find them in the Expressions folder (until I add that Move feature). Until then, if you cannot find them, check the log output where those were written to - like you did.

    About "No to all"
    That absolutely was on my list, but that Dialog only supports three buttons unfortunately. I have to check what I can do about this, I really would like to add this.

    About not finding everything
    The reason might be my approach to determine if a product is actually an Expression or not. It's very fuzzy right now and I know I need to improve it, but I have to find out how, first. :(
    I also have at least one expression pack (from an external store) that is not located right now.

    A special case are mixed contents, like Poses and Expresions. The products you mentioned seem to be of that kind. In v1.01 I added a rather dirty hack to make the script not convert the poses, because it can't handle them (it could, but I rather not do it). I expected that my approach wasn't a very good solution and I need to check how to improve it. I'm still very new to DAZ scripting, but I'm sure I'll find a solution here as well.
     

    Again, thank you very much for that extensive and very positive feedback, I really appreciate it!
    And I'll see what I can do to improve the script, definitely. :)

    -mork

  • barbultbarbult Posts: 24,839

    Please let me know if there is more info I can give you to help.

  • Qestion for you, mork.

    WRT function DAZ_key_getVal, what's going on with the match indicies? Like, my intuition says any return values should be in the form match[0], match[1] but the function seems interested in match[1], match [2]. I've not, personally, dug deeply into the shape of yon pose file format, so I'm confused as to how match[2] is even a thing. I've never seen a pose file with more than 2 values (usually [ 0, n ]). I chalk this up to limited experience.

    I need to understand what's going on here to understand what key_add and key_mul are doing. I know I'm missing something (probably obvious) but I don't know what.

  • Wait. I think I got it. Maybe.

    match = regex composed of 2 capturing groups.
    match[0] is the whole regex.
    match[1] is the first group.
    match[2] is the second.

    Is that right?

  • morkmork Posts: 278

    Sorry, I sometimes very frequently visit the forums, sometimes not so much.

    Yes, you are right. It fetches the two values, but in my experience only the second actually is of interest. But I did want to preserve the first value as well, you never know...

  • No worries, I wasn't in a hurry. It's just something I needed to figure out.

Sign In or Register to comment.