Extremely bad performance with DAZ characters
Hey everyone! I’m here to ask for your help because I’ve spent the last few days trying to solve this problem on my own, but I haven’t had any luck. I’m not sure if there’s even a solution, but I thought it was worth a shot
A few weeks ago, I started learning Blender. I’ve been a DAZ artist for many years and wanted to try something new. Since I have a lot of characters, I began importing some of them into Blender (using HD Export - the characters are SubD 3 with a few HD morphs, Genesis 8 or Genesis 8.1). Each character usually comes with hair, brows, eyelashes, a shirt, pants, footwear, and maybe some accessories like a neck piece. I always import the characters using Diffeomorphic. I’m using Blender version 4.2.2 and Diffeomorphic version 4.2.1
The problem is that no matter whether everything on the character or the character itself is in Blender with multires set to 0 or 3, they’re all extremely laggy. I did some renders (where I also built an environment), and I never run out of VRAM, mostly around 5-6GB usage. But posing the character or trying to create a simple animation (like blinking) results in constant lag, and the timeline plays at a max of 4fps
However, I noticed that if I remove the hair, clothing, and brows in Blender, everything works just fine. So, I assume the problem is with those items, not the character itself. I’m specifically saying 'removing them' because hiding those items in the viewport doesn’t solve anything. Turning off multires on those items or using the Simplify option with the lowest values also doesn’t help
So, has anyone else encountered the same problem as me, or is there any solution I can try to fix this? I feel like I’ve tried everything, but nothing seems to work
Also, I’m not denying that the source of the problem might be hardware-related since I'm working with an RTX 3060 12GB. I'm just not sure if my hardware could actually influence things like posing. But yeah, I thought it was important to mention that
If there’s anyone who can at least try to help, I’d really appreciate it!
Thank you! :)
Edit: Yes, I'm facing the same problem with both non-HD and HD characters, there's not much of a difference
Comments
Blender in general has terrible viewport performance, I would not expect to be able to do any kind of viewport animation in real time unless you animate a box or something, it might simply be this you see, performance in viewport is silly slow most of the time as soon as you have any kind of complex geometry (like DAZ hair for example).
I don't think hardware will help, I tried with a 3090 and still slow, even with something latest and greatest you will not see much improvement I think.
I gave up, I do any animation in iClone and export it to Blender to do the rendering.
In general it certainly depends on the figure and assets you load of course. It is also true that some daz assets are extremely heavy so to be avoided for animation. However, here I have a very basic hardware with a old GTX 1060, and with "normal" figures I don't experience much lag in the viewport. Using the Victoria 8 pro bundle I loaded Victoria 8 with Voss hair and the Defender armor. It runs at 30 fps both in solid mode and material preview.
I just use easy import with the preset for G8 so everything is included from jcms to correctives to morphs. Of course with simplify enabled, I woldn't dare anything without.
p.s. For heavy items, using the hide icon in the outliner doesn't affect the viewport performances. You have to use the disable icon instead, which will hide and disable the item so viewport performances are affected. There's no need to delete the item from the scene, just disable it.
p.p.s. shaders. Also shaders and textures can slow down the viewport, so using solid mode for animation is generally faster, especially for complex scenes.
Thank you for your response. I’ve already found the reason and managed to fix the issue
Actually, I was really surprised to find out it’s the brows. The character with the worst performance had brows from the 'Echo HD for Genesis 8.1 Female' model, and they have over 480,000 faces. When I checked about 10 other brows from my assets, they were all somewhere between 40,000 and 80,000 faces. I have no idea what went wrong when someone created this model, but that’s just insane
After using 'unsubdivide' on the brows, the face count dropped from 480,000 to 120,000, and now there's no more lag. A lot of my characters are based on Mousso models (the creator of Echo HD), and it seems like the high face count issue is common with many of their brows (at least for me)
However, problem solved! Thanks :)
Honestly, I don't really have any performance issues with Blender unless I'm using characters from DAZ. But my problem is solved! If you're interested, check out the reasons and solution above :)
Yes, as noted above some daz assets are very heavy and don't fit animation, so we should always check what we're using and don't just import everything blind. However, it turns out there's issues with the daz rigidity, which greatly affects the animation speed in blender. Now reported to Thomas.
https://bitbucket.org/Diffeomorphic/import_daz/issues/2238/
Why are you not using a decimated proxy while working in the viewport?
Interesting .... In this case, I also believe Rigidity Group is the culprit ~~
I removed the Rigidity Groups before exporting to DBZ file. With 50 FPS preset, live FPS could reach 27 with a bare figure.
Yes proxies can help when dealing with heavy meshes, diffeomorphic also has tools to help with that. Personally I tend to avoid heavy meshes in the first place.
https://bitbucket.org/Diffeomorphic/import_daz/wiki/Advanced/Low-poly
update. finalize.
We can get rid of the rigidity by finalizing the scene with the tools in the finishing panel. So finalizing the scene before animation is mandatory. To get the finalized scene working we also have to restart blender.
Be sure to backup the scene before finalizing, since it not possible to add morphs after.
steps to finalize and get rid of the rigidity:
p.s. The "final optimizations" option in easy import does the same, and it works without restarting blender. Unfortunately in this case we can't backup the scene before finalizing.
Actually, I’ve got one more question. It feels like a bug to me because I know it's happening to other creators too, but...
If you import a character into Blender and use something from the morphs, like Eyes Blink, and set a keyframe, the FPS drops. It’s not that bad, but it’s definitely weird
Am I doing something wrong, or is this just how it is? Thanks
Of course some drop is expected in animation as blender has to compute the dependency graph for each frame, but here with my basic hardware it runs pretty smooth. However I suppose we have to set some common ground to do comparisons, otherwise it may obviously depend on the used figure. With the Victoria 8 defender above everything is fine.
Of course the more morphs you load the more the dependency graph is busy. If you look at the console when loading a figure you can tell how many morphs are loaded, the full V8 figure takes about 250 morphs. Other figures especially G9 may take much more. Plus if you use custom morphs packages.
steps for V8 defender, with simplify:
p.s. Apart the dep graph, animation also has to compute shaders and shadows for each frame, using solid mode with matcap avoids that. That's what solid mode is for in blender, so you can use solid mode for animation with a simplified preview, then eevee for rendering. Or cycles for phorealistic images.
p.p.s. In general in blender we can expect eevee to take some seconds to render a scene, then cyles to take some minutes. Of course it depends on the scene and the hardware but these are the common expectations. Eevee is designed for animation, it is not a game engine so not tailored for real time rendering, and personally I'm grateful for that. In game engines as Unreal there's many limitations on materials and rigging that blender doesn't have.
update. normal maps in eevee. This is a known issue, still bugging blender 4.2, and not going to be fixed by the blender team. Eevee is slow computing normal maps, so it is better to use bump maps instead when possible. In the link below you also find two addons, to toggle normal maps, or to replace the standard normal maps with a much faster custom group.
With the defender figure in material preview I go from 7 fps with normal maps to 30 fps with bump maps. The solid mode works fine and always goes 30 fps.
https://projects.blender.org/blender/blender/issues/64458
Reported to Thomas, to implement a toggle for normal maps directly in diffeomorphic.
https://bitbucket.org/Diffeomorphic/import_daz/issues/2244/
I'm also attaching a material preset to remove the normal maps in daz studio from the uber shader before exporting. That you can use when the figure provides both normal maps and bump maps, so to only keep the bump maps in blender. Of course backup the scene first.
For me, blender viewport was always way more responsive than daz studio, one of the reasons I wanted to move over in the first place. Yeah, as the great Padone said, solid view is pretty key in working with heavy environments/items. Only time I ever use any other viewport mode is then I am building an asset for the first time, and need to make sure textures are laying properly. When I am populating big ass scenes with stuff I already built, it's solid view all the way.
update. rigidity.
The rigidity performances have been fixed, now rigidity doesn't bog the animation anymore. It is still a good practice to finalize the figure once we're done and ready for animation. The transfer time has also been improved about 3x faster, that means it's faster to load figures with rigidity outfits.
All thanks to Thomas for the good job here.
https://bitbucket.org/Diffeomorphic/import_daz/downloads/
I hate to resurrect an old post but I just wanted to caution anyone when using the 'finalize' feature. I was very excited to try it out and improve Blender's viewport performance. Then I tried to add a piece of clothing and merge rigs, and it didn't happen. No go. Once you finalize a character, that is it, no changes. So we have to weigh the performance gains versus the loss of flexibility in adding any additional items.
Yes finalize is to be done as a last step, the intended workflow is to finalize for animation after we have the figure ready. Then we keep a backup before finalize to eventually make changes. What finalize does is to strip the figure of all the extra data needed by the diffeomorphic operators, morphs materials rigging etc., which may be relevant in size and slow down the animation depending on the features you use.
Yes subd and multires are already disabled in the viewport by simplify. Then eevee is fast but it's not designed to be real-time so better use the solid mode for animation.