myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | mEdit Bones

今日はキャラクターのセットアップしていて、結構厄介な羽が付いてるキャラだったので何回も骨の位置を変えてました。
骨の位置を変えて、モーションを試して、また骨の位置を動かして、モーションを試してっていう詰まらない作業です。

やり方は知らない人も居るかもしれないので、説明します:

ポリゴンメッシュを選択して、エンベロープをミュート
ChildCompensate と、念のために Constrain Compensateを ON にして、
骨を動かして
骨を全部選択して「Set Reference Pose」にして。ブランチ選択でもOK(多分)
エンベロープのミュートを解除して
完了

これを4回、5回、6回以上やると・・・

あああああ~めんどくせぇぇぇーーーーー!!!!

となるので、スクリプトを書いてみました。


このキャラだけだったら手動でやったほうが早かったけど、きっとまた使うスクリプトになります。

そして、誰かの役に立つかもしれないから公開します。


インストール方法:

ありません。ただのスクリプトです。
スクリプトエディターから実行するか、シェルフやツールバーにドラッグ&ドロップしてボタンを作る。


使い方:

エンベロープポリゴンメッシュを選択して実行。

スクリプトはポリゴンメッシュを選択不可にして、エンベロープをOFFにして、Child Compensate と Constrain Compensate を ONにします。

好きにボーン、またはヌルボーンを移動します。ヌルとボーンしか対応していません。

ボーンかヌルを選択したままもう一回スクリプト実行

すると、ポリメッシュの選択を可能に戻し、ボーンにSet Reference Poseをかけて、Child Compensateと Constrain Compensateを元に戻します。そして、Envelopeのミュート解除。


Envelope のある PolygonMesh 。
そして、Null か Bone という条件で動くので、使える人は限られているかもしれないな~。
まぁ、俺には便利だからこれで良いっか。



以上!


DOWNLOAD




追記
ダウンロードが出来ない人もいるようなので、コードも張っておきます:


/*-----------------------------
mEditBones
-------------------------------
2012/04/19
Martin Yara

Shortcut to edit your bones:
Mute Envelope and Turn on Child and Constrain Compensation
Click again and it will set a reference pose in your model
turn on Envelope and change Child and Constrain to its previous state.

Works only with polymeshes, and bones and nulls as deformers.
-----------------------------*/

// Get Current ChldComp & CnsComp values
var ChldComp = GetUserPref("SI3D_NODETRANSFORM_CHILD_COMPENSATE")
var CnsComp = GetUserPref("SI3D_CONSTRAINT_COMPENSATION_MODE")
var EditBones_Tmp = ActiveSceneRoot.properties("EditBones_Tmp")

// Get Only Polymeshes
if (selection) var oSel = SiFilter(selection, siPolyMeshFilter)

// Filter Possible Deformers (Nulls & Bones)
var oDefs = XSIFactory.CreateObject( "XSI.Collection" );
for ( var i=0, a = Selection.Count; i < a; i++ ) {
if (selection(i).type == "null" || selection(i).type == "bone"){
oDefs.add(selection(i))
}
}


if (!EditBones_Tmp){
if(oSel){
// Save ChldComp & CnsComp values
var oPSet = ActiveSceneRoot.AddProperty( "CustomProperty", false, "EditBones_Tmp" )
oPSet.AddParameter2("ChldComp", siBool, ChldComp);
oPSet.AddParameter2("CnsComp", siBool, CnsComp);
oPSet.AddParameter2("list", siString, oSel);

for ( var i=0, a = oSel.Count; i < a; i++ ) {
oSel(i).properties("visibility").selectability = false
Selection.remove (oSel(i))
}

// Display Info
SetValue(GetView()+".camvis.custominfo", true, null);
ActiveSceneRoot.AddProperty( "CustomProperty", false, "DisplayInfo_EditBones_ON" )

SetUserPref("SI3D_NODETRANSFORM_CHILD_COMPENSATE", 1);
SetUserPref("SI3D_CONSTRAINT_COMPENSATION_MODE", 1);

// Mute Env
for ( var i=0, a = oSel.Count; i < a; i++ ) {
var Env = oSel(i).envelopes(0)
if (Env) Env.mute = 1
}
//ToggleSelection(oSel)
}
else{
logmessage ("You need to select at least 1 object with Envelope", siError)
}
}

else{
if (selection.count != 0){
var ChldComp = EditBones_Tmp.ChldComp.value
var CnsComp = EditBones_Tmp.CnsComp.value

SetUserPref("SI3D_NODETRANSFORM_CHILD_COMPENSATE", ChldComp);
SetUserPref("SI3D_CONSTRAINT_COMPENSATION_MODE", CnsComp);

if(!oSel){
for (var k=0, c=oDefs.count; k < c; k++){
var Poly = ActiveSceneRoot.FindChildren2("","polymsh")
var oSel = XSIFactory.CreateObject( "XSI.Collection" );
oSel.unique = true

for ( var i=0; i < Poly.Count; i++ ) {
if (Poly(i).Envelopes(0)){
var Def = Poly(i).Envelopes(0).Deformers
for ( var j=0, a = Def.Count; j < a; j++ ) {
if (Def(j).fullname == oDefs(k).fullname){
oSel.Add(Poly(i))
break;
}
}
}
}
}
}

// Unmute Env
for ( var i=0, a = oSel.Count; i < a; i++ ) {
var Env = oSel(i).envelopes(0)
if (Env) {
SetEnvelopeRefPoses(Env.deformers);
Env.mute = 0;
}
}

for(var i=0; i < oSel.count; i++){
oSel(i).properties("visibility").selectability = true
}

DeleteObj("EditBones_Tmp");
DeleteObj(ActiveSceneRoot.properties("DisplayInfo_EditBones_ON"))
}
else{
logmessage ("You need to select at least one null-bone or bone", siError)
}
}

function GetView()
{
var vw = GetFocusedViewport();
var mCamera = GetViewCamera(-1)
if (vw == "A") mCamera = GetViewCamera(0)
else if (vw == "B") mCamera = GetViewCamera(1)
else if (vw == "C") mCamera = GetViewCamera(2)
else if (vw == "D") mCamera = GetViewCamera(3)
return mCamera
}

Comments

Only the administrator may view.

Only the administrator may read this comment.

  • 2012/04/23(月) 19:47:16 |
  • |
  • #
  • [ Edit ]

Post a comment


Only the blog author may view the comment.

Trackbacks

Trackbacks URL
http://myara.blog.fc2.com/tb.php/113-a0a6e7f2
Use trackback on this entry.