-
Is There A Plan To Speed Up G8 (and future generations) Loading Times?
Richard Haseltine said:
Better for whom? Certainly not most users who would be trying to find the right corrective morphs, once they realised that was what was needed. Espeically if they were using expression presets and didn't know immediately which expression they should be correcting. This type of function is a long-standing, and expected, feature.
There is no need to look for specific corrective morphs manually. all current functionality can be fully retained with the only difference that all those morphs are turned on and loaded only when the appropriate character is turned on.
And if not they are neither loaded in memory neither they can even potentially affect anything at all.
People are likely to have and use the expressions (and in fact, many expression packs use the base expressions). People will expect them to work, hence the inclusion of fixes. Adding a slew of fesh expressions for each character would not be a practical solution.
There is no need to lose that functionality but I am quite sure many people do not even know that it is being done. so the least that should be done is to mention this in the character description that it contains correction morphs.
Also, most vendors do not use fixes and release separate expression packs.
But why would you want breakage to be the default behaviour? And how would an extra ERC controller help reduce load times?
You do seem to be labouring under a slight misapprehension, though - nothing is injected into the default expressions in this case; rather the corrective morph has two links, one to the default expression and one to the head shape, one of which will add its value and the other of which will multiply (so the net value is head shape strength * expression strength, ensuring the correct amount of adjustment is applied).
Just because it would be much faster and reduce memory usage significantly. In that situation, all morphs have to be processed just top-down and there is no longer any need to even care or load any dependencies for morphs that are not in use. Broken-buggy content no longer can harm anything and it becomes easy to identify. This extra ERC controller essentially would act as an index to indicate what else has to be loaded and when it has to be loaded. (Now Daz just loads everything because it can't know what it should load and when.)
Of course, I do not expect that anyone will go so far as to make changes that will beak half of the existing content so it is just theoretical thinking on how things could be done in the beginning. and I even brought it up because I was not fully aware of how things work. The current system where Daz just loads everything is simpler because vendors do not need to track their morphs either and they can just create some Correction morph and drop it for Daz to process. That alternative system would require them to track everything they do and apply appropriate changes.
So looks like we are quite doomed to live with this forever. The best thing to expect now is maybe some kind of cashing so that rather than processing all this list of morphs every time, daz could just save the entire structure and just look if anything changed in the directory.
Also, it would be possible to create those extra erc controllers automatically as it is not that hard to look up for correction morphs that are referencing some common property to index them for faster loading (and that index file also becomes extra erc controller which consolidates all those morphs ) but later ask all vendors to do things in another way when they generate those index files themselves. or just give an option to regenerate those index files from time to time when new content is installed. This way none of the current functionality would be broken.
Maybe my terminology was inaccurate because I meant that extra formula is injected into the expression controller making it do some additional calculations every time it is used.
if such a link is added, extra CPU time will be consumed to perform all those extra checks.
I morphed a piece of clothing, but now the rig is weirdIt turns out it was the transfer utility that would do what I needed.
Morph Loader Pro problem(Daz4.15) need help with morphsHi everyone its me again I need help with Morph Loader Pro my first time. I want to create a custom morph for my Gen8 "Basic Wear - Tank top" and did some exporting from Daz to Blender (this is the confusing part). I have all the models namely - Genesis 8, Tank Top set at "Base Resolution" and did apply all the "Shader Mixer" for Genesis and Basic Wear Tank Top. Afterwards I tried to export them to Blender as .OBJ one by one @ 1% scale. So I went to the blender(2.92) to import the .OBJ one by one and this is how it looks like and then began doing some minor movements to the TanK Top (no vertex deletion) see the photo reference. Afterwards I delete Genesis just to make sure that it dont get exported and proceed to export the Tank Top with the scale of "100", on Daz3d again on the tank top using morph loader pro but after applying the morph it came out weird. Need help please if someone can correct or direct me to a proper way of doing the custom morph on Daz4.15 would really appreciate the help, did try alot of things but still the morphs came out weird its really a let down for me. : (
Random Missing File Notification Help!PerttiA said:
First make sure that DS is not running, then if you start from the base folder of your content library in Windows Explorer (File Explorer) and navigate to;
...\data\DAZ 3D\Genesis 8\Female\Morphs\
Do you remember the name under which you have saved your own morphs?
That name is the name of the folder that contains morphs and characters that you have saved as assets. Choose that folder and right-click to get a menu, choose "Properties" and change the attribute to "hidden" - Some have said this is enough to hide the morphs in that folder from DS and if it does work, it's easy to change back.Now with the morph folder hidden, start DS and when it's open go to "Help->Troubleshooting->View Log File", select everything and press "Delete", close the logfile and choose "Save" when asked.
Load the "Genesis 8 Basic Female" and once it has loaded, open the log file again and save it somewhere you can easily find.
Did DS complain about the missing file?If DS still complained, attach the log to your post with the "Attach a file" under the "Leave a Comment" window, that way we can have a look at it.
I found where my morphs were, hid the folder and when I loaded a base Genesis 8, the error did NOT happen. So, it's an issue with the morphs inside that folder? Or, the lack of a morph as it were? I've attached two log files. log is the one with the morph folder hidden. log2 is with the morph folder not hidden.
I'm still super confused on why DAZ is saying it's missing a scene though. ><
Is There A Plan To Speed Up G8 (and future generations) Loading Times?onix said:
Richard Haseltine said:
Consider a simple example, a figure with big, round eyes. The morphs for cl;osing eyes are set up to work with the base shape of the eyes, something that chnages the shape or size will not combine well with that - there would probably be a gap with the closing morph at 100%, and there would probably be overlap at the edges if the morph was dialed to a value sufficient to close the eye fully in the centre 9because the rounding will increase the separation there more than at the edges). To make sure that users get the expected result when closing the eyes the creator will add an additional morph that can be applied when both their character and the closure morph are set, so the that eyelid is then properly down, and the ERC makes sure that that additional morph is applied when needed. The Dandelion character https://www.daz3d.com/dandelion-fae makes some marked chnages to the ehad shape, so there are a lot of extra morphs to make the basic expressions look right.
Yes I understand that this may be useful, but there is a better way to do it by adding extra morph which you turn on manually rather than automatically.
And also if default expressions don't work he can just provide his own list because it is quite possible that I will not even use basic expressions at all but use some other expression pack that is totally unaffected by those corrections. How anyone even can be aware that such corrections are taking place?
Even If it is required to do ERC this can be initiated with an extra controller which has to be turned on by the user or can be turned on from another morph.
rather than injecting itself into the basic expression controller author could just add an extra controller which turns on an extra correction morph if both character and Daz expression controller are turned on. this way the need to load all files is avoided because turning on dandelion character tells Daz that now it has to load all those correction morphs that are referenced by this character.
The main idea of this principle is that to implement any kind of correction vendor has to add his own controller which turns that correction on and nobody can inject my corrections into any other vendor content without asking the user to turn those corrections on in some way.
(I this situation they can be turned on by turning on the character slider which would also tell Daz to load all those corrective morphs)
This looks so obvious and logical that I always thought that it is how things work in the first place and could not understand why all morphs have to be processed
It was a big surprise that Daz even allows that kind of stuff.
quick q. lets say I dial spin a character made with the Girl, Bette, and Aiko and a couple other head morphs all characters with large eyes that require jcms to close correctly. under your system how do I now close the eyes?
My load time for the genesis figures could be 5 times as long as it is and I'm pretty sure this would still be slower. I only have to load once - having to dial everything specifically for every character expression every time I wanted to change it would add up astronomically
Is There A Plan To Speed Up G8 (and future generations) Loading Times?onix said:
Richard Haseltine said:
Consider a simple example, a figure with big, round eyes. The morphs for cl;osing eyes are set up to work with the base shape of the eyes, something that chnages the shape or size will not combine well with that - there would probably be a gap with the closing morph at 100%, and there would probably be overlap at the edges if the morph was dialed to a value sufficient to close the eye fully in the centre 9because the rounding will increase the separation there more than at the edges). To make sure that users get the expected result when closing the eyes the creator will add an additional morph that can be applied when both their character and the closure morph are set, so the that eyelid is then properly down, and the ERC makes sure that that additional morph is applied when needed. The Dandelion character https://www.daz3d.com/dandelion-fae makes some marked chnages to the ehad shape, so there are a lot of extra morphs to make the basic expressions look right.
Yes I understand that this may be useful, but there is a better way to do it by adding extra morph which you turn on manually rather than automatically.
Better for whom? Certainly not most users who would be trying to find the right corrective morphs, once they realised that was what was needed. Espeically if they were using expression presets and didn't know immediately which expression they should be correcting. This type of function is a long-standing, and expected, feature.
And also if default expressions don't work he can just provide his own list because it is quite possible that I will not even use basic expressions at all but use some other expression pack that is totally unaffected by those corrections. How anyone even can be aware that such corrections are taking place?
People are likely to have and use the expressions (and in fact, many expression packs use the base expressions). People will expect them to work, hence the inclusion of fixes. Adding a slew of fesh expressions for each character would not be a practical solution.
Even If it is required to do ERC this can be initiated with an extra controller which has to be turned on by the user or can be turned on from another morph.
rather than injecting itself into the basic expression controller author could just add an extra controller which turns on an extra correction morph if both character and Daz expression controller are turned on. this way the need to load all files is avoided because turning on dandelion character tells Daz that now it has to load all those correction morphs that are referenced by this character.
The main idea of this principle is that to implement any kind of correction vendor has to add his own controller which turns that correction on and nobody can inject my corrections into any other vendor content without asking the user to turn those corrections on in some way.
(I this situation they can be turned on by turning on the character slider which would also tell Daz to load all those corrective morphs)
This looks so obvious and logical that I always thought that it is how things work in the first place and could not understand why all morphs have to be processed
It was a big surprise that Daz even allows that kind of stuff.
But why would you want breakage to be the default behaviour? And how would an extra ERC controller help reduce load times?
You do seem to be labouring under a slight misapprehension, though - nothing is injected into the default expressions in this case; rather the corrective morph has two links, one to the default expression and one to the head shape, one of which will add its value and the other of which will multiply (so the net value is head shape strength * expression strength, ensuring the correct amount of adjustment is applied).
Can't install OBJ and mapsI have bought many of Polgyonal Miniatures stuff on other marketplaces, but i think it's ridiculous that Daz thought it was a good idea to put such a product on the store without even the bare minimum of packaging it as a figure/prop asset with a material preset. Not to mention they didnt even bother to rig it with transfer utility for you. It would have taken them five seconds to do that for you. Crazy.
Anyway, to answer your question: You can add the texture maps to their respective slots of the shader on the Surfaces tab.
By the looks of things, it has a Normal Map and a Base Color map. So just browse to where the files are located on your system and either drag-drop them into the Base Color and Normal Map slots on the shader or alternatively import them via the Surfaces tab.
imo, turn glossy roughness up high.
Is There A Plan To Speed Up G8 (and future generations) Loading Times?Richard Haseltine said:
Consider a simple example, a figure with big, round eyes. The morphs for cl;osing eyes are set up to work with the base shape of the eyes, something that chnages the shape or size will not combine well with that - there would probably be a gap with the closing morph at 100%, and there would probably be overlap at the edges if the morph was dialed to a value sufficient to close the eye fully in the centre 9because the rounding will increase the separation there more than at the edges). To make sure that users get the expected result when closing the eyes the creator will add an additional morph that can be applied when both their character and the closure morph are set, so the that eyelid is then properly down, and the ERC makes sure that that additional morph is applied when needed. The Dandelion character https://www.daz3d.com/dandelion-fae makes some marked chnages to the ehad shape, so there are a lot of extra morphs to make the basic expressions look right.
Yes I understand that this may be useful, but there is a better way to do it by adding extra morph which you turn on manually rather than automatically.
And also if default expressions don't work he can just provide his own list because it is quite possible that I will not even use basic expressions at all but use some other expression pack that is totally unaffected by those corrections. How anyone even can be aware that such corrections are taking place?
Even If it is required to do ERC this can be initiated with an extra controller which has to be turned on by the user or can be turned on from another morph.
rather than injecting itself into the basic expression controller author could just add an extra controller which turns on an extra correction morph if both character and Daz expression controller are turned on. this way the need to load all files is avoided because turning on dandelion character tells Daz that now it has to load all those correction morphs that are referenced by this character.
The main idea of this principle is that to implement any kind of correction vendor has to add his own controller which turns that correction on and nobody can inject my corrections into any other vendor content without asking the user to turn those corrections on in some way.
(I this situation they can be turned on by turning on the character slider which would also tell Daz to load all those corrective morphs)
This looks so obvious and logical that I always thought that it is how things work in the first place and could not understand why all morphs have to be processed
It was a big surprise that Daz even allows that kind of stuff.
Help with a morph pleaseWell, is the OBJ export using one or is it set to Custom? What happens if you export the morph OBJ as an object, does it come in at the same size as an import of the original prop's OBJ?
Help, my Brain is tricking me!!!I lost several of my own characters a few weeks back during a data transfer to a new SSD (not my fault), and I've been trying to recreate her ever since. But nothing is going right.
If I can't recreate her in 3D, I might go back to trying to recreate her in 2D.
Is There A Plan To Speed Up G8 (and future generations) Loading Times?onix said:
thenoobducky said:
Can you give an example of this? I would really like to see it.
Edit: Also I dont get the point of it, For example, anything in /data/Daz 3D/Genesis 8/Female/Morphs get loaded when you load genesis 8 female. Normal convention is morph for a product go to /data/Daz 3D/Genesis 8/Female/Morphs/Vendor/Product. So it would get automatically loaded already, placing things in /data/Daz 3D/Genesis 8/Female/Morphs/Daz 3D/Character would give no benefit and would not be treated any differently by Daz. The buggy JCM would easily be part of the vendor's file.
Ok lest look at the specific example with genesis 3 character "Dandelion"
this character provides 4 sliders for the user: dandelion body, ears and head then Dandelion overall slider which tuns all of those at once.
so far so good.
But if we now check show hidden properties we can see that
there are some strange files like
MCM-Dandelion-Contempt, MCM-Dandelion-Angry, and many more that are not accessible for user
If we look at what those files do we can see this
"formulas" : [
{
"output" : "Genesis3Female:#MCM-Dandelion-Angry?value",
"operations" : [
{ "op" : "push", "url" : "Genesis3Female:/data/DAZ%203D/Genesis%203/Female/Morphs/DAZ%203D/Expressions/eCTRLAngry.dsf#eCTRLAngry?value" },
{ "op" : "push", "val" : 1 },
{ "op" : "mult" }
]
},
{
"output" : "Genesis3Female:#MCM-Dandelion-Angry?value",
"stage" : "mult",
"operations" : [
{ "op" : "push", "url" : "Genesis3Female:/data/DAZ%203D/Genesis%203/Female/Morphs/MindVision-GDS/Dandelion/FHM-Dandelion.dsf#FHM-Dandelion?value" }
]
(Same can be seen on the parameter settings)
This formula injects extra logic that if you turn on the default Daz provided "angry" expression AND if you turn on Dandelion slider at the same time the Dandelion-Angry morphs will be activated
I have no clue why this is done, why the vendor of that character could not just provide a list of expressions for his character but decided to go this strange route of modifying default expressions.
Obviously, without loading all morph files it is impossible to know that someone is going to do that kind of stuff and there is no way for the user to know that this is even being done.
and this must be the main reason why Daz needs to process all files and establish all dependencies.
Consider a simple example, a figure with big, round eyes. The morphs for cl;osing eyes are set up to work with the base shape of the eyes, something that chnages the shape or size will not combine well with that - there would probably be a gap with the closing morph at 100%, and there would probably be overlap at the edges if the morph was dialed to a value sufficient to close the eye fully in the centre 9because the rounding will increase the separation there more than at the edges). To make sure that users get the expected result when closing the eyes the creator will add an additional morph that can be applied when both their character and the closure morph are set, so the that eyelid is then properly down, and the ERC makes sure that that additional morph is applied when needed. The Dandelion character https://www.daz3d.com/dandelion-fae makes some marked chnages to the ehad shape, so there are a lot of extra morphs to make the basic expressions look right.
Is There A Plan To Speed Up G8 (and future generations) Loading Times?thenoobducky said:
Can you give an example of this? I would really like to see it.
Edit: Also I dont get the point of it, For example, anything in /data/Daz 3D/Genesis 8/Female/Morphs get loaded when you load genesis 8 female. Normal convention is morph for a product go to /data/Daz 3D/Genesis 8/Female/Morphs/Vendor/Product. So it would get automatically loaded already, placing things in /data/Daz 3D/Genesis 8/Female/Morphs/Daz 3D/Character would give no benefit and would not be treated any differently by Daz. The buggy JCM would easily be part of the vendor's file.
Ok lest look at the specific example with genesis 3 character "Dandelion"
this character provides 4 sliders for the user: dandelion body, ears and head then Dandelion overall slider which tuns all of those at once.
so far so good.
But if we now check show hidden properties we can see that
there are some strange files like
MCM-Dandelion-Contempt, MCM-Dandelion-Angry, and many more that are not accessible for user
If we look at what those files do we can see this
"formulas" : [
{
"output" : "Genesis3Female:#MCM-Dandelion-Angry?value",
"operations" : [
{ "op" : "push", "url" : "Genesis3Female:/data/DAZ%203D/Genesis%203/Female/Morphs/DAZ%203D/Expressions/eCTRLAngry.dsf#eCTRLAngry?value" },
{ "op" : "push", "val" : 1 },
{ "op" : "mult" }
]
},
{
"output" : "Genesis3Female:#MCM-Dandelion-Angry?value",
"stage" : "mult",
"operations" : [
{ "op" : "push", "url" : "Genesis3Female:/data/DAZ%203D/Genesis%203/Female/Morphs/MindVision-GDS/Dandelion/FHM-Dandelion.dsf#FHM-Dandelion?value" }
]
(Same can be seen on the parameter settings)
This formula injects extra logic that if you turn on the default Daz provided "angry" expression AND if you turn on Dandelion slider at the same time the Dandelion-Angry morphs will be activated
I have no clue why this is done, why the vendor of that character could not just provide a list of expressions for his character but decided to go this strange route of modifying default expressions.
Obviously, without loading all morph files it is impossible to know that someone is going to do that kind of stuff and there is no way for the user to know that this is even being done.
and this must be the main reason why Daz needs to process all files and establish all dependencies.
Help, my Brain is tricking me!!!Yes, happens to me too lol. But IRL, some people have bigger heads than others. Sometimes I’ll notice on TV or in a movie that one actor’s head is a lot bigger than the others. I notice on pictures of my mother that she had a disproportionately large head lol.
Try hiding the hair. Sometimes the hair can make the head look too big so you make it smaller only to discover that the head was originally the right size. I’m not sure if it’s the mixture of morphs I sometimes concoct but often my G8 characters seem to have a huge forehead but I like the lower face morph so I choose a hair with bangs or leave bald to paint hair in Photoshop later.
Is There A Plan To Speed Up G8 (and future generations) Loading Times?thenoobducky said:
I interpret Richard's comment as saying reading the file from disk is not the bottleneck, which I think is correct, it is converting from the text file to objects that Daz can use that is slow. Put it another way, reading file not slow, scanning the content of the file to figure out what to create slow. Daz would need to parse all the formulas to figure out what the figure would finally look like. Because there is no mechanism for Daz to figure out if a formula is active or not (my limited understanding is a formula can either by an input like a dial or applying the dial to something so daz need to figure out the value of all dials and apply all the formulas even if most inputs by default are zero). This is also the reason for morph corrupting the default figure. Now I think about it, this part what is what is causing the load time to be slow cannot be skipped unless there is a way to tell Daz don't load this morph (currently done by hiding it from daz). Why this is not trivial to multithread is addressed below.
If parsing the file would be a bottleneck then multithreading would be an obvious solution as I understand bottleneck is the function that populates morph dependencies with appropriate formulas
No what I mean is if I have a figure loaded and then I unhide a character preset or morph set, I can't use it unless I reload the figure because there is no other way to get new shape dials and pose dials to appear.
This is not a problem because Daz should read all names to get a list of sliders and built all that property tree, It should just not go any deeper and don't loom at their dependencies until something from that tree is activated.
The senario I want to be addressed is this: I have a figure loaded. I install zev0's Shape Shift, how do I use it without reloading.
Getting a way to delay load morph / reload morph contained in a base directory would really improve
This would be pretty easy to do if morphs are straightforward, but unfortunately, the Daz logic is too perverted here. which I will explain later
I agree its possible to multithread, just the implementation will be non trivial. The issue to consider is: thread 1 load morph A which reference morph B, at the same time thread 2 is loading morph B. How can thread 1 figure out morph B has been loaded or not. Its solvable but care must be take to ensure the solution dont accidentally end up being single threaded. Another issue: thread 1 create morpha A with name X, thread 2 create morph B also with name Y, how does Daz ensure the names are unique because duplicate formula is an issue that need to be detected.
If you look at the morph properties it is not that hard, after all, you can see that every property parameter contains Sub-components and controllers list which has to be populated, (I think populating that list takes most of the time.)
I can't see any problems with multithreading because every entry in that list is independent. You load a morph and then add the appropriate formula to the appropriate list the order of how things will be added to the list does not matter.
What do you mean correction morph, I guess you are talking about erc formulas? Can you give some concrete example? I find all the talk so far about high level concept a bit confusing and too much guess work. I think what is slow is loading formulas, but a lot of formulas are actually morphs and expressions. For example, Victoria 8 have something around 60-70 morph file, each file contain around 2 formulas. Whereas eJCMSilly_HD_div2.dsf from Genesis 8 Female Expression pack can have 100+ formulas.
Now a formula looks like this:
{ "output" : "Genesis8Female:/data/DAZ%203D/Genesis%208/Female/Morphs/DAZ%203D/Base%20Pose%20Head/eCTRLNostrilsFlex.dsf#eCTRLNostrilsFlex?value", "operations" : [ { "op" : "push", "url" : "Genesis8Female:#Z%20FO%20Angry?value" }, { "op" : "push", "val" : 1 }, { "op" : "mult" } ] },As you can see, Daz know where to find the formula it references. So that is no a problem. One problem would be in a multi thread safe way to figout out if the output it refernces already exist or is being created by another thread or it need to create it. Again now I have think about this a bit more, the issue is Daz dont know if this formula will result in no change at all or cause some morph changes until Daz parsed the formula and applied it, which is the slow process we are trying to avoid here. There is no mechanism to tell Daz to skip formula in this folder until I tell you to load it functionality. I think something like this for advanced user would be useful.
Another problem, for example I like to use Zev0's shape shift which contains lots of formulas, but I use it often when creating a character so I would like Daz to always load it. How would Daz know which morph need to be loaded? Currently the only way is to selectively add base folders, this is almost workable with manual curation of installed files, or program to automate it, maybe Daz can come up with a better approach (maybe by reworking the way files are installed).
In short we need a better way to optionally tell Daz skip loading certain folder until it is needed by some file.
I can't comment on that because I need to see a complete picture, I will give an example in the next post
Is There A Plan To Speed Up G8 (and future generations) Loading Times?onix said:
I was talking about different issues here. Building your morph on top of another morphs is normal.
Let's say you want to create a smile expression morph for your character which will reference victoria 8 smile.
normally you would just create an expression folder for your character and populate it with your custom expression morphs that refer to morphs of other vendors.
but some perverted vendors rather do this:
They insert extra logic into the genesis 8 smile expression morph which tells it that if character X morph is activated activate Smile correction morph for character X. You will not even be aware that you got a custom expression morph along with that character.
So if you will ever install this character it will be sucking your CPU power forever because every time you use smile morph that formula for character X (which you maybe never even used) will be executed.
And how many vendors may have JCMs that are constantly hooked to character joints and every time you change your pose Daz has to process hundreds of those parasitic formulas that do nothing else but just check if character X is loaded?
What if the vendor screws up and makes that his JCM gets activated all the time not just when their character is loaded? Now your figure will be screwed up forever because you have no way to even identify buggy JCM
Can you give an example of this? I would really like to see it.
Edit: Also I dont get the point of it, For example, anything in /data/Daz 3D/Genesis 8/Female/Morphs get loaded when you load genesis 8 female. Normal convention is morph for a product go to /data/Daz 3D/Genesis 8/Female/Morphs/Vendor/Product. So it would get automatically loaded already, placing things in /data/Daz 3D/Genesis 8/Female/Morphs/Daz 3D/Character would give no benefit and would not be treated any differently by Daz. The buggy JCM would easily be part of the vendor's file.
Is There A Plan To Speed Up G8 (and future generations) Loading Times?onix said:
I think Daz already have those infomation stored with the formula, but the question is what would be the trade off. A system that delay load everything would have less consistant performance when applying a pose or expression as daz have to find missing morphs. It could be slower for people with fewer morphs installed as it makes harder to cache things, resulting in more file I/O that would be slower. Should Daz scan all morphs files to create all the sliders for shapes and poses, because this is very useful for novice user to find things they need. But scanning all those files and creating slider might be half of the required work already and might just as well go ahead and finish creating the formulas so it will just work.
Richard explained that all this scanning task is not really that time-consuming to care about and it can be multithreaded easily. also it can be safely deferred and just continued after your scene is already loaded.
I interpret Richard's comment as saying reading the file from disk is not the bottleneck, which I think is correct, it is converting from the text file to objects that Daz can use that is slow. Put it another way, reading file not slow, scanning the content of the file to figure out what to create slow. Daz would need to parse all the formulas to figure out what the figure would finally look like. Because there is no mechanism for Daz to figure out if a formula is active or not (my limited understanding is a formula can either by an input like a dial or applying the dial to something so daz need to figure out the value of all dials and apply all the formulas even if most inputs by default are zero). This is also the reason for morph corrupting the default figure. Now I think about it, this part what is what is causing the load time to be slow cannot be skipped unless there is a way to tell Daz don't load this morph (currently done by hiding it from daz). Why this is not trivial to multithread is addressed below.
Hiding stuff from Daz wont fully fix the issue because then you can't use an expression or morph that is not loaded until you reload the character / scene. Some sort of load formulas used by this character / expression / shapes function would be super useful.
Of course, you cant use what you hide, but the reason to hide things I precisely because they are not required in that scene
No what I mean is if I have a figure loaded and then I unhide a character preset or morph set, I can't use it unless I reload the figure because there is no other way to get new shape dials and pose dials to appear.
The senario I want to be addressed is this: I have a figure loaded. I install zev0's Shape Shift, how do I use it without reloading.
Getting a way to delay load morph / reload morph contained in a base directory would really improv
With regard to multithreading I can see how to figure out if a formula referenced in another formula already exist or being made in a thread safe way being a difficult problem to tackle and have potential to accidentally make everything single threaded.
If you think more actually there is no reason why multithreading cannot be implemented even now.
My guess in how Daz works is that first, it loads a full list of morphs then it iterates through every one of those morphs and populates controllers and subcomponents lists. so every correction morph that has controllers has to scan at least half of the full list every time to find where it will inject references to itself.
This process can be easily multithreaded as you can process multiple morphs at the same time
I agree its possible to multithread, just the implementation will be non trivial. The issue to consider is: thread 1 load morph A which reference morph B, at the same time thread 2 is loading morph B. How can thread 1 figure out morph B has been loaded or not. Its solvable but care must be take to ensure the solution dont accidentally end up being single threaded. Another issue: thread 1 create morpha A with name X, thread 2 create morph B also with name Y, how does Daz ensure the names are unique because duplicate formula is an issue that need to be detected.
In short, any way to solve a complex problem will have advantages and disadvantages. I would prefer things to work correctly over being fast, and beginner friendly over complicated to use but faster for advanced user. But there are definitly still rooms for improvement. For example some sort of rescan a selected base directory to add newly installed morphs functionality would be useful.
In my understanding, the main problem here is with correction morphs as this functionality srews up everything and possibly can be the reason why loading times are so long in the first place (unless Daz actually spends most of the time allocating memory for formulas and inserting them into the table)
Correction morphs are the reason why you can't know in advance what files you need to load because any of those new files may decide to hook up on something random in your existing system. And if you are very paranoid about not missing any of those correction morphs you have to rescan everything every time you load a new file as you probably can not even know if some of the correction morphs wanted to reference your new file and did not find it at that time.
What do you mean correction morph, I guess you are talking about erc formulas? Can you give some concrete example? I find all the talk so far about high level concept a bit confusing and too much guess work. I think what is slow is loading formulas, but a lot of formulas are actually morphs and expressions. For example, Victoria 8 have something around 60-70 morph file, each file contain around 2 formulas. Whereas eJCMSilly_HD_div2.dsf from Genesis 8 Female Expression pack can have 100+ formulas.
Now a formula looks like this:
{ "output" : "Genesis8Female:/data/DAZ%203D/Genesis%208/Female/Morphs/DAZ%203D/Base%20Pose%20Head/eCTRLNostrilsFlex.dsf#eCTRLNostrilsFlex?value", "operations" : [ { "op" : "push", "url" : "Genesis8Female:#Z%20FO%20Angry?value" }, { "op" : "push", "val" : 1 }, { "op" : "mult" } ] },As you can see, Daz know where to find the formula it references. So that is no a problem. One problem would be in a multi thread safe way to figout out if the output it refernces already exist or is being created by another thread or it need to create it. Again now I have think about this a bit more, the issue is Daz dont know if this formula will result in no change at all or cause some morph changes until Daz parsed the formula and applied it, which is the slow process we are trying to avoid here. There is no mechanism to tell Daz to skip formula in this folder until I tell you to load it functionality. I think something like this for advanced user would be useful.
Another problem, for example I like to use Zev0's shape shift which contains lots of formulas, but I use it often when creating a character so I would like Daz to always load it. How would Daz know which morph need to be loaded? Currently the only way is to selectively add base folders, this is almost workable with manual curation of installed files, or program to automate it, maybe Daz can come up with a better approach (maybe by reworking the way files are installed).
In short we need a better way to optionally tell Daz skip loading certain folder until it is needed by some file.
The Newest Evolution Is Here: The Daz Season Pass!Well I bit the bullet. When I started, in the middle of G3M/G3F, and was not a PC+ member, my first purchase was the Lee 7 Pro Bundle for the full cost of $134.95. Since then, having joined PC+, I have bought most Pro Bundles, except the Vampires/Horror ones and Centaurs, except Centaur 7M. Never used them, wasted my money. Horror characters just look plastic to me.
I am hoping that with the addition of the HD Add-on that means the characters will be realistic, not pretty, pretty, fairies, pixies, goulish babies or animals. I would love to see more ethnic/age diversity to expand my morph library. But pretty white girls I don't need, I just removed almost 200 G8Fs from my DS library because of slowing down load times.I would prefer not to have that 'flair' as I see it as an advertising gimic and tells others what I have purchased. I consider that personal information. (As I write that I have! )
Render contests, well never participated in them. Of the renders I have posted in the forums, I think I have had maybe three that were liked, most are ignored or I am told how to improve and one I got serious kickback on. So I don't post as many as I might. Tutorial, might help me, but when do I have time? Scads to work through still.
But Daz, I really would love it if you would instead invest in more Quality Control of products before release. I am tired of actors, hair or clothes with no or partial metadata, or a character that was advertised as a 'young adult' who is three feet tall and squashed up and after a year and a half, no fix yet.
Or fix my dates in DS to reflect the actual date a product was released and when I bought it and installed it, like it was before you 'fixed' the store in November. My sorting of products is a mess now in Smart Content.And yeah, I am fixing my thumbnails as I buy. And I have two systems, so I transfer my thumbnails with Google Docs.
For those who are not buying into this, cool. No judgement, I was on the fence too. I just decided to take a risk. My tax return came in, I have some cash to loose. Daz don't make me regret this please.
Is There A Plan To Speed Up G8 (and future generations) Loading Times?PerttiA said:
It's not only JCM's, but also morphs and characters from some other PA, as one cannot copy the work of someone else to one's own product.
If you make a character that is built on top of Victoria 8, then the dial for your character should activate the Victoria 8 dial as well. The same with products like "Growing Up" or even the DAZ Head and Body Morphs.
I was talking about different issues here. Building your morph on top of another morphs is normal.
Let's say you want to create a smile expression morph for your character which will reference victoria 8 smile.
normally you would just create an expression folder for your character and populate it with your custom expression morphs that refer to morphs of other vendors.
but some perverted vendors rather do this:
They insert extra logic into the genesis 8 smile expression morph which tells it that if character X morph is activated activate Smile correction morph for character X. You will not even be aware that you got a custom expression morph along with that character.
So if you will ever install this character it will be sucking your CPU power forever because every time you use smile morph that formula for character X (which you maybe never even used) will be executed.
And how many vendors may have JCMs that are constantly hooked to character joints and every time you change your pose Daz has to process hundreds of those parasitic formulas that do nothing else but just check if character X is loaded?
What if the vendor screws up and makes that his JCM gets activated all the time not just when their character is loaded? Now your figure will be screwed up forever because you have no way to even identify buggy JCM
How to export custom morphHey guys! I have a question , I created a custom morph that is saved in daz as character preset , my question is how can i export this new character along with textures so I can easily import it into daz on other computers? Thank you!
Is There A Plan To Speed Up G8 (and future generations) Loading Times?thenoobducky said:
I can see this be very useful for things like clothing fixers or conversion tool.
Those same things still can be done but rather than doing them secretly, vendors should be required to ask users if they want those fixers to be turned on.
The current situation is very strange to say mildly when things are done backward for an unknown reason.
I think Daz already have those infomation stored with the formula, but the question is what would be the trade off. A system that delay load everything would have less consistant performance when applying a pose or expression as daz have to find missing morphs. It could be slower for people with fewer morphs installed as it makes harder to cache things, resulting in more file I/O that would be slower. Should Daz scan all morphs files to create all the sliders for shapes and poses, because this is very useful for novice user to find things they need. But scanning all those files and creating slider might be half of the required work already and might just as well go ahead and finish creating the formulas so it will just work.
Richard explained that all this scanning task is not really that time-consuming to care about and it can be multithreaded easily. also it can be safely deferred and just continued after your scene is already loaded.
Hiding stuff from Daz wont fully fix the issue because then you can't use an expression or morph that is not loaded until you reload the character / scene. Some sort of load formulas used by this character / expression / shapes function would be super useful.
Of course, you cant use what you hide, but the reason to hide things I precisely because they are not required in that scene
With regard to multithreading I can see how to figure out if a formula referenced in another formula already exist or being made in a thread safe way being a difficult problem to tackle and have potential to accidentally make everything single threaded.
If you think more actually there is no reason why multithreading cannot be implemented even now.
My guess in how Daz works is that first, it loads a full list of morphs then it iterates through every one of those morphs and populates controllers and subcomponents lists. so every correction morph that has controllers has to scan at least half of the full list every time to find where it will inject references to itself.
This process can be easily multithreaded as you can process multiple morphs at the same time
In short, any way to solve a complex problem will have advantages and disadvantages. I would prefer things to work correctly over being fast, and beginner friendly over complicated to use but faster for advanced user. But there are definitly still rooms for improvement. For example some sort of rescan a selected base directory to add newly installed morphs functionality would be useful.
In my understanding, the main problem here is with correction morphs as this functionality srews up everything and possibly can be the reason why loading times are so long in the first place (unless Daz actually spends most of the time allocating memory for formulas and inserting them into the table)
Correction morphs are the reason why you can't know in advance what files you need to load because any of those new files may decide to hook up on something random in your existing system. And if you are very paranoid about not missing any of those correction morphs you have to rescan everything every time you load a new file as you probably can not even know if some of the correction morphs wanted to reference your new file and did not find it at that time.






