I devised a way to extract a morph from any start and end states of the skin mesh vertices. The main reason for creating this is to have an easy way to export the rigging based (i.e. bone weights based) breast rotations as morphs, so that I can properly cancel them out or take them into account in the breast morphs that I'm working on in DAZ/Blender. However this might be useful for other people as well, so I made it a full fledged plugin. The demo shows a basic morph merging example.
Contact me if you would like to have a Blender script that can load the exported raw deltas as a blend shape. This is only for creators who actually work on morphs in Blender and have use for this plugin, I don't want to just hand out the script to everyone since most people don't even use Blender. Cheers!
Morph Extractor works by storing start positions of the skin mesh vertices, changing the positions, and then saving the difference in a morph file. Any method of changing the vertex positions works: existing morphs, joint positions and rotations, collision, soft physics... Smooth passes and tessellation probably have no effect since the plugin reads vertex positions from a GPU buffer that contains data prior to smoothing.
It can also export the raw deltas to JSON e.g. for inspection of the exact values per skin vertex, or for use in other software like Blender (importing to Blender requires additional scripting).
Create morphs that are not possible just by merging existing morphs, e.g. based on collision or animation
An alternative way to merge morphs
Visual inspection of a morph's deltas
Limit the effect of the morph using a tolerance value
1. Set Start Vertex Positions must be clicked before you can export anything. This will be also when the plugin will start drawing the deltas relative to the start positions. You can undo this with Unset Start Vertex Positions.
Tolerance sets a lower limit on the magnitude of deltas that it will include in the morph. Basically, lower number actually means higher tolerance (it "tolerates" smaller deltas).
Save As Pose Morph sets the "isPoseControl" flag to true in the morph .vmi file, which tells VaM to categorize the morph as a pose morph.
Morph Name is at the same time the actual name and the display name of the morph, and the filename as well (but the filename can be appended with a generated id to prevent overwriting, similar to Morph Merger)
Category is at the same time the Region and the Group of the morph (you might be familiar with these terms from Morph Merger)
The morph export settings sets Category to your creator name by default. "/" characters denote subfolders for the purpose of saving the morph file when Save Morph To Category Subfolder is checked.
The rest should be pretty self explanatory.
Make sure to not have any animation, auto behaviors/expressions, forces, jittering due to constant collision etc. that could cause unwanted deltas to be recorded.
The tolerance setting will help prevent detecting very small changes in vertex positions. Increase the alpha slider value to more easily spot deltas outside of the intended region of your morph.
In some cases you may need to refresh custom morphs manually to properly reset the state of the mesh. I'm not yet sure why the method I use to programmatically refresh custom morphs doesn't work as expected every time.
If you're adjusting some morphs to extract a new shape from, it doesn't save the exact deltas that are actually stored on the morphs that you're adjusting. It's not exact in that way like morph merger or MorphMAS which actually combine the deltas themselves.
-everlaster
Pan-da!
2024-12-10 21:59:43 +0000 UTCeverlaster
2024-12-10 21:58:07 +0000 UTCPan-da!
2024-12-10 21:48:33 +0000 UTCPan-da!
2024-12-10 21:47:22 +0000 UTC