SISmoothEnvWght

導入

v2.0

カテゴリ

operator

詳細

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

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

スクリプト構文

oReturn = SISmoothEnvWght( PropObj, [SubComp] );

戻り値

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

パラメータ

パラメータ タイプ 詳細
PropObj 文字列 変更するエンベロープ ウェイト プロパティ
SubComp 文字列 スムーズにするポイント/オブジェクト/クラスタのリスト

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

VBScript の例

'This example creates an envelope on "BodyMan" model, with less bones
'than usual (2 nulls for the body, 1 bone per arm).
'
'The default envelope assignment doesn't give a correct separation
'between the arms and the body, so we will use LocalAssignFlexEnv,
'SISmoothEnvWght and SymEnvWeight in order to modify the weight assignment.
NewScene
GetPresetModel "Man", "Man"
'Create basic skeletons: 2 for the arms, plus 2 nulls for the body
Create2DSkeleton -1.9, 17.0, 0, -5.15, 17.0, 0, 0, 0, 0, 4
Set Null0 = GetPrim("Null")
Translate Null0, 0, 15.049359948647, 0, siRelative, siView, siObj, siXYZ
Set Null1 = GetPrim("Null")
Translate Null1, 0, 3.76822515334527, 0, siRelative, siView, siObj, siXYZ
DuplicateSymmetry "B:root", True, False, 1, 0, 0, 0, True
ApplyFlexEnv "Man.Man;root1,bone1,eff1,root,bone,eff,null,null1", False
'We want the head and the center of the body to be only assigned
'to the 2 Nulls, so let's do it using LocalAssignFlexEnv
LocalAssignFlexEnv "Man.Man.pnt[0,2-23,25,26,28-30,34-99,101,103-109,"_
& "113,116-120,122,124-143,145-203,212-220,222-227,229-250,252-279,"_
& "281-284,286-295,297-299,302,304-307,310-315,317,319,321,322,324,"_
& "326-329,332-350,353-359,361,362,365,366,368-379,381,383,385,387,"_
& "389,391,393,395-414,625,629-694,696,698-704,708,711-715,717,719-738,"_
& "740-778,787-795,797-802,804-825,827-854,856-859,861-870,872-874,877,"_
& "879-882,885-890,892,894,896,897,899,901-904,907-925,928-934,936,937,"_
& "940,941,943-954,956,958,960,962,964,966,968,970-989]",_
"Man.Man;null,null1", 2
Rotate "bone", 0, 0, 58.5, siRelative, siAdd, siObj, siXYZ
Translate Null1, 0, 2, 4.0, siRelative, siView, siObj, siXYZ
'Because of the local reassignment, we can see that the shoulder's weight
'assignation is no longer smooth. Let's smooth it using SISmoothEnvWght.
'We increase the smoothing depth for better results.
Set SmoothOp = SISmoothEnvWght( , "Man.Man.pnt[0,2-23,25,26,28-30,34-99,"_
& "101,103-109,113,116-120,122,124-143,145-183,186-189,197-203,215,217-219,"_
& "221,228,229,251,259,271,280,285,287,289,290,292,294,296,298,300,301,303,"_
& "307-309,316,318,320,322,323,325,330,331,333,338,341,345,349,351,352,360,"_
& "363,364,366,367,369,371,402-406,409-432,434,436,439-446,625,629-694,696,"_
& "698-700,702,703,708,711-715,717,719-738,740-778,793,804,834,864,865,867,"_
& "873,897,908,913,924,941,944,977,980,981,985,986,989]")
SetValue SmoothOp & ".neighborhooddepth", 3
Rotate "bone1", 0, 0, 59.625, siRelative, siAdd, siObj, siXYZ
'The same problem occurs on the right shoulder. Since we have corrected the
'left shoulder, let's simply mirror the weights from left to right in order
'to propagate the changes symmetrically.
Set SymTemplate = CreateSymmetryMappingTemplate("Man.Man", True, 0, True)
SymEnvWeight , "Man.Man.pnt[0-32,34-101,103-113,115-219,221-224,226-230,"_
& "233-236,239-262,264-266,268-275,277-285,287-318,320-326,328-354,356-390,"_
& "392-400,402-621]", SymTemplate