SIModifyFlexEnvWght

SIModifyFlexEnvWght

導入

v1.0

詳細

エンベロープ ポイントのウェイト付けを変更します。エンベロープは、IK チェインなどのデフォーマのセットに「スキン」として割り当てられるオブジェクトまたは階層です。エンベロープは、エンベロープのデフォーマの動きに応じて動いたりデフォームします。たとえば、文字のスケルトンをアニメートすると、そのとおりに文字が動きます。

エンベロープの各ポイントは、1 つまたは複数のデフォーマに割り当てられます。各ポイントに対し、ウェイトはデフォーマの相対的な影響をコントロールします。

注: エンベロープのウェイトをより高速に設定できる可能性がある代替の方法は、オブジェクト モデルを使用する方法です。「Envelope.Weights」を参照してください。

スクリプト構文

oReturn = SIModifyFlexEnvWght( PropObj, Name, [SubComp], [Mode], [Value], [Normalize] );

戻り値

新しいエンベロープオペレータを含むXSICollection を戻します。

パラメータ

パラメータ タイプ 説明
PropObj 文字列 変更するエンベロープ ウェイト プロパティ
Name 文字列 デフォーマ オブジェクトの名前。 このオブジェクトに関連するウェイト値は変更されます。
SubComp 文字列 ポイントのリスト

デフォルト値: 現在選択されている値

Mode Integer ウェイト変更モード

デフォルト値: 0 (絶対)

指定可能な値:

説明:

0 絶対
1 加算
2 率加算
Value 浮動小数 指定のポイントに適用されるウェイト値

注: ウェイトの有効な値の範囲は、0 ~ 100.0 です。いずれかのデフォーマのウェイトを変更すると、合計のウェイトは常に 100% なので、他のデフォーマ ウェイトにも影響があります。

デフォルト値: 100.0

指定可能な値:

説明:

0 ~ 100.0 有効値の範囲は 0 ~ 100.0 です。
Normalize Boolean デフォーマ間のウェイトを正規化します。

デフォルト値: True

VBScript の例

'CreateSinusoidalEnvelope: creates an envelope over 2 Nulls,

'with a customized, special wave-like weight assignment.

'

'A generic subroutine was created; it can handle any mesh as input.

Sub CreateSinusoidalEnvelopeAssign( Object, out_Null0, out_Null1 )

'Create the two envelope "handles"

Set out_Null0 = GetPrim("Null")

Set out_Null1 = GetPrim("Null")

'Envelope the object with the 2 Nulls

Set EnvelopeWeightsAssign =_

ApplyFlexEnv(Object & ";" & out_Null0 & "," & out_Null1, False)

Set EnvelopeWeightsProperty = _

GetValue( CStr( EnvelopeWeightsAssign ) ).Owners(0)

'Reset all weights to 100% for Null0 and 0% for Null1

'(use absolute mode), with normalize ON

SIModifyFlexEnvWght EnvelopeWeightsProperty, out_Null0,_

Object & ".pnt[*]", 0, 100, True

'Get object's points collection

Set Points = Object.ActivePrimitive.Geometry.Points

NbPts = Points.Count

for i = 0 to NbPts - 1

'We will set the weight of out_Null1 as

'"(1 + Sin(Z Coord of the point))*100/8" (or any formula).

'We will user the additive mode in SIModifyFlexEnvWght.

Weight = (1 + Sin(Points(i).position.z * 2.0))*50

SIModifyFlexEnvWght EnvelopeWeightsProperty, out_Null1,_

Object & ".pnt[" & i & "]", 1, Weight

next

End Sub

'Call CreateSinusoidalEnvelopeAssign with a Grid.

'Then move one of the 2 Null deformers in order to see the effect.

NewScene

Set Grid = CreatePrim("Grid", "MeshSurface")

SetValue Grid & ".polymsh.geom.subdivu", 1

SetValue Grid & ".polymsh.geom.subdivv", 30

CreateSinusoidalEnvelopeAssign Grid, Null0, Null1

'Translate Null1 to see the effect of the special weighting

'You can move Null1 to see more...

Translate Null1, 3, 0.0, 0.0, siRelative, siView, siObj, siXYZ

'Let's show the weight maps so you can see what was computed:

SetDisplayMode "Views.ViewA.TopCamera", "constant"

SetValue "Views.ViewA.TopCamera.camvis.objctrlpropmaps", True

SelectObj "grid", , True

関連項目

SIApplyFlexEnv Envelope