Well my only idea is to export the list of deformers in 7.5
You run this code on each asset in 7.5
for envelope in Application.FindObjects(None,
"{470CF890-D3AA-11D0-996C-00A0243F0E60}"):
LogMessage(envelope)
# Replace with your workaround using GetDeformerWeights()
deformers = envelope.Deformers.GetAstext()
LogMessage(deformers)
mesh = envelope.Parent3DObject
prop = mesh.AddProperty("CustomProperty", False, "Deformers")
prop.AddParameter3( "deformers_list", 8, deformers )
Then when you load the rig in 2013, you can use this parameter to retrieve
the list of deformers.
That's not ideal... I agree :(
On 18 December 2012 12:03, David Barosin <[email protected]> wrote:
> A shot in the dark but maybe you can reference the deformed meshes in.
> Referencing might add a little bit of protection from the envelopes
> breaking. If needed you can also redirect the reference to a different
> deformer model. If it connects you can localize the model save the
> envelope out and reapply to clean up any issues.
>
>
> On Tue, Dec 18, 2012 at 2:37 PM, Matt Lind <[email protected]>wrote:
>
>> 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]> wrote:***
>> *
>>
>> Perhaps you didn’t read my post. Envelopes.Deformers is not accessible.*
>> ***
>>
>> ****
>>
>> ****
>>
>> Matt****
>>
>> ****
>>
>> ****
>>
>> ****
>>
>> *From:* [email protected] [mailto:
>> [email protected]] *On Behalf Of *Fabricio Chamon
>> *Sent:* Tuesday, December 18, 2012 6:03 AM
>> *To:* [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]>****
>>
>> envelope > Select deformer from envelope? ****
>>
>> ****
>>
>> On Mon, Dec 17, 2012 at 10:26 PM, Matt Lind <[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****
>>
>> ****
>>
>> ****
>>
>> ****
>>
>> ****
>>
>> ****
>>
>> ** **
>>
>
>