Ridiculously long loading time........

2»

Comments

  • Sensual ArtSensual Art Posts: 641

    So, if I understand correctly there exists a many-to-many relationship between morphs(shapes and poses) which are classified as sub-components(downstream dependencies) and controllers(upstream dependencies). And since this relationship is not maintained in a normalized fashion centrally, it necessitates scanning of all relevant morph file resources everytime a character is loaded. What if the building of that relationship graph for morphs could be centralized and normalized in the CMS itself in relational tables? Loading a character would trigger a one-way traversal of the graph and fetch only the relevant morphs (i.e. fetching only sub-components). We don't have to worry about loading all associated controllers unless that associated controller was explicitly added to the scene directly or as a sub-component of another explicitly added morph.

    Creating the many-to-many dependency graph in the CMS could be triggered manually or automatically whenever new characters or morph packages are installed/uninstalled.

  • Bejaymac said:
    The long load times are down to nastier errors, basically they are causing DS to go "not responding", the more of these you have the longer it takes DS to recover, add in a boat load of the other errors to slow down DS and your computer, and it's no wonder some are talking about 30 minute load times..

    Main problem here is despite all the people complaining about long load times, they don't come back and shown their log file, so even I have no idea WTF is causing them although I do have some suspicions. Three "Failed to create alias" has locked up DS for 4 minutes for one user, problem here is the log doesn't tell which alias file it crapped out on.

    Does someone know how to fix the "Failed to create alias" respectively how to identify the responsible file ?
    Removing files step by step from "data\DAZ 3D\Genesis 8\Female\Morphs" is no option with so much content LOL

    2020-05-01 00:10:19.277 WARNING: ..\..\..\..\..\src\sdksource\fileinput\dzassetdaz.cpp(9012): Failed to add user alias property to node.2020-05-01 00:10:19.277 WARNING: ..\..\..\..\..\src\sdksource\fileinput\dzassetdaz.cpp(1552): Failed to create alias!2020-05-01 00:18:58.667 Begin Loading Character Addons...2020-05-01 00:19:02.930 File loaded in 0 min 3.5 sec.2020-05-01 00:19:02.931 Loaded file: Genesis 8 Female Eyelashes.duf2020-05-01 00:19:02.964 Loaded Morph Deltas in 0 min 0.0 sec.2020-05-01 00:19:02.965 Loaded file: PHMEyelashesLengthUpper.dsf2020-05-01 00:19:02.982 Loaded Morph Deltas in 0 min 0.0 sec.2020-05-01 00:19:02.982 Loaded file: PHMEyelashesLengthLower.dsf2020-05-01 00:19:02.988 Loaded Morph Deltas in 0 min 0.0 sec.2020-05-01 00:19:02.989 Loaded file: PHMEyelashesCurl.dsf2020-05-01 00:19:03.216 Loaded Morph Deltas in 0 min 0.0 sec.2020-05-01 00:19:03.217 Loaded file: PHMEyelashesLengthUpper.dsf2020-05-01 00:19:03.234 Loaded Morph Deltas in 0 min 0.0 sec.2020-05-01 00:19:03.235 Loaded file: PHMEyelashesLengthLower.dsf2020-05-01 00:19:03.253 Loaded Morph Deltas in 0 min 0.0 sec.2020-05-01 00:19:03.263 Loaded file: PHMEyelashesCurl.dsf2020-05-01 00:19:03.277 Loaded Morph Deltas in 0 min 0.0 sec.2020-05-01 00:19:03.278 Loaded file: PHMEyelashesExpand.dsf2020-05-01 00:19:04.394 File loaded in 0 min 0.1 sec.2020-05-01 00:19:04.394 Loaded file: Base MAT Eyelashes.duf2020-05-01 00:19:04.396 Finished Loading Character Addons2020-05-01 00:19:04.952 File loaded in 10 min 1.7 sec.2020-05-01 00:19:04.952 Loaded file: Genesis 8 Basic Female.duf2020-05-01 00:22:32.865 Loaded image G8FBaseLegsMapD_1003.jpg2020-05-01 00:22:33.066 Loaded image G8FBaseEyes01_1007.jpg2020-05-01 00:22:33.264 Loaded image G8FBaseArmsMapD_1004.jpg2020-05-01 00:22:33.418 Loaded image G8FBaseMouthMapD_1005.jpg2020-05-01 00:22:33.613 Loaded image G8FBaseFaceMapD_1001.jpg2020-05-01 00:22:33.888 Loaded image G8FBaseTorsoMapD_1002.jpg2020-05-01 00:22:34.062 Loaded image G8FBaseEyelashes_1006.jpg

     

     

  • Richard HaseltineRichard Haseltine Posts: 99,460
    mrinal said:

    So, if I understand correctly there exists a many-to-many relationship between morphs(shapes and poses) which are classified as sub-components(downstream dependencies) and controllers(upstream dependencies). And since this relationship is not maintained in a normalized fashion centrally, it necessitates scanning of all relevant morph file resources everytime a character is loaded. What if the building of that relationship graph for morphs could be centralized and normalized in the CMS itself in relational tables? Loading a character would trigger a one-way traversal of the graph and fetch only the relevant morphs (i.e. fetching only sub-components). We don't have to worry about loading all associated controllers unless that associated controller was explicitly added to the scene directly or as a sub-component of another explicitly added morph.

    Creating the many-to-many dependency graph in the CMS could be triggered manually or automatically whenever new characters or morph packages are installed/uninstalled.

    What about third-party content that doesn't come with metadata?

  • BejaymacBejaymac Posts: 1,886
    Bejaymac said:
    The long load times are down to nastier errors, basically they are causing DS to go "not responding", the more of these you have the longer it takes DS to recover, add in a boat load of the other errors to slow down DS and your computer, and it's no wonder some are talking about 30 minute load times..

    Main problem here is despite all the people complaining about long load times, they don't come back and shown their log file, so even I have no idea WTF is causing them although I do have some suspicions. Three "Failed to create alias" has locked up DS for 4 minutes for one user, problem here is the log doesn't tell which alias file it crapped out on.

    Does someone know how to fix the "Failed to create alias" respectively how to identify the responsible file ?
    Removing files step by step from "data\DAZ 3D\Genesis 8\Female\Morphs" is no option with so much content LOL

    Sadly no, the two log entries I've seen both show that error right before DS does "Begin Loading Character Addons", so it doesn't even give you a hint as to where in the load order it's happening.

     

    mrinal said:

    So, if I understand correctly there exists a many-to-many relationship between morphs(shapes and poses) which are classified as sub-components(downstream dependencies) and controllers(upstream dependencies). And since this relationship is not maintained in a normalized fashion centrally, it necessitates scanning of all relevant morph file resources everytime a character is loaded. What if the building of that relationship graph for morphs could be centralized and normalized in the CMS itself in relational tables? Loading a character would trigger a one-way traversal of the graph and fetch only the relevant morphs (i.e. fetching only sub-components). We don't have to worry about loading all associated controllers unless that associated controller was explicitly added to the scene directly or as a sub-component of another explicitly added morph.

    Creating the many-to-many dependency graph in the CMS could be triggered manually or automatically whenever new characters or morph packages are installed/uninstalled.

    What about third-party content that doesn't come with metadata?

    Lets not forget about those of us that don't use metadata and regularly delete it.

  • Sensual ArtSensual Art Posts: 641
    edited May 2020
    mrinal said:

    So, if I understand correctly there exists a many-to-many relationship between morphs(shapes and poses) which are classified as sub-components(downstream dependencies) and controllers(upstream dependencies). And since this relationship is not maintained in a normalized fashion centrally, it necessitates scanning of all relevant morph file resources everytime a character is loaded. What if the building of that relationship graph for morphs could be centralized and normalized in the CMS itself in relational tables? Loading a character would trigger a one-way traversal of the graph and fetch only the relevant morphs (i.e. fetching only sub-components). We don't have to worry about loading all associated controllers unless that associated controller was explicitly added to the scene directly or as a sub-component of another explicitly added morph.

    Creating the many-to-many dependency graph in the CMS could be triggered manually or automatically whenever new characters or morph packages are installed/uninstalled.

    What about third-party content that doesn't come with metadata?

    All the required morph metadata(such as label, path, default values, sub-components, controllers, keys etc) is already available in the individual morph files irrespective of whether they are released by Daz or any third-party store. And that information is sufficient to populate the morph and relation tables in the CMS. So we would need these 3 changes:
    1) Replace the file scanning strategy to load the morph relationship and other metadata from the CMS on character or scene load. Morph deltas would still need to be read from file.
    2) Provide a functionality such as "scan for morphs" which can also be invoked manually using a menu option or button that loads the morphs metadata into the CMS by scanning all morph files in the content library. This is the only functionality that would allow morphs to be read from files (except for loading deltas, of course). This funtionality needs to be triggered every time there is:
        a) Change in content library paths
        b) Installation/removal of any morph packages
        c) Installation/removal of characters
    3) Provide a universal context-aware morph browser (whose structure would be similar to the shapes pane but acts like a content library for morphs). This would allow the user to search/navigate for desired morphs and manually add them to their characters. The morph browser loads its content(i.e. morph metadata) only from the CMS so there is no performance impact due to file I/O(except for morph display icons). Morph browser only facilitates adding morphs to a character but morph removal needs to be addressed separately. Removing morphs functionality would check whether that morph is a sub-component of any other morphs (i.e. check its own controller entries). If that check passes (i.e it has no controller entries), it can safely be removed from the character and but would not remove any of its own sub-components which could also be sub-components of other installed morphs. It would only remove its own controller entry from those sub-components. So, a morph which is not explicitly added by the user and does not have any controller entries can be safely deleted/removed from the library or a loaded character.

    This approach would give us the following benefits:
    1) Less number of morphs to process - DS would only process the morphs that are part of the "minimum viable set" plus any that has been explicitly added by the user (or added implicitly by traversing its sub-components hierarchy) to a character.
    2) Significantly faster character and scene load times - Not only DS would be scanning for fewer morphs every time a character or scene is loaded but fetching the morph metadata from the CMS. This way DS would avoid extensive morph related file I/O unless morph deltas need to be loaded.
    3) Preemptive morph dependency validation and error checking - Morph dependency and validation would be triggered only when the functionality for "scan for morphs" is invoked rather than every time a character or scene is loaded. This would facilitate early detection and reporting of errors in morph metadata which can be acted upon before those erroneous morphs gets added to characters in scene. This would result in better scene integrity. The effect of morph deletion/removal from the file system on an existing scene can be handled by validating the morph data from the scene with that in CMS when the scene is being loaded. So it is imperative to trigger the "scan for morphs" functionality every time morph packages or characters are removed/uninstalled.

    Challenges:
    This approach decouples the file based morph metadata access from the character and scene loading process which enables faster load times for characters and scenes. But the efficacy of this approach depends upon the triggering of "scan for morphs" functionality which needs to be automated and reliably triggered based on #2a,b,c above. Changes in content library paths are supported only inside the DS. DIM and connect would already know when to trigger. Which leaves us with manual installation/removal of morphs, in which case, the user has to manually trigger that functionality (from a menu or button) similar to what would be required for manually adding smart content.

    This approach should address manual addition and safe removal of shape and pose morphs which I believe constitute the bulk of all morph files. Simulation and smoothing morphs are already being added manually. Which leaves us with corrective morphs, which I assume can be adequately handled by the above approach unless you think I am missing any of their unique characteristics.

    Post edited by Sensual Art on
  • Sensual ArtSensual Art Posts: 641
    Bejaymac said:
    Lets not forget about those of us that don't use metadata and regularly delete it.

    The ad hoc deletion or any scope of corruption of metadata can be addressed by manually trigerring the "scan for morphs" functionality as a menu option or button as described here.

  • Richard HaseltineRichard Haseltine Posts: 99,460

    I'm not at all sure a reliable scan fr new items would be more efficient than the current system, and I suspect we'd end up asking "Have you run the scan for new morphs?" the way we used to ask "Have you run the DzCreaeExPFiles-v4 script?" in every thread on morph issues.

  • Sensual ArtSensual Art Posts: 641
    edited May 2020

    I'm not at all sure a reliable scan fr new items would be more efficient than the current system, and I suspect we'd end up asking "Have you run the scan for new morphs?" the way we used to ask "Have you run the DzCreaeExPFiles-v4 script?" in every thread on morph issues.

    I could have suggested an additional checkbox under "Content Database Maintenance" or may be, as an option in Preferences > Startup but that wouldn't be necessary. For typical scenarios, such as adding/removing morph related content using DIM/Connect would automatically and transparently trigger a partial addition/removal of morph metadata similar to how the typical content metadata is handled presently.

    Outside of DIM/Connect there are couple of ways:

    1) Third party content which are installed as DIM packages (i.e. with package metadata) would not require a full scan and the morph metadata in those packages can be scanned incrementally and transparently just like the typical content without any additional manual intervention.

    2) Third party content which do not have any package metadata or are distributed in exploded format would necessitate a full scan for morph metadata within the content. We can incorporate the "scan for morphs" option into the existing "Refresh" context menu option. Then the scan could be "transparently" triggered whenever the user refreshes the content library folder inside DS, which they would have to inevitably perform for reloading the manually added content. Since the refresh menu option is path aware, it would reload the morph metadata from the morph files visible under the folder where it is invoked. That way the user wouldn't have to invoke any additional "scan for morphs" function (as a menu or script).

    So, that leaves us with no further risk of the user missing out on the invocation of "scan for morphs" action. You may consider the capability of manually running "scan for morphs" a redundant option now :)

    P.S. In case you are wondering what would happen if the user decides to restart DS without refreshing the content library folder, you can always suggest them to manually refresh that folder using the refresh context menu instead of asking them to run any script or any additional menu option.

    P.P.S. I wish there was an interactive wiki which could enable me to take these questions and incorporate their resolution into my original suggestion, but I guess this would have to suffice.

    Post edited by Sensual Art on
  • Richard HaseltineRichard Haseltine Posts: 99,460

    You can make a feature request via https://www.daz3d.com/help/help-contact-us

  • Marmalade BoyMarmalade Boy Posts: 103

    Thank you all for the active and lively discussion....I deleted a few things and the loading time is now down to 6 to 7 minutes for genesis 8 and about 8 minutes for genesis 3. On Genesis 8 I noticed an HD product is auto loaded. I suspect this is an assets and can be deleted from the data folder. However, it might be needed for a another product. I remember there were several post about zeroing the "auto load" morphs and then saving the base figure. Is that a thing or am I remembering wrong?

     

  • TheKDTheKD Posts: 2,677

    Yeah you fix it that way, or by editing the duf for it in the data folder with a text editor, and setting the default from 1 to 0.

  • Marmalade BoyMarmalade Boy Posts: 103

    Hi TheKD,

    Would you happen to have a link to instructions on how I might edit the Duf file? As for morph asset, do I just zero out the autoload HD morph and resize it over the old file?

  • TheKDTheKD Posts: 2,677
    edited May 2020

    If you know the product that is causing the issue, the easiest way, go to the installer zip into the data section, that will tell you exactly where to look in your library data folder to find the offending file. Usually, especially if gotten in daz3d store, you will be looking in data > daz 3d > Genesis 8 > female > morphs > *vendor name* > *character set name*  The one you want to edit should have FBM in the name.

     

    Before starting, I recommend you copy paste the file somewhere safe like desktop, just in case you goof up and need to try again. Right click the file, open with > your preferred text editor. Now, if it looks like gibberish, that means it is compressed. You can decompress it inside studio, go to window > batch convert. In that pane push add files button, navigate to the file, then click apply. It should now be human readable in the text editor. It makes it easiest, if you use something a bit more advanced, like notepad++ is what I use. Control F to bring up search, and search for 1. Look with search for a line that says:

    "value" : 1

    Change the 1 to 0, save the file, and that should be all there is to it. Open a fresh daz studio session, and load in the figure to see if it did the trick.

    I forget how to save the zeroed out morph properly from inside daz studio to fix it, someone else will have to help with that method. I find it easiest to use the text method.

    Post edited by TheKD on
  • RD2ARTRD2ART Posts: 28
    mrinal said:
    TheKD said:

    If you really want to use a "cleaner" G8 with injection-like behavior, it is possible to do manually. Set up a library with just what you consider bare essentials g8 stuff installed, probably be a good idea to keep "base pro characters" installed in there. Create and map another "temporary" library, and drag drop the morph sets you want to use from the product zip for the current artwork into there before openning DS and starting to work. The problem with that system, is you would have to know or make note of what to reinstall in the "temporary library" if you wish to revisit an old scene you set up. Perhaps a notepad file kept with the saved scene listing what is needed. I do this method, but with props, scenery, vehicles etc etc.

     

    RD2ART said:

    I have committed on this issue before, and the only solution I have found to loading a character quicker was to remove morphs in the "data" folder and add them as you need them. It is a little of a pain, but your load times are faster and the RAM that each character uses is less. I don't know if this is caused by the number of character assets/morphs in the data folder or if it is because of they way I have my content library setup. I only have the character morphs that I use alot in the data folder and as I need another one I will add it before I launch a character. If you add it after you launch a character you will need to save your work and restart the program. The character will then add the morph the next time you load the scene, which isn't a problem because you can still pose and work with the scene and then correct uses later when you reopen the file.

    The problem with those approaches is that one has to manually maintain a directory of morph product names(for connect), filenames(for DIM/Manual) and morph display names which is a non trivial task where the benefit does not necessarily outweigh the effort. And more importantly, you lose the capability of searching the morphs by name in the content library. Well, may be, the CMS may still have those entries but the file mapping would be missing if their paths are not included in the loaded content library so you may see empty useless placeholders assuming search works in the first place.

    On the other hand, injection based morphs enable one to benefit from full content library search for morph files without requiring maintenance of an external directory and without incurring the latency overhead while loading characters.

    I see your point, but to me, most of my morphs are useless unless you are using that character. Sometimes I might get a character just for the skin or eye material. I don't want that character's morphs to load if I am never going to use the morphs. Also I have a G8F and a G8M character preset that I use for every project and then add the material and then load the morphs. I usally use the parameters tab and the sliders to add morphs to the character. At first I spent like 30 mins going through the data file and selecting the morphs that I don't want. But now. I buy a character I place the morphs in another folder and if I want that character's morphs I move it back into the data folder. It doesn't consume that much time and my figure takes up 1.5 GB of RAM and it takes 5 secs to load. 

Sign In or Register to comment.