We have too many assets to re-create them in 2013 or later.  We have to accept 
assets as-is.

We have a number of clothing pieces which were weighted to deformers in the 
character rig, and some of those deformers have been since removed leaving 
invalid entries in the envelope.  Envelopes.Deformers throws an error when used 
on these envelopes, so I wrote a tool which uses Envelope.GetDeformerWeights() 
to detect and repair the envelope by replacing the envelope with a new one 
using the remaining valid deformers.  The end result is a new envelope with no 
prior history.  These new envelopes work just like any other envelope in 7.5, 
even after being reloaded and worked over further.

The problem is these envelopes do not respond in 2013.  Softimage 2013 SP1 will 
load them, but the envelope will not find it's deformers even when present in 
the scene.  It's as if the geometry never had an envelope in the first place.  
To make matters worse, Envelopes.Deformers is inaccessible and the workaround 
of using Envelope.GetDeformerWeights() throws and error as well.  I have not 
found a way to extract the list of deformers from the envelope.


Matt





From: [email protected] 
[mailto:[email protected]] On Behalf Of Jeremie Passerin
Sent: Tuesday, December 18, 2012 10:55 AM
To: [email protected]
Subject: Re: how to determine which deformers an envelope operator is looking 
for

Hey Matt,

Did you try to build this setup in 2013 or are you just testing with rigs 
created in 7.5 and loaded in 2013.
Not ideal but maybe you can store the deformers name at some point in a 
userdatablob or or property during the rig creation.

I'm wondering if envelopeOp.Deformers() is not accessible when you re-import 
you rigs, or if it's not accessible right from the beginning even after you 
created the envelope the first time.


my 2c
Jeremie
On 18 December 2012 10:31, Matt Lind 
<[email protected]<mailto:[email protected]>> wrote:
Perhaps you didn't read my post.  Envelopes.Deformers is not accessible.


Matt



From: 
[email protected]<mailto:[email protected]>
 
[mailto:[email protected]<mailto:[email protected]>]
 On Behalf Of Fabricio Chamon
Sent: Tuesday, December 18, 2012 6:03 AM
To: [email protected]<mailto:[email protected]>
Subject: Re: how to determine which deformers an envelope operator is looking 
for

Here on a simple scene it works ok...(cylinder enveloped to a 2-bone chain)

logmessage (selection(0).envelopes(0).deformers.getAsText())
// INFO : cylinder,bone,bone1,eff

funny thing is the cylinder itself got logged, also the effector that was not 
picked as deformer.

2012/12/18 Adam Sale <[email protected]<mailto:[email protected]>>
envelope > Select deformer from envelope?

On Mon, Dec 17, 2012 at 10:26 PM, Matt Lind 
<[email protected]<mailto:[email protected]>> wrote:
We are trying to upgrade from Softimage 7.5 to Softimage 2013 SP1 and ran into 
a speed bump during testing.

Our workflow for character work is to create a master character rig which 
contains the skeleton and body (flesh) geometry.  We use separate models for 
clothing and other accessories which the character needs to wear.  This means 
the clothing geometry is enveloped to deformers in the master character rig.  
When a clothing model is imported into a scene, if the deformers are present 
(e.g. master character rig is in the scene) they activate and deform as 
expected.  If the deformers are not present, then the geometry sits still in 
the default rest pose as if no envelope existed. This workflow has been working 
for the past 5 years.

When these scenes and models are imported into Softimage 2013 SP1, the 
envelopes stop working, and sometimes Softimage crashes.  When clothing 
geometry is inspected in the weights editor, the deformer names are displayed 
as "invalid".

Digging into the SDK I got some basics.  For each enveloped piece of clothing 
geometry:

X3DObject.Envelopes(0)  returns valid envelope
Envelope.Weights.Array returns valid envelope weight data.
Envelope.Deformers throws 'invalid pointer' error, or returns an empty 
collection of deformers.

In essence, I have the weight values and the number of deformers in the 
envelope, but not the names of the deformers mapped to the weight values.  I 
need the deformer names.

I have worked around the problem in Softimage 7.5 by using 
Envelope.GetDeformerWeights( SceneObject ) and testing with every object in the 
scene.  I record each object which does not throw an error as well as the 
returned deformer weight data.  The end result is a collection of deformers and 
envelope data to rebuild the envelope.  I remove the original envelope and 
replace it with a new one using the accumulated data.  Works well.

When I try this technique in Softimage 2013 SP1, Envelope.GetDeformerWeights() 
throws an 'invalid argument specified' error on every object in the scene - 
including the true deformers of the envelope (in controlled tests).

How can I determine which deformers an envelope is looking for so the envelope 
can be rebuilt?

Matt






Reply via email to