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

I've taken up the habit of walking a quarter mile while waiting for my characters to load in, and I could walk over a mile if I try to apply a new character to an existing figure.

The theory being that it's the multitude of morphs that drag out the load time:

I am told I can delete unused characters from my library to improve the load time. I wouldn't have bought them if I didn't plan to use them. The returns for each model deleted are probably less than a second of recovered load time, so this is a fools errand.

Will better hardware help? I've heard having the library on a SSD (mdme?) drive would help. It's $300 to get a drive large enough for my library. Might be worth it if it helps significantly.

Processor power? I have an old i7-6700 3.4ghz processor, but I'm thinking to upgrade to a ryzen 5900x, how much would this help? Oh and that's another $700. So $1000 spent to reduce the tedium of loading models. (plus a new MB...)

V4 had a tool to control which morphs were loaded in with the figure and you could set defaults. Does g8 have a product like this?

«134

Comments

  • dijituldijitul Posts: 146

    It's not really a theory, it's more of a fact.  The solution is primarily related to the number of morphs loading due to the way DAZ Studio is programmed.  An SSD may speed things up a little bit, but you're mostly waiting for DAZ to process the information and build the interface.  In the end, it seems the only ways are to 1) remove conflicting morphs (see the log file for "duplicates" if you see that message pop-up during loads) and 2) remove unused morph packages.  Many of us have thrown ideas out there as it seems DAZ could use a makeover on the loading process, but who knows if they'll address it or not.  I've learned to live with it as you have -- prepare a cup of coffee or talk a short walk, or look for new items to buy while you wait :-)

  • PerttiAPerttiA Posts: 9,471

    One thing you can do before starting to delete morphs and characters - Check the log for any warnings and get rid of them first, sometimes they can effect the loading times significantly.

  • PerttiA said:

    One thing you can do before starting to delete morphs and characters - Check the log for any warnings and get rid of them first, sometimes they can effect the loading times significantly.

    yes

  • onixonix Posts: 282

    There is prety much nothing you can do to improve this, CPU upgrade will have a marginal effect and only single-core performance has an effect here, 

    ryzen 5900x is pretty much the same as old one in terms of frequency so you will gain nothing at all.

    Memory upgrade will do nothing either. SSD may have some effect if you currently sue HDD but probably not that much

     

    The way how I reduce character load times is rather than loading a character I duplicate the existing one then apply desired morphs and textures to turn it into the desired character. this way I only need to way once for the initial character to load. duplication is much faster.

     

     

    the other idea to try is to split things into different content folders 

    Not yet sure how that will work  but at least this wasy you can easily disable a portion of your content which is not needed at the current time

    Probably we can also try to make a copy of Genesis 8 with a separate set of morphs

     

    considering deleting unused content as I see characters have very few morphs so deleting them will have little effect, what is really using lots of morphs is expressions because every package has lots of them.

    It is also better not to use "zero figure" option as it takes almost as much time as loading a new character 

     

     

  • I have 2 ways to dealing with this:

    1st approach: I cloned G8F into a separate figure and DAZ copied all its resources into a new data folder structure (can take a while). Then I add/delete morph sub-folders folders manually based on the current project I'm working on (data\DAZ 3D\<Figure name & sub-folder>\Morphs). Downside here is I need to keep track of any updates to original G8F and clone those, but this way I keep G8F itself clean.

    2nd approach: I use an external script to analyze my .duf scene file and "hide" folders in data\DAZ 3D\Genesis 8\Female\Morphs based on what's used in the scene (need to go deep into referenced morphs to catch all references). Standard Windows "hidden" folders aren't loaded by DAZ, conveniently. I do this directly on G8M/F. Just need to remember to unhide everything before updating or starting from scratch. Nothing is ever deleted or moved so no permenant harm done.

    Just removing the zillion character morphs dramatically improves load times and I only need to use a handful of those per project. You can mix both approaches of course.

     

  • And yes, can confirm it's just DAZ being slow. I've even run my entire content folder off a gigantic RAM disk to see if it would help: nada.

    I've tried to find a way to bring back some form of "morph injection" to make all this easier but haven't been successful. If you hide morph folders before loading a figure, DAZ won't load those morphs. You can then unhide folders and load another figure, and DAZ will load the morphs on the 2nd one. But there's no way to get any more morphs on the 1st one and if you re-load your file, all figures will have all morphs.

    The closest I got is my 2nd approach above. I unhide everything at "character design" time (painfully slow), then once I've decided what morphs I'm interested in I add the character with those morphs in use to a scene. Then I close DAZ, use my script to analyze that scene and unhide only referened morphs, then re-open DAZ for scene/posing.

  • TBorNotTBorNot Posts: 362
    edited January 2021

    Group all items that "fit" and save them out separately as a scene subset.  Delete the fit group, then save your figure with its zillion morphs.  Open a new scene.  Now,merge  the saved scene subsets back individually, then fit each grouped part to the figure.  TaDa!  Sure, I wish you could group-fit, but it's faster than taking a walk.

    Post edited by TBorNot on
  • TBorNot said:

    Group all items that "fit" and save them out separately as a scene subset.  Delete the fit group, then save your figure with its zillion morphs.  Open a new scene.  Now,merge  the saved scene subsets back individually, then fit each grouped part to the figure.  TaDa!  Sure, I wish you could group-fit, but it's faster than taking a walk.

    How does that reduce load time on the figure? Maybe I'm missing something.

  • TBorNotTBorNot Posts: 362

    Oh, there's also something terribly wrong with grouped fitted objects, they go all wonky when reading back into the scene.  For example, Jepe's fitted hair shell walks away from the body.  Probably a symptom of the bug that is causing the load time problem.

  • grimulkan_9cfbd329bc said:

    Standard Windows "hidden" folders aren't loaded by DAZ, conveniently.

    Like this way better than uninstalling.  Still have access to textures.  Works well.  smiley

  • TBorNot said:

    Oh, there's also something terribly wrong with grouped fitted objects, they go all wonky when reading back into the scene.  For example, Jepe's fitted hair shell walks away from the body.  Probably a symptom of the bug that is causing the load time problem.

    Huh, good to know. Will experiment. Will simply unfitting them and saving the scene help? Easy to write a script that does/undoes that any time you want to save.

  • onixonix Posts: 282

    grimulkan_9cfbd329bc said:

    I have 2 ways to dealing with this:

    1st approach: I cloned G8F into a separate figure and DAZ copied all its resources into a new data folder structure (can take a while). Then I add/delete morph sub-folders folders manually based on the current project I'm working on (data\DAZ 3D\<Figure name & sub-folder>\Morphs). Downside here is I need to keep track of any updates to original G8F and clone those, but this way I keep G8F itself clean.

    2nd approach: I use an external script to analyze my .duf scene file and "hide" folders in data\DAZ 3D\Genesis 8\Female\Morphs based on what's used in the scene (need to go deep into referenced morphs to catch all references). Standard Windows "hidden" folders aren't loaded by DAZ, conveniently. I do this directly on G8M/F. Just need to remember to unhide everything before updating or starting from scratch. Nothing is ever deleted or moved so no permenant harm done.

    Just removing the zillion character morphs dramatically improves load times and I only need to use a handful of those per project. You can mix both approaches of course.

    This is a great find that you can just hide folders!

    but rather than trying to hide 100 folders one by one, they probably can be moved to another content folder and then you can hide/unhide them with one mouse click because Daz treats  all content like single folder

  • Yup, that's sorta the first approach (move or clone related sub-folders into a separate one). If you hide a top-level folder DAZ will ignore anything inside. Without doing anything else, just gathering all my specific character morphs into a single folder and hiding that cuts my load time in half.

    If anyone is interested in my script for hiding/unhiding individual folders automatically based on a .duf scene input let me know. Only reason I use this is because I dump all my main content into a single folder and only use folder navigation. I'm kinda lazy about maintaining separate content structures for each project and want it managed automatically.

    Also related: DAZ will still load morphs that are symbolically linked to a hidden folder, but I think you can just hide/disable the symlink to stop DAZ from loading it.

  • I will cry the day DAZ decides to remove this "feature" of ignoring hidden folders :) I would seriously not be using Studio right now without it.

  • PerttiA said:

    One thing you can do before starting to delete morphs and characters - Check the log for any warnings and get rid of them first, sometimes they can effect the loading times significantly.

     How do you get rid of the warnings?

  • For duplicate formulas (which may also result in a popup message while loading), you'll need to uninstall or figure out what's being duplicated. Could be duplicate material in different content folders or 2 versions of the same product that aren't supposed to be installed at the same time. Harder to trace if you use non-DAZ packaged products. This does impact load times.

    For other warnings ("could not find reference/output property/target"), I usually just uninstall offending products and related stuff if I don't use it much. Sometimes reinstalling helps, especially if it was updated and the update messed up. Otherwise I just leave them in there. I don't see a big hit to load times. If you really want to dig into it, the log will tell you which file has the problem and you can open it in a text editor to get to exactly which formula is misbehaving.

    Some products always generate warnings for me, even if DAZ manager installed. In the creator threads some people have the same problem and some don't. Dunno. Some of those references may be to other related products, but its supposed to be fine if you don't own them all (you just get warnings).

     

  • onixonix Posts: 282

    grimulkan_9cfbd329bc said:

    I will cry the day DAZ decides to remove this "feature" of ignoring hidden folders :) I would seriously not be using Studio right now without it.
     

    I would rather prefer to hope that they will implement some kind of CPU multithreading to load figures, because at this rate if you don't use any tricks like this loading a scene will take more than rendering it few times

  • Maybe the money right now is in onboarding new DAZ users who have small libraries to begin with, and don't need to deal with this. G8 has great content but can become horrible bloatware without management, sadly.

     

    I should add I also have a one-click DAZ script that does the following:

    * Set figures/items and all children to base resolution

    * Turn off smoothing for all children

    * Unfit any hidden children (this is a big one); optionally unfit and hide all child non-figures

    * Disable any enhancement morph controlls (like automatic limb bend bends)

    Calling the script a 2nd time reverses these changes and takes me back to the initial state.

    This doesn't affect scene load times, but is a HUGE time-saver in working with a scene. It does reduce animation and pose load times on a figure. Or I can change morphs/rotations on a multi-figure scene without huge lag. 

  • grimulkan_9cfbd329bc said:

    Maybe the money right now is in onboarding new DAZ users who have small libraries to begin with, and don't need to deal with this. G8 has great content but can become horrible bloatware without management, sadly.

     

    I should add I also have a one-click DAZ script that does the following:

    * Set figures/items and all children to base resolution

    * Turn off smoothing for all children

    * Unfit any hidden children (this is a big one); optionally unfit and hide all child non-figures

    * Disable any enhancement morph controlls (like automatic limb bend bends)

    Calling the script a 2nd time reverses these changes and takes me back to the initial state.

    This doesn't affect scene load times, but is a HUGE time-saver in working with a scene. It does reduce animation and pose load times on a figure. Or I can change morphs/rotations on a multi-figure scene without huge lag. 

    Whoa, you have one that unfits hidden children?  And reverses that?  What would be chances of getting this script?

  • I can just post the script somewhere. I'm not that active on the forums, is there a place to dump free scripts or something?

  • Saxa -- SDSaxa -- SD Posts: 871
    edited January 2021

    You could attach to your post, or even just post the text and each can make own dsa duf with notepad++.  If you attach, you may have to rename as .txt.

    This would be like Xmas! smiley

    Post edited by Saxa -- SD on
  • TimberWolfTimberWolf Posts: 233
    edited January 2021

    I've been using a system for a while now which swaps between two morph folders. It's only the G8F morphs which cause me yawn-inducing loading delays but this could be applied to the G8M folder (or any generation) as well. Just change to the appropriate directories.

    1 - Copy your existing morphs folder in \data\DAZ 3D\Genesis 8\Female to a backup somewhere, but leave the original in place. I called this folder Morphs.Bak but you can do as you wish.

    2 - Create a new, empty folder in \data\DAZ 3D\Genesis 8\Female and call it Morphs.Slim (you can change this but the code will need altering)

    3 - Copy the morphs you want from the main morphs folder (Morphs) to Morphs.Slim - In there I put the characters I want to use as well as the Daz head/body morphs and the shaping ones I use regularly. I've got around 20 characters in there at any one time as well as about 20 morph packages and loading times are below 10 seconds.

    4 - Open a text editor like Notepad, Notepad++ or Wordpad and paste this code:

     

    @echo offif exist "Morphs.Full" (rename "Morphs" "Morphs.Slim" &amp; rename "Morphs.Full" "Morphs" &amp; @echo on &amp; echo using FULL morphs file &amp; goto :exitroutine)if exist "Morphs.Slim" (rename "Morphs" "Morphs.Full" &amp; rename "Morphs.Slim" "Morphs" &amp; @echo on &amp; echo using SLIM morphs file &amp; goto :exitroutine):exitroutine@echo offpause

     

    5 - Save it with an extension of .bat in the same directory as your two morphs folders and create a shortcut to it wherever suits. Mine is called swap.bat but the name is unimportant.

    It should be self-evident what this is doing and at no point is there any 'delete' command. The extraneous 'goto' in line 3 bypasses extra code I have below it but have removed for this explanation. The worse that could potentially happen if you somehow got in a complete muddle would be to merge your 'slim' folder and 'full folder' with absolutely zero consequences as the slim folder is merely a subset of the full one.

    Running this batch file will alternately flip between your two morph files instantaneously.

    --

    It does involve a few minutes of set-up but it is, literally, a few minutes and saves me hours. If you do inadvertently leave out a morph or character you need, Studio will happily whinge at you and tell you exactly which additional ones you need to copy over. And, finally, if you inadvertently leave the 'slim' folder active when you install a new character or morphs package, no worries. Just copy and paste the entire of contents of morphs.slim into morphs and you're done.

    I hope I haven't made this sound complicated - it isn't - and it helps someone out.

    Post edited by TimberWolf on
  • edited January 2021

    Saxa -- SD said:

    You could attach to your post, or even just post the text and each can make own dsa duf with notepad++.  If you attach, you may have to rename as .txt.

    This would be like Xmas! smiley

    I wrote a large script library and I can't tease out just the functionality you want in a standalone script easily. Can probably rip it out with a half-hours work or something, if you're still interested.

     

    I basically make a list of all selected figures & children and list their properties. Then find the relevant ones and toggle them (in a loop). For setting "base" resolution it is:

    oProperty = oPropertyGroupTree.findProperty("lodlevel");if ( !oProperty.inherits( "DzEnumProperty" ) ) { continue; }if ( !oOwner.inherits( "DzGraftingFigureShape" ) ) { continue; }if (oProperty.getValue() != 0){	oProperty.setValue(0);}

     

    For smoothing, "lodlevel" would be replaced like so (property value can set to 1 or 0 as desired): 

    oProperty = oPropertyGroupTree.findProperty("Enable Smoothing");

     

     Regarding fits, I was a bit more clumsy. You'd use this to find the property:

    oProperty = oPropertyGroupTree.findProperty("Fit to");

     

    But its not a simple 0 or 1. I track the hierarchical structure of the scene in a separate set of functions (that's why I need to work a bit to rip the function out as a standalone). But here is a crude way to find the "fit to" parent from a given item (inside a loop of all relevant items):

    oOwner = oProperty.getOwner();if ( !oProperty.inherits( "DzSkeletonProperty" ) ) { continue; }if ( !oOwner.inherits( "DzFigure" ) ) { continue; }var oPerson = oOwner.getNodeParent();var iter = 0;while(iter < 10) //search for parent for up to 10 levels{	if (!oPerson) { break; } 	if (inheritsType(oPerson,["DzFigure"])) { break; }	oPerson = oPerson.getNodeParent();	iter += 1;}			if (!oPerson) { continue; } //Owner not foundif (!inheritsType(oPerson,["DzFigure"])) { continue; } //Owner not a figureif (oOwner.isGraftFollowing()) { continue; } //Disable processing geograft fittingvar numgraft = oPerson.getNumGraftFigures();found = 0;for (var igraft = 0; igraft < numgraft; igraft+=1){	if (pointersAreEqual(oPerson.getGraftFigure(igraft), oOwner))	{		found = 1;		break; //Found the graft parent who is also the owner	}}

     

    Then set fit or disable fit with these lines (oPerson is the figure being "fit to"; it is the same object found in the above snippet):

    oProperty.setValue(oPerson); //Enable fitoProperty.setValue(null); //Disable fit

     

    To figre out visibility to conditionally turn stuff off/on (or to make items visible/invisible), you can use these properties: 

    var oProperty_vis1 = oPropertyGroupTree.findProperty("Visible in Render");var oProperty_vis2 = oPropertyGroupTree.findProperty("Visible in Viewport");var oProperty_vis3 = oPropertyGroupTree.findProperty("Visible in Simulation");

     

    Sorry it's not standalone, but I can produce a standalone version if there is interest.

    Post edited by grimulkan_9cfbd329bc on
  • grimulkan_9cfbd329bc said:

    Saxa -- SD said:

    You could attach to your post, or even just post the text and each can make own dsa duf with notepad++.  If you attach, you may have to rename as .txt.

    This would be like Xmas! smiley

    I wrote a large script library and I can't tease out just the functionality you want in a standalone script easily. Can probably rip it out with a half-hours work or something, if you're still interested.

    Oh, hey.  Thanks alot for taking the time to explain and show those snippets of code!  

    Based on your other posts, I didn't get the sense it was part of a larger script.  Or maybe just how I am used to misc script functionality in Daz so far.

    You probably don't want to share the whole script?  Scanning quickly what you posted, am doubtful I could parse together a working script based on those pieces.  With whole code, I could probably make a working copy for my needs, especially with the commenting you just provided.  My issue is syntax familiarity is weak, but have enough oop experience and moxy that I usually can revise an existing working one to my needs.   If you want can send you a $20DAZ-GC for your Coffee Tipjar in exchange for whole script.  

     

     

     

  • edited January 2021

    Nah, I'll just make it standalone & post it here. Probably better for my sanity too.

    It's only linked to my other functions because its part of my workflow and does a bunch of other stuff that you probably don't care about. 

    Post edited by grimulkan_9cfbd329bc on
  • mumia76mumia76 Posts: 146

    Loading a G8F figure from scratch takes about 90s for me. It's not that bad, I'd certainly couldn't walk a mile or  quarter in 90 seconds :D

    My library is 660GB, 12GB of which is just morphs for G8F.

    I never actually use the apply figure fnction always load new figure when I want to change character. It's much more straightforward and faster. But if you must apply a new character to an existing figure just use the morph from the parameters tab and add the skin manually. It takes almost no time that way.

  • 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.

  • grimulkan_9cfbd329bc said:

    Nah, I'll just make it standalone & post it here. Probably better for my sanity too.

    Look forward to it.  Would be very appreciated!

  • onixonix Posts: 282

    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.

     

    As I understand what really matters is not the size of morphs but how many files have to be processed and especially if each is referencing other morphs.

    So rather than comparing gigabytes, you should compare how many items you have in the forlder.

     

    Considering most offending morphs I suspect that it will be those who are referencing other morphs which will be mostly expression morphs and poses.

     

     

  • ZilvergrafixZilvergrafix Posts: 1,385

    what is an offending morph?surprise

Sign In or Register to comment.