[Closed] Extract Deltas For 3ds Max?
Hello,
I’ve been using Maya recently along with the Extract Deltas plug-in from Brave Rabbit which allows you to extract corrective meshes to be loaded into a blendShape node underneath a skinCluster and was wondering if there was something similar to it for 3ds Max? I know Skin Morph allows you to model on top of the Skin modifier but after using Extract Deltas, I would prefer to extract a mesh and load it into a Morpher modifier below Skin.
Thanks,
-Harry
I looked at that extractDeltas video and it seems to be the equivalent to Kees Rijnen’s MorphX2, which used to be a free/shareware/donationware/whatever plugin at (what was his site) www.Lumonix.com
Unfortunately Lumonix is no more and you get redirected to his ShaderFX site.
With it you could model morph corrections on a duplicate of the animated joint, and then select it as a morph, pretty much like extractDeltas.
There’s also Grant Adam’s surfaceMorph
http://rpmanager.com/plugins/SurfaceMorph.htm
but I haven’t used it so I don’t know if it allows the same workflow.
TC
Hello,
Thanks for the reply, I had heard of MorphX2 but not Surface Morph, it looks interesting but what I’m really after is a method to extract the difference between two meshes where one is skinned and the other is the corrected, modelled mesh.
I had a go at creating something myself based on the assumption that the positions of the resultant mesh’s vertices could be given as
theCorrectedVertPos[i] – theSkinVertPos[i] + theInitialVertPos[i]
where i loops over the number of vertices on the mesh and theInitialVertPos is the mesh in its original modelled state before rigging.
This turns out not to work for what I want, however it does work for generating fixer meshes for morph targets (correcting the appearance of, say, LCornerMouthUp and LCornerMouthOut).
It’s a basic script, I didn’t spend long on it so I didn’t include some necessary checks like the three meshes need to have equal vertex counts:
(
global correctiveMorph
try (destroyDialog correctiveMorph) catch()
local theInitialMesh, theSkinMesh, theFixerMesh, theInitialVertPos = #(), theSkinVertPos = #(), theFixerVertPos = #()
rollout correctiveMorph "Corrective Morph"
(
pickButton initialPBtn "Select Initial Mesh..." autoDisplay:true align:#center width:156
pickButton skinPBtn "Select Posed Mesh..." autoDisplay:true align:#center width:156
pickButton fixerPBtn "Select Fixer Mesh..." autoDisplay:true align:#center width:156
button createBtn "Create Fixer Morph" align:#center width:156 enabled:false
function PBtnFn =
(
if initialPBtn.object != undefined and skinPBtn.object != undefined and fixerPBtn.object != undefined then
createBtn.enabled = true
else
createBtn.enabled = false
)
on initialPBtn picked obj do
(
theInitialMesh = snapshotAsMesh obj
theInitialVertPos = for i in 1 to (getNumVerts theInitialMesh) collect (getVert theInitialMesh i)
PBtnFn()
)
on skinPBtn picked obj do
(
theSkinMesh = snapshotAsMesh obj
theSkinVertPos = for i in 1 to (getNumVerts theSkinMesh) collect (getVert theSkinMesh i)
PBtnFn()
)
on fixerPBtn picked obj do
(
theFixerMesh = snapshotAsMesh obj
theFixerVertPos = for i in 1 to (getNumVerts theFixerMesh) collect (getVert theFixerMesh i)
PBtnFn()
)
on initialPBtn rightClick do
(
initialPBtn.object = undefined
PBtnFn()
)
on skinPBtn rightClick do
(
skinPBtn.object = undefined
PBtnFn()
)
on fixerPBtn rightClick do
(
fixerPBtn.object = undefined
PBtnFn()
)
on createBtn pressed do
(
theObj = initialPBtn.object
theFixerTarget = convertToMesh (copy theObj)
for i in 1 to (getNumVerts theFixerTarget) do
setVert theFixerTarget i (theFixerVertPos[i] - theSkinVertPos[i] + theInitialVertPos[i])
)
)
createDialog correctiveMorph width:165
)
-Harry