myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

エンベロープのWeight Mapsが真っ黒になった事件

久しぶりです。

引越しと仕事でまだバタバタしていて、家はまだ箱だらけになっております。


今日は今のプロジェクトで出てきた問題です。

ウェイトを吐き出して、読み込んで、修正して、などなどの繰り返しの作業の後に気づいたらWeight Pointsが表示されません。そして、骨に色が付いているのにWeightMaps表示は真っ黒です。

ウェイトを調べてみると特に問題がありませんし、普通に動きます。

色々やってみたら解決が出来たのでメモっておきます。

まずは問題の画像:

WeightMaps0.jpg

※ 仕事のデータなのでRandomizeを掛けました。
これならアベンジャーズ2のモデルだと分からないですね。
バレるとマーベル社に怒られますからね。

なんてね。


つまらない妄想を放っておいて、話に戻ります。


直し方:

ポリゴンメッシュを選んで、画面の左下のWeight Paint Panel (ブラッシュのアイコン)を開く。

WeightMaps1.jpg


左側の骨リストから骨を1個選ぶと・・・

WeightMaps2.jpg

なおりました。

こりゃ、バグだよな。


それじゃ、また。

Softimage 2013 SAP は出ません !

と Schoennagel氏は自分のブログPlanetSoftimageで言っていました。
そして、Bellsey氏とRousseau氏も si-communityとxsi-base で同じことを言っていたので、
これは間違いないですね。

もう5日程前の事ですが、まだ知らない人がいるみたいなので、このブログに書いておきます。


PlanetSoftimageでSchoennagel氏はこう書きました:

As for SAP, this year there will not be a SAP version for Softimage. With the transition of development moving to Singapore the team put all their focus into the 2014 release and decided not to focus on a smaller mid-year release. I can promise you there will be some pretty impressive, BIG features in 2014 so hang in there....and as far as I know SAP releases will resume again after this year. Im really impressed with the Singapore team, some very talented people are anxious to prove themselves!!



大まかな翻訳:

シンガポールへの移転で2014の開発に集中する為に、今年はSAPリリースはありません。
2014に驚くほど凄い新機能が追加されるのを保証します。期待して待ってください!そして、僕は知る限り、
2014年以降にSAPリリースは復帰されます。

みたいなことは言っています。
正確な翻訳ではないけど、まーだいたいそんな感じです。

前向きですね。
ま、AD社員だから次のリリースは期待しないほうが良いよって書くわけないよね。


これって、良いことなのか?悪いことなのか?
良いことだと思いたいですね。


2010年と2011年の9月頃に 2011 SAP と 2012 SAP がリリースされました。
SAPはSubscription Advantage Package という略で、サブスクリプション会員たちの為に出るマイナーリリースです。
半年後(4月頃)に新機能が加われた新しいメジャーバージョンがリリースされます。
という流れに、2年前からそうなっています。

SAPが出ることによって、2013のリリースは弱く感じてしまうかもしれません。
SAPに出した機能は新機能として見られないですね。

でもそれだけではありません。

SAPを出すために開発作業が分散され、新しいバージョンの開発が弱くなってしまう可能性もあります。
SAPはマイナーバージョンだから、前方互換機能はマストです。これもネックになってしまうかもしれませんね。


今回はSAPがない為、前方互換などに気にせずに思いっきり2014に集中が出来、4,5ヶ月の締め切りではなく10ヶ月ぐらいの長い期間はかけられるから、ちょっと期待出来るかもしれません !

がっかりさせられるかもしれません。


ん~まぁ、期待して待ちましょう。


ていうか、毎回思うんですけど、年と年数バージョンが違うのは面倒くさい!2011年に2012が出て、
話が分からなくなってしまいます。今更はもう変えられないんですけど。

以上 !


Links:

Planet Softimage
http://area.autodesk.com/blogs/marks/siggraph-2012---calling-all-crowds
si-community
http://www.si-community.com/community/viewtopic.php?f=5&t=2603

SI | バグメモ

PSDは表示されない


SI 2010,2011,2012 で:

キューブ(何でも良いけど)を作成して、UVを作ってマテリアルとテクスチャを設定します。
例として、TGAテクスチャにしましょう。
イメージクリップメニューでそのテクスチャを他のPSDファイルと入れ換えます。

結果:
何も変わりません。
ビューポートはTGA表示のままです。
MR レンダーリングしてもTGA表示のままです。

TIFF とかに入れ換えるとすぐにTIFFが表示されます。

わけわからないな・・・。


2013ではこのバグがありませんが、仕事で2013使っていません。


困ったな・・・。

PSDで作って、提出データはTGAやPICになったりする事が多いから一瞬でPSDとTGAの切り替えスクリプトは作っていたけど、PSDを表示させるにはシーンをもう一度読み直す必要があります。
あるいは、新しいPSDイメージクリップを作成します。

シーンをリロードせずにPSD表示させるのは無理だな。

今んところはワークアラウンドなんて知りません。メールリストに聞いてみたけど、誰も知らないようです。


PSD → TGA ツールはそのうちに公開します。

---------------


DisplayとVisibilityという名前はNG


今日はモニターっぽい機械のモデリングしていました。
Modelの中に「Display」というオブジェクトを作成し、色々モデリングしていました。それで、エッジを増やそうとしたら、「エラー:なんとかなんとか」が出てしまいました。

なんで?

親子を切って、ルートでやってみると普通にSplit Edge や Add Edgeは使えました。

まさかModelのプロパティと同名だからSIは混乱しちゃってエラーが出る?

Modelの中に戻して、オブジェクト名を「Display1」にすると、普通にSplit Edge や Add Edgeは使えました。

やっぱ名前だな。
試しに「Visibility」という名前にしてみると、また同じ問題。
「Kinematics」で試してみたら普通に行けました。

ん~良く分からんけど、とにかく「Display」と「Visibility」という名前を付けちゃいけないですね。

SI | ウェイトコピー(Gator)

SoftimageのGatorのウェイトコピーが結構便利ですね。


これで OBJ A のウェイトを OBJ B にコピーすることが出来ます。

しかし、OBJ B のウェイトは必ず OBJ A の骨(デフォーマー)を使ってしまいます。


これはこれで便利な時もありますが、同じ骨構造の違うキャラクターにウェイトコピーしたい場合は不便です。
OBJ B に Gatorでウェイトコピーして、OBJ Bのウェイトを保存して、
OBJ の エンベロープを削除して、もう一度自分の骨にエンベロープしなおします。
そして、エンベロープを掛けた後に保存したウェイトを読み込みます。
これで完了。

これは何体のプロジェクトがある時には言うまでもなく、面倒くせぇ・・・。


他に便利なやり方がありますでしょうか?
あったら教えて下さい ! 是非 ! お願いします !

Mayaのコピーウェイトは確かに、ウェイトが入ったままでウェイト情報をコピーすることが出来ますね。
Gatorほどパワフルではないけど、この場合にはGatorより便利です。
最近SIのプロジェクトが多くてMayaは全く触っていないな・・・。

なんでしたっけ、
あっ、はい、Gatorだな

Gatorのこのやり方しか分からないから、スクリプトですることにしました。
メインコードはGatorのログを使うので初心者でも出来るレベルのスクリプトだと思いますが、
ちょっと参考になるから書いておきます。


それに、エンベロープオペレーターからウェイトプロパティーの取得方法を見つけたからメモっておきます。

実はイマイチよく分からないんですけど、こんな感じです:


var oObj = selection(0)
var oEnv = oObj.envelopes(0)
var EnvCls = oEnv.PortAt( 3, 0, 0).Target2
var EnvProp = oEnv.PortAt( 4, 0, 0).Target2


そう。それだけです。
これで EnvCls = エンベロープクラスター
と EnvProp = ウェイトプロパティー
は取得が出来ました。


この書き込みから覚えたやり方です
http://www.the-area.com/forum/autodesk-softimage/xsi-sdk/trouble-with-saving-out-weights/page-last/

良く分からないからまた今度ゆっくりマニュアルを読んでみます。


では、Copy Weights のスクリプトです。


このスクリプトは2つの大きなファンクションに分かれています。
① CopyWeights : コピーウェイト(Gatorと全く同じ)
② ReEnvelope : エンベロープし直して、ウェイトを読み込み。

① CopyWeights だけが必要な場合「ReEnvelope」の前に // を入れるだけで済むからこの書き方にしてみました。


/*
mCopyWeights2
--------------
Copy Weights through Gator

Bones have to have the same name to work
*/


// ポリメッシュだけをとっておきましょう。
var oSel = SIFilter(selection, siPolyMeshFilter);

// 条件:「ソースにエンベロープがある・ポリゴンメッシュオブジェクトの数は2個」
if (oSel != null && oSel.Count ==2 && oSel(1).envelopes.Count == 1){

// ウェイトをコピーするファンクションを実行
CopyWeights(oSel);
// ここまではウェイトコピーされたけど、コピー元の骨のエンベロープになっています。

// 必要であれば好きな骨にエンベロープをし直して、さっきのウェイトを使います。
// 骨は同名という前提で動くファンクションです:
ReEnvelope(oSel(0));

}
else{
logmessage ("コピー先のポリゴンメッシュオブジェクト と コピー元ポリゴンメッシュオブジェクト を選択して下さい", siError)
}

//============================================
// ウェイトをコピーするファンクション
//--------------------------------------------
function CopyWeights(oSel){

// まずは変数を設定します。
// oObj = 最初に選択されたオブジェクト(コピー先)
// oSource = 最後に選択されたオブジェクト(コピー元)
var oObj = oSel(0)
var oSource = oSel(1)

// コピー先にエンベロープがあると、コピーが出来ないので、
// エンベロープが見つかったら削除しておこう
if (oObj.envelopes.count !=0) deleteobj(oObj.envelopes)

// Gatorでエンベロープをコピーして、Gatorのオペレーターをフリーズ
var GatOp = ApplyGenOp("Gator", "", oObj +";"+ oSource, 3, siPersistentOperation, siKeepGenOpInputs, null);
CopyAnimationAcrossGenerator(oObj + ".polymsh.TransferAttributes", 0, null);
FreezeObj(GatOp);

logmessage ("Envelope Copied : [" + oSource + "] --> [" + oObj +"]")
}

//============================================
// エンベロープをし直すファンクション
//--------------------------------------------
function ReEnvelope(oObj){
// oObj = コピー先。最初に選択されたオブジェクト 。

// プロジェクトフォルダを弄りたくないから、XSIのテンポラルフォルダを取得
var TempPath = XSIUtils.Environment("TEMP");
// ファイルの名前とパスを設定しておこう。
var TempPathPreset = TempPath + "\\" + oObj.name + ".Preset"


// ウェイト情報をプリセットファイルに保存する(テンポラルフォルダ)
SavePreset (oObj.envelopes(0).PortAt( 4, 0, 0 ).Target2, TempPath + "\\" + oObj.name + ".Preset");

// エンベロープを削除
deleteobj(oObj.envelopes)

// エンベロープを削除してもポイントクラスタが残ってしまうので、消しておこう。
var pntcls = selection(0).activeprimitive.geometry.clusters.filter("pnt")

if (pntcls.count > 0){
// エンベロープと関係ないポイントクラスタがあるかもしれないので、
// 消したい奴だけを探る必要があります。ポイントクラスタをループしましょう。

for ( var i=0, a = pntcls.Count; i < a; i++ ) {
// エンベロープクラスタは今タダのポイントクラスタなので見分ける方法がありません。
// 普通は「EnvelopWeightCls」という名前になっているはずなので、
// 「EnvelopWeight」から始まったら削除しよう。

if(pntcls(i).name.substring(0,13) == "EnvelopWeight") DeleteObj(pntcls(i))

// もし違う名前だったら・・・諦めるしか無い。
}
}

// 新しくエンベロープし直す。
// でもどの骨にエンベロープするのか判断できないので、ユーザーに決めてもらうように
// ピックカソル選択にしましょう:
logmessage ("エンベロープ のデフォーマー を選択して下さい", siWarning)
var rtn = PickElement( null, "Pick Bone", "Pick Bones Branch to Envelope", null, button, 0 )
var element = rtn.Value( "PickedElement" ); // これで選択された骨を取得する
var button = rtn.Value( "ButtonPressed" ); // これはただキャンセルされたかどうかが分かる為

// ピックはキャンセルされていないければ button は 0 じゃない なので、
// キャンセルしてないければ次に進もう:
if (button !=0){
// Expand() でブランチ選択された全オブジェクトをとっておこう
var oCol = XSIFactory.CreateObject('XSI.Collection');
oCol.unique = true; oCol.items = element;
var oBones = oCol.Expand();

// oObj を さっきのブランチ選択に エンベロープ を掛けましょう。
ApplyFlexEnv(oObj +";"+ oBones, null, 2)



// 最後に保存していたウェイトを読み込んで
// ここは保存した「プリセット」を「ウェイトクラスタ」にぶち込む
// デフォルトの名前になっているはずなので、クラスタ名だけで上手く行きます:
SILoadPreset( TempPath + "\\" + oObj.name + ".Preset" , oObj.envelopes(0).PortAt( 4, 0, 0 ).Target2 );
}
// FSOメソッドでウェイトのファイルを削除。一応ね。
var FSO = new ActiveXObject( "Scripting.FileSystemObject" );
FSO.DeleteFile (TempPathPreset)
}



因みにですね、ブログの解析ツールを見てたらどうやら2ちゃんから来てくださった方もいたので、2ちゃんスレッドを除いてみました。なんと、俺に対しての批判的な書き込みもありましたw
名乗らずに悪口書くのは簡単だからこの程度のクズは相手にするつもりないけどちょっと驚きましたね、さすがに。
暇でしょうけど、知らない人の悪口を書くより他にやることないのかな?

多分同じ人だと思うけど、Mayaに非破壊は要らない。皆優秀で形状を完璧に出来てからウェイトを入れるみたいなことを言ってたけど、これはちょっと笑っちゃいました。この人は本当にCGの仕事をしてるのかな?

まぁ、どうでも良いけど。


明日は多分Diablo3のサーバーはきっとまたメンテナンスになるので、今日やるしかないけど、もう飽きちゃいました。
Skyrimをやる気も出ないけど、頑張ってクリアしようかな~。


とりあず、今日は寝る。

おやすみなさい!

SI | COG + Sym バグ?

XSIBaseではバグ報告のスレッドがあって、あそこにこのバグがリポートされました。

COG と Symmetry でポイントをスケールすると、スケールの中心は両側の真中になるというバグです。

SRpivot0.gif

なぜか選択されていない右側との真中でスケールされます。

これはバグですかね。バグだとしたら、昔からあるバグですね。
昔過ぎて、もうこういうもんだと思ってました。

バグか分からないけど、不便です。めっちゃ不便です。

こんなスケールをやりたい時はないでしょう。
そうやりたかったら、両側を選択してから普通にCOGでスケールするよ。


もちろん、回転にも同じ現象が起こります:

SRpivot1.gif


COGは選択されているポイントの真中をピボットにするはずなので俺もバグだと思っています。


ピボットをちょっとだけ動かすと、本来のCOG+Symになります。
正しいかどうか分からないけど、俺にとってはこれは理想のCOG+Sym。

SRpivot3.gif

SRpivot2.gif


昔からこういうワークアラウンドを使っているので、もう慣れていましたが、やっぱりバグじゃない?
Previous page Next page