v1.0
デフォーマを割り当てるポイントを変更します。 たとえば、特定のポイントについてデフォーマのリストを指定することができます。 エンベロープの各ポイントは、1 つまたは複数のデフォーマに割り当てられます。各ポイントに対し、ウェイトはデフォーマの相対的な影響をコントロールします。
デフォーマとは、エンベロープのシェイプを制御するオブジェクトです。 ユーザは、初めてエンベロープ デフォーメーションを作成するときにデフォーマを選択しますが、必要であれば、後でデフォーマを追加したり削除したりすることができます。
デフォーマにはスケルトンを使用するのが一般的ですが、実際にあらゆるオブジェクトをデフォーマとして使用できます。 エンベロープのポイントはデフォーマのセンターに割り当てられるため、デフォーマのジオメトリは重要ではありません (ただし、ボーンは例外です。ボーンの全長によりポイントがデフォームされるからです)。
立方体、球体、ヌルのどれを使用しているかにより、それらを囲むエンベロープの変換は、サイズ、向き、位置においてデフォーマのセンターに対する相対的な変換になります(シェイプが基準となるのではありません)。 ヌル オブジェクトやインプリシット オブジェクトはレンダリングされないため、デフォーマには適しています。
oReturn = LocalAssignFlexEnv( [SubComp], [ConnectionSet], [NbDeformersPerPoint] ); |
エンベロープ割り当てオペレータを持つXSICollection を戻します。
パラメータ | タイプ | 説明 |
---|---|---|
SubComp | 文字列 |
再割り当てされるポイントのリスト デフォルト値: 現在選択されている値 |
ConnectionSet | ConnectionSet |
エンベロープとボーンを指定します。 デフォルト値:現在選択されているオブジェクトをメイン グループとして使用 |
NbDeformersPerPoint | Integer |
割り当て時に各ポイントに影響を及ぼすデフォーマの最大数 デフォルト値: 2 |
'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 |