What can we do to improve the long load times of characters?

24

Comments

  • Lols.

    Based on Onix's response, in this contex, morphs with "high connectivity".

     

  • charlescharles Posts: 845
    edited January 2021

    Wasn't there a script to check load times between morphs, where it looks at the timestamps between each entry and reports the ones taking the longest?

    Anyway you can do this manually by looking at the logs rigth after loading a figure.

    Post edited by charles on
  • charles said:

    Wasn't there a script to check load times between morphs, where it looks at the timestamps between each entry and reports the ones taking the longest?

    Anyway you can do this manually by looking at the logs rigth after loading a figure.

    That's a great idea. Time to make some plots.

  • TBorNotTBorNot Posts: 369
    edited January 2021

    Another interesting insight into the Daz3D recursive looping that causes slow load times.  Playing around, I created a smoothing on the classic Ronen briefs to deal with poke-thru.  I cranked it up so that the time to create the smoothing was about a minute.  To my surprise, the smoothing starts but releases the user interface so you can continue to rotate the character while it is working.  Well, that's interesting.  So, I later tried copying morphs from the main character to the briefs by using the excellent "Fit Control" product, and lo and behold, it took FOREVER to copy the morphs.  Ahhh, I see what is happening.  Every time you touch a morph, Daz3D fires off the asynchronous process to do a fit.  Every single morph.  I can see how this could explode in your face if you have a lot of morphs.  The only fix I can see would be for Daz to implement a DO_NOT_FIT system variable that could be set to TRUE at the beginning of a long operation such as loading a figure or transferring morphs, then turned off once the operation is complete.

    "The easiest way to speed up a computer is to have it do less"

    Post edited by TBorNot on
  • TBorNotTBorNot Posts: 369
    edited January 2021

    So, can we define a "bad" morph?  Yes, I think we can.  A "bad" morph is any morph that causes the automatic fit routine process to run.  The degree of "badness" will be determined by circumstance depending on how many fitted objects are associated with the morph.  This is why slow load  times are so random, it "depends".

    Post edited by TBorNot on
  • edited January 2021

    TBorNot said:

    Another interesting insight into the Daz3D recursive looping that causes slow load times.  Playing around, I created a smoothing on the classic Ronen briefs to deal with poke-thru.  I cranked it up so that the time to create the smoothing was about a minute.  To my surprise, the smoothing starts but releases the user interface so you can continue to rotate the character while it is working.  Well, that's interesting.  So, I later tried copying morphs from the main character to the briefs by using the excellent "Fit Control" product, and lo and behold, it took FOREVER to copy the morphs.  Ahhh, I see what is happening.  Every time you touch a morph, Daz3D fires off the asynchronous process to do a fit.  Every single morph.  I can see how this could explode in your face if you have a lot of morphs.  The only fix I can see would be for Daz to implement a DO_NOT_FIT system variable that could be set to TRUE at the beginning of a long operation such as loading a figure or transferring morphs, then turned off once the operation is complete.

    "The easiest way to speed up a computer is to have it do less"

    I would obviously love for DAZ to fix the issues, but in the meantime I'm also interested in user fixes.

    I was thinking there were 2 issues:

    * A lot of morphs (can be "inactive") associated with a figure; could be the number of morphs as well as how many others they reference. Causes long scene/figure load times. Also seems to delay "zero" operations (egs., setting a T/A pose is a lot faster than zeroing the pose).

    * A lot of items "fit to" a figure (hidden or otherwise). This affects loading/previewing poses or an imations, any kind of posing or realtime manipulation.

    But maybe what you're saying is that they are both the same problem? "Fit to" basically generates a bunch of morphs that reference other morphs, so it is adding or amplifying the first problem.

     

    In my custom script workflow, I guess I've been partially mitigating this like so: auto-disable "fit to", do what you need to do, enable "fit to". This functions like a DO_NOT_FIT for those special cases of fit morphs. And no, it's not enough to temporarily turn off autofollow because there's still fitting that goes on that never shows up in the hidden morph list.

    So what we need is something like this, but for all morphs. Just delay or do updates in parallel while the user works. Though I don't know if that explains why inactive (0 value) morphs on a figure bloats the load time...  Maybe it still needs to load and process all potentially connected morphs.

     

    I wrote an external script that calculates the "connectivity" of every morph in my G8F folder (the number of other morphs they connect to, recursively). I want to see if those contribute more to lags.

    I'm thinking I want to "flatten" morphs (obj export->morph loader) for those cases so there is only a single merged morph in an otherwise complex figure, and see if that helps.

    Post edited by grimulkan_9cfbd329bc on
  • edited January 2021

    Some testing & results.

     

    Test 1: All morphs except DAZ defaults are "hidden" in the G8F folder (they're marked as usual Windows "hidden" folders)

    Base G8F loads in 3 sec

     

    Test scene w/ base G8F + 20 fitted items (no other morphs active):

    • loads in 34 sec
    • poses & animations load in 1 sec
    • poses & animations load in same time if items are unfit
    • real-time manual posing is snappy
    • real-time manual posing is just as fast if items are unfit
    • timeline animation playback is a bit slow
    • timeline animation playback is smooth if items are unfit (via my script)
    • After closing DAZ studio with the above scene loaded, I can re-run DAZ in a few seconds

     

    Test 2: All morphs I have installed are unhidden in the G8F folder

    Base G8F loads in 5 min 45 sec. I don't know what to make of it from the log. This jump here is 2 or so of those minutes:

    2021-01-23 16:45:09.749 WARNING: ..\..\..\..\..\src\sdksource\fileinput\dzassetdaz.cpp(6777): Could not find output property for formula: Genesis8Female:/data/DAZ%203D/Genesis%208/Female/Morphs/Blue%20Rabbit/Manhattan%20Outfit/Ring_morph.dsf#Ring_morph?value in file : /data/DAZ%203D/Genesis%208/Female/Morphs/DTG%20Studios/JayneG8/XBMNewJayne3.dsf2021-01-23 16:47:07.674 WARNING: ..\..\..\..\..\src\sdksource\fileinput\dzassetdaz.cpp(6843): Could not find target property for formula: Genesis8Female:/data/DAZ%203D/Genesis%208/Female/Morphs/DAZ%203D/Cross-Figure/alias_Genesis8Female_XID_Genesis8Male.dsf#XID_Genesis8Male?value in file : /data/DAZ%203D/Genesis%208/Female/Morphs/3djoji/Klareyn/pJCMKlareyn_XID_Bodyc.dsf

    I can't see anything really wrong with those warnings. They're DAZ store morphs and they're referencing optional products I don't have (and aren't required). It may be that DAZ doesn't really log the other calculations it does, so I don't know if I can map the log timestamps to specific offending morphs.

    I also don't know if I can get a clean connection with the number of morphs referenced by each morph (the connectivity). Some of the most "connected" morphs are DAZ original character morphs & expressions, so maybe I'll try hiding only those and see if it brings down the load times.

    Test scene w/ base G8F + 20 fitted items (no other morphs active; same test scene as Test 1 & it was saved with only the base G8F morphs in Test 1):

    • loads in 4 min 55 sec (not sure why faster than base G8F)
    • poses load in 1 min 18 sec, animations take forever & I gave up. Log is not helpful on what is taking so long with loading poses (a chunk of it is below).  It took the time before disabling limits on lHand::ZRotate, but that operation itself probably didn't take the time because the rHand::XRotate finished instantly. So it's some non-logged event that happened after the JCM loaded and before the limits were disabled.
    2021-01-23 16:17:37.500 Loaded file: JCM-LShldr-BendUpward.dsf2021-01-23 16:19:12.815 Disabled limits on "lHand::ZRotate"2021-01-23 16:19:12.815 Disabled limits on "rHand::XRotate"2021-01-23 16:19:12.815 File loaded in 1 min 4.6 sec.
    • poses & animations load in 2-3 sec if items are unfit (so whatever the reason, my unfit script cleans it up)
    • real-time manual posing is laggy (~5 sec just to rotate a limb by a fixed amount)
    • real-time manual posing is snappy if items are unfit
    • timeline animation playback is slow enough to not be useful
    • timeline animation playback is slow but usable, IF items are unfit. Basically the same speed as the "fit" version from Test 1 (with the unused morph hidden in Windows).
    • After closing DAZ studio with the above scene loaded, it takes FOREVER before I can re-run DAZ again because it is stuck doing something in the background. I need to end the task in task manager.

    Note that this is all with the exact same scene, geometry & texture resources as Test 1.

     

    My auto unfit/refit script has been letting me do posing & animations almost as though I didn't have all those extra morphs installed, but it doesn't actually help G8F loads, scene loads and the extra stuff DAZ has to do after closing Studio.

    Fits totally DO amplify the problem from having a bunch of unused morphs. Without those morphs, autofit items are actually pretty decent. So that's where the real problem is.

    Some combo of hiding unused morph folders on a per-project basis, and unfitting/fitting items before any sort of manipulation, may be a practical way to deal with this until DAZ comes out with an update. If they ever! This has been around for a while.

     

    UPDATE: I classified my morphs by the number of morphs they referenced (including themselves), and hid enough morphs to remove 50% of the number of morph references. This seemed to drop all load and manipulation delays by about 40% in Test 2. This is consistent with TBorNot said. I think the reason it didn't improve load times by 50% is because there is some overhead associated with the number of morphs, irrespective of the number of other morphs they reference.

     

    Post edited by grimulkan_9cfbd329bc on
  • edited January 2021

    Saxa -- SD said:

    Look forward to it.  Would be very appreciated!

    Here you go. It is messy, but it's standalone. Not the fastest script in the world because it enumerates all the things it has to do each time, but that was the fastest way I could make it standalone.

    At the very top, you'll find a bunch of options. By default, it will "unfit stuff", but you can set "fit_state = 1" to re-fit them. You can hardcode those options and save different copies of the script & attatch them to custom actions.

    Lemme know if you find any bugs. It does know to process groups, statics & rigid nodes in addition to figures and clothing, and it should ignore geo-grafts.

    EDIT: File won't attatch, so here it is: https://pastebin.com/eyDWMcA4

    Post edited by grimulkan_9cfbd329bc on
  • ZilvergrafixZilvergrafix Posts: 1,385

    grimulkan_9cfbd329bc said:

    Saxa -- SD said:

    Look forward to it.  Would be very appreciated!

    Here you go. It is messy, but it's standalone. Not the fastest script in the world because it enumerates all the things it has to do each time, but that was the fastest way I could make it standalone.

    At the very top, you'll find a bunch of options. By default, it will "unfit stuff", but you can set "fit_state = 1" to re-fit them. You can hardcode those options and save different copies of the script & attatch them to custom actions.

    Lemme know if you find any bugs. It does know to process groups, statics & rigid nodes in addition to figures and clothing, and it should ignore geo-grafts.

    EDIT: File won't attatch, so here it is: https://pastebin.com/eyDWMcA4

    any instructions how to do this?, I'm dumb since 1972 crying 

  • edited January 2021

    Zilvergrafix said:

    any instructions how to do this?, I'm dumb since 1972 crying 

     

    Turns out I can upload .zip files, so here you go. Unzip those to anywhere in your content folder structure (like any other script): you can launch them from your Content Library, or right click-->create custom action which will make it visible in window->workspace->customize to add to a menu/toolbar and bind a shortcut key.

    All the .dsa files are copies of each other with only the first few lines changed. Bad coding, but I'm lazy to make a GUI :)

     

    Files are:

    unfit_visible.dsa unfits visible items. By default, unfit items will also be hidden (there is an option in the script to disable this behavior).

    refit_visible.dsa repopulates the "fit to" field for visible items (and unhides them if they were hidden in the previous script). You'd use the first 2 scripts before/after any detailed manipulation/morph operation to speed it up.

    unfit_invisible.dsa unfits items that aren't visible (so they no longer slow you down).

    subd_smooth_off_visible.dsa sets visible items to base resolution and turns of mesh smoothing. It doesn't change the actual SubD level or smoothing amount; just disables it.

    subd_smooth_on_visible.dsa reverses what the above script does

    subd_smooth_off_invisible.dsa does the same thing as "subd_smooth_off_visible", but only does it for invisible items.

     

    If no items are selected, the scripts will run on the entire scene. If you select a group or figure, then they'll run only on their children.

    Hope that helps. Lemme know if there are any special requests, it is easy to modify.

    zip
    zip
    unfit_utility_scripts.zip
    25K
    Post edited by grimulkan_9cfbd329bc on
  • ZilvergrafixZilvergrafix Posts: 1,385

    grimulkan_9cfbd329bc said:

    Zilvergrafix said:

    any instructions how to do this?, I'm dumb since 1972 crying 

     

    Turns out I can upload .zip files, so here you go. Unzip those to anywhere in your content folder structure (like any other script): you can launch them from your Content Library, or right click-->create custom action which will make it visible in window->workspace->customize to add to a menu/toolbar and bind a shortcut key.

    All the .dsa files are copies of each other with only the first few lines changed. Bad coding, but I'm lazy to make a GUI :)

     

    Files are:

    unfit_visible.dsa unfits visible items. By default, unfit items will also be hidden (there is an option in the script to disable this behavior).

    refit_visible.dsa repopulates the "fit to" field for visible items (and unhides them if they were hidden in the previous script). You'd use the first 2 scripts before/after any detailed manipulation/morph operation to speed it up.

    unfit_invisible.dsa unfits items that aren't visible (so they no longer slow you down).

    subd_smooth_off_visible.dsa sets visible items to base resolution and turns of mesh smoothing. It doesn't change the actual SubD level or smoothing amount; just disables it.

    subd_smooth_on_visible.dsa reverses what the above script does

    subd_smooth_off_invisible.dsa does the same thing as "subd_smooth_off_visible", but only does it for invisible items.

     

    If no items are selected, the scripts will run on the entire scene. If you select a group or figure, then they'll run only on their children.

    Hope that helps. Lemme know if there are any special requests, it is easy to modify.

    thank you very much! going to follow your steps. laugh 

  • I'm playing around with another way to speed all this up. The issue with constantly fitting/unfitting items is that it is SLOW. Faster than lagging each edit, but not seamless. Even if you bind hotkeys to on/off scripts.

     

    The alternative script (synchronize.dsa) does the following when run on figures:

    • Creates an invisible copy of the figure, if it doesn't already exist. Includes geografts, but excludes any other children like hair, props or clothing.
    • If there are any items "fit to" the original figure, it re-fits them to the clone instead; but keeps them parented to the original figure.
    • Morphs, pose & other properties from original figure are copied to the clone (so the fit items will follow it). Only this last step will usually happen if this script is run again on the same figure.

    First time, it will be slow since it adds an invisible figure to the scene. This will bloat scene load times too if you save it that way, but it won't bloat VRAM usage since it is hidden.

    But from that moment on, any manual property changes to the original figure will not instanty propagate to the fit items. It will only "update" fit items when the synchronize script is run. I think this may be a way to get to what TBorNot suggested and is faster than completelly unfitting/refitting each time.

  • grimulkan_9cfbd329bc said:

     

    Turns out I can upload .zip files, so here you go.

    Wow!  Thanks alot Grim!
    Sorry. Real Life called me away, until today.

    Tested the first script, without reading further.  
    Potential.  THEN  saw your zip!

    It all works.  Thank you for xmas!
    I am suprised/not surprised that not more people say thank you.  Shakes head.  People.

    The unfit vis/unvis * remove smooth works quite well.
    With 3 chars on screen, the unfit/del smooth makes it so posing the char is manageable.  Not near as good as blender, but at least there is a decent response!   

    May just go back to texture-shaded with your scripts. Thanks!
    The speed isn't bad.  If you have a bunch of animating to do, this is way faster than what we had.
    Can make another script to unfit/unsmooth all in one script, and another to put them all back as it were.

     

  • Look at the first few lines: it is easy to just merge the variables to combine functions. Lemme know if you want me to explicitly mention the setup for some combo you want.

  • Thanks Grim !

    Am busy off-on next few weeks. So will look forward to combining them then.

    Essentially want 2 scripts.  (1) All off & (2) all on as it was. Need everything off for best animations, at times anyway.
    You have already done pretty much everything.  
    If i can't manage a few intro lines, i should be wacked with the garlic board ;)
    If for someone else who appears grateful, and asks for (1) & (2),well I wouldn't say no to saving a bit more time.

  • edited January 2021

    Like this? Attached.

    subd_smooth_fit_off_visible, subd_smooth_fit_on_visible, subd_smooth_fit_on_invisible, subd_smooth_fit_off_invisible

    zip
    zip
    unfit_morphs_more_options.zip
    17K
    Post edited by grimulkan_9cfbd329bc on
  • You are the bestest!!! Thanx alot!

    Did rename to gOFF_ & gON_ (vis&unvis) to make it fit my 1440p screen layout.  But that was it!

    Refit could be tad faster.  But so what!   Anim diff is manageable now and not a wait for IK bone (like r.hand) to start moving, other than smidge, and then it just goes.

    Really is totally appreciated!  Thank you!!  Hope u win a prize.  ;)

  • Yeah, speeding up refit is what I’m experimenting with. The “synchronize” script from a few posts ago may be a (cludgy) way to do it. But there are other advantages to using a fit clone, like manually controlling the extent of autofit. So I think it’s worth exploring.

  • Will bookmark this thread in-case you find a "faster" way to refit.  Will find it probably within a week or to a day.

    From my previous quick trials, the clone route worked.   May play yet when have more free time again with "cludgy" vs fit-clone.  

    TBH, didn't take a comparison look yet, but from the quick tests I did then, totally get why you write about 2 styles.  Do remember 1st seemed alot faster despite being more scripts.

    Be curious what you settle on.  Speed may be worth it too?

  • jbowlerjbowler Posts: 794

    grimulkan_9cfbd329bc said:

    Interesting. My G8F morphs aren't that much bigger (19GB), but it still takes 5+ minutes to load. Maybe I should dig into it more and find out if there are specific offending morphs. The log file never told me where the time was being spent.

    DAZStudio was taking between 2 and 3 minutes with my DAZ content to merge the "Base G8 Female" actor into an empty scene (i.e. start DAZStudio then just "merge..." the character).  I separated my DAZ content into 38 installation directories based on figure, props vs wardrobe vs pose etc and, by excluding those directories from the "current" CMS settings, managed to establish that pretty much all that time comes from the characters I have bought.  Even with the various morph packages included the basic G8F loads in 10-15 seconds; about 12 times faster.

    At present I've taken the 38 separate directories and come up with a base set that supports the scenes I have.  It turns out that I've bought quite a lot of stuff I don't use...  The basic insert is now down to 3-4 seconds.  I just need to go through the scenes I have moving characters from my various "Figures" folders to the "Figures in use" folders and catching any of the morph packages I actually use (I know the principle ones and those are already loaded by default.)

    It's quite a bit of work; I had to start by de-installing all of my DAZ content and it took me several days to a week to sort through it and install it by what are sort-of DAZ categories...  However the benefits of loading a DAZ actor in a few seconds rather than a few minutes seem really worthwhile.

    The way DAZ could fix this is by not having those morph dials; maybe someone out there wants 50% Victoria and 50% Edie, but surely it isn't worth slowing every load down by a factor of 10 or more to accomodate mix'n'match of character shapes.  Maybe better to put that in a multi-morph loader tool.

  • edited February 2021

    Here is the morph loader tool I'm working on:

    I made my own "categories" of morphs (as seen in the screenshot). Each category is a .txt file in the same folder as the script with a list of morph names. If a category check box is selected, those morphs are loaded. There is a button to automatically enable any other morphs with non-default values in the scene file, with a deep-search of all referenced morphs, so the selected scene always loads without any missing morph errors. 

    I normally check some of those boxes, setup props, characters, etc., then re-run the script with just posing & expression morphs enabled. This makes posing/animation work much faster!

     

    Edit: As I posted this, I realized I didn't need those categories & check boxes in the first place. All this tool needs is a scene with whatever figure(s), and any desired morphs assigned some non-default value. The scenes can be saved with different sets of morphs "in use" and themselves act as a way to manually categorize morphs.

    Post edited by grimulkan_9cfbd329bc on
  • PowerLoader reborn :)

  • jbowlerjbowler Posts: 794

    grimulkan_9cfbd329bc said:

    All this tool needs is a scene with whatever figure(s), and any desired morphs assigned some non-default value. The scenes can be saved with different sets of morphs "in use" and themselves act as a way to manually categorize morphs.

    It has to be a non-default value anywhere in the timeline but yes, that would fix a whole load of problems.  (I'm not sure if morphs can be changed in the timeline, but poses and expressions can).

    If I load a scene and some of the pose controls (and most likely morphs too) are not present I get the "product not installed" list and the scene loads without them, as would be expected.  If I save this scene it removes the missing poses/expressions and, maybe, morphs even if they have non-zero values.  At this point the scene has been changed and given that the change may be a deleted non-zero value somewhere down the timeline it's easy to fail to notice.

    It would be useful to have a script that "cleans" the whole timeline by removing morphs/poses/expressions which have zero values throughout the timeline.  I believe this would eliminate totally spurious "product not installed" reports; anything in that list would now be something that is genuinely required to correctly load the scene.

  • jbowler said:

    It has to be a non-default value anywhere in the timeline but yes, that would fix a whole load of problems.  (I'm not sure if morphs can be changed in the timeline, but poses and expressions can).

    I just tested with an animatable morph and whatever method I'm using seems to figure out if it is used anywhere in the timeline. The assumptions I'm making are:

    • If morph is dialled to a value different than the default value stored in the original morph file, it is "used".
      • This will still detect a morph as "used" even if something changes the default value in the scene, that is, even it doesn't appear in the "currently used" property list.
      • It will not detect morphs that do something at their original default value. I would normally expect morphs to shut off at the default value, but I don't know if DAZ enoforces this.
      • Morphs that (mistakenly?) load with a non-default value will always be detected as "used". I'd claim that's a bug in the original morph.
    • The current vs default value check is with some floating point tolerance, so it does mark morphs that are included in the scene but have default values everywhere as "not used".
    • The script doesn't do any calculations for the final value of any morph. If I started going down that road, It'll defeat the purpose of not loading the morphs in the first place. So if morph A is "in use" by the scene, but it references morph B in any way, then I also mark morph B as "used", whether or not the final calculation ends up turning on morph B or not.
    • I pre-build the reference graph of what morphs reference what other morphs the first time. It took me ~5 minutes to build this structure for all figure types in my giant content folder, but once this is done, any updates or changes to the content folder are automatically updated in a few seconds.

    jbowler said:

    It would be useful to have a script that "cleans" the whole timeline by removing morphs/poses/expressions which have zero values throughout the timeline.  I believe this would eliminate totally spurious "product not installed" reports; anything in that list would now be something that is genuinely required to correctly load the scene.

    Right now I don't modify the scene file, but it's not hard for me to remove references to morphs that are not detected as "used". So far, I've been erring on the side of marking morphs as "used" when in doubt, to avoid any missing morph error messages.

  • jbowlerjbowler Posts: 794

    grimulkan_9cfbd329bc said:

    The assumptions I'm making are:

    • If morph is dialled to a value different than the default value stored in the original morph file, it is "used".
      • This will still detect a morph as "used" even if something changes the default value in the scene, that is, even it doesn't appear in the "currently used" property list.
      • It will not detect morphs that do something at their original default value. I would normally expect morphs to shut off at the default value, but I don't know if DAZ enoforces this.
      • Morphs that (mistakenly?) load with a non-default value will always be detected as "used". I'd claim that's a bug in the original morph.

    Both the last two strike me as bugs in the morph.  There was a recent report somewhere here by a user who had apparently ended up with a rogue morph which morphed every character; so even an old scene would be changed.  I don't know if anyone ever worked out if it was a morph loading with a non-default value or a morph with a default value that changed things but I'm pretty sure that either must be wrong.

    • The current vs default value check is with some floating point tolerance, so it does mark morphs that are included in the scene but have default values everywhere as "not used".

    Most things I've tried have no real noticeable effect below 1% but I have seen DAZStudio report "changed" values for X/Y/Z transforms at the hip level simply as a result of scaling of the character, so there is certainly FP error in there and what you are doing sounds to me like the right approach.

    • The script doesn't do any calculations for the final value of any morph. If I started going down that road, It'll defeat the purpose of not loading the morphs in the first place. So if morph A is "in use" by the scene, but it references morph B in any way, then I also mark morph B as "used", whether or not the final calculation ends up turning on morph B or not.

    That's the behavior I would expect.

    jbowler said:

    It would be useful to have a script that "cleans" the whole timeline by removing morphs/poses/expressions which have zero values throughout the timeline.  I believe this would eliminate totally spurious "product not installed" reports; anything in that list would now be something that is genuinely required to correctly load the scene.

    Right now I don't modify the scene file, but it's not hard for me to remove references to morphs that are not detected as "used". So far, I've been erring on the side of marking morphs as "used" when in doubt, to avoid any missing morph error messages.

    Yes, cleaning up scene files, and pose timelines, is a separate, distinct, operation.

  • ZilvergrafixZilvergrafix Posts: 1,385
    edited February 2021

    Dunno is this info can lead to some improvement but:

    I did a video of removing morphs to accelerate G8 load time, but don't worry I'm not publishig that video here for now.

    my question for developers is this...

    I remove my entire morphs (as an experiment), now I load some of my custom characters an Daz asks for missing morphs

    is that a problem?, NO, nope, I removed manually, and they are safe on another Hard Drive, this is an experiment, I remark that.

    my question is, IF Daz Studio knows what morphs do I need to load correctly my figure, listing them with no delay in nothing,

    why not using that info in create a FINAL FILE (example, when your figure does not need more morphs available for modifications, my figure is perfect already) when we create Subsets or Character Presents or Shaping Presents with no need to load my 23Gb of Genesis8 morphs and only load that list of morphs needed to load my customized figure?, a final file is not an invent of mine and I know some softwares uses this kind of settings, dumb of me I can't remember which software I saw that feature.

    Yes it sounds confuse and my rotten English can be more confused and very bad explaining situations but let me show an example, Imagine you do/create/replicate RYU from Street Fighter using only Genesis 8.1 male morphs and your result is this:

    Obviously I don't need to make other modifications, I've made a perfect RYU replica with G8.1M not using original videogame assets.

    and such file does not need my ton of other morphs because I don't need another morph for Ryu but the neccessary ones, that is a final file character, if such file format or feature would exists in DS no more loading your entire morph library, you only would load your subset or character Ryu in any scene and voila. a final file format only will recall your list of morphs neccessary to create my RYU. gotcha? capisce?, understood?, quedo bien claro lo que intento explicar?

     

    Post edited by Zilvergrafix on
  • TaozTaoz Posts: 9,938

    One solution could be a variation of the old morph injection technology, where the morph automatically gets injected into the character as soon as you set the dial to anything but zero, and gets removed again as soon as it's zeroed.  Or maybe a checkbox on each morph dial for injecting/removing the morph.   

  • volpler11volpler11 Posts: 29
    edited February 2021

    I have done some previous investigation into figure load time at here.

    My main findings are:

    1. most of the time is spent loading a cache file located at "AppData\Roaming\DAZ 3D\dson\cache\DAZ 3D\Genesis 8\"
    2. This suggest single core cpu performance is the main bottleneck. SSD / More core wouldnt help.
    3. Installing / removing morphs will cause Daz to rebuild the cache file. The next figure load will be significantly slower, think 2-3x slower. Its important to only compare figure load time when Daz is not rebuilding the cache file (ie a do figure load before timing figure load time).
    4. The most important point: the cache file is an ascii file containing all the formula and morphs data. Its possible to parse the cache file to get an estimate of how much performance penalty each item incurs. A few morphs contribute a lot of load time while others hardly contribute any.
    5. Product with lots of formulas or properties will also increase load time.
    Post edited by volpler11 on
  • Taoz said:

    One solution could be a variation of the old morph injection technology, where the morph automatically gets injected into the character as soon as you set the dial to anything but zero, and gets removed again as soon as it's zeroed.  Or maybe a checkbox on each morph dial for injecting/removing the morph.   

    That is what is happening now. It's setting up the channels and links that make it work that takes the time.

  • volpler11volpler11 Posts: 29
    edited February 2021

    Did some more poking. 

    The cache file is basically most of the files in "data\DAZ 3D\Genesis 8\Female\Morphs\...." mashed together with one important exception. The bulk of the data in those files are of two types: morph vertex delta and formula. The important exception is that morph vertex deltas are not included in the cache file and is loaded on demand when you change the slider. Formula data still make into the cache and can slow things down significantly. 

    This lead to one important observation: the load time is proportional to the number of files in the morph folder but not necessarily file size. If the file contain large amount of delta that is not included in the cache it will be fast to load. On the other hand if the file contain lots of formulas it will be very slow to load.

    Edit:Also the morph file could be compressed which would make it smaller than it actually are.

     

    Post edited by volpler11 on
Sign In or Register to comment.