骨の位置を変えて、モーションを試して、また骨の位置を動かして、モーションを試してっていう詰まらない作業です。
やり方は知らない人も居るかもしれないので、説明します:
ポリゴンメッシュを選択して、エンベロープをミュート
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
}