blog

2012/08/09

にわかスクリプト~毎回ゴースティング設定したり消したり付けたり面倒くさかったんです。

見るからに怒られてしまいそうな感じですごめんなさい。
綺麗にいかないのを整理もせずに放置して忘れるの防止の意味も込めて(´・ω・`)

選択してるオブジェクトのアニメーションゴースティングの表示非表示を
切り替えたかったので書いてみたが何かスマートじゃないわね。いつものことながら。
とりあえず軌跡とか見るとき便利かな~と。。

ほんとにコレで大丈夫か。。動いてるからまぁ、いいか・・・いいのか・・?

因みにLayerのゴースティングのチェックとCameraVisibilityのCurvesには何もしてませんですはい。
var oCam = GetViewCamera(-1);
var oCamA = GetViewCamera(0);
var oCamB = GetViewCamera(1);
var oCamC = GetViewCamera(2);
var oCamD = GetViewCamera(3);
var oLastF = GetValue( "PlayControl.Out" );

for (i=0; i<Selection.count; i++)
{
 {
 var Ghosting = GetValue(Selection(i) + ".visibility.ghosting", null);
 var Ghosttype = GetValue(Selection(i) + ".visibility.ghosttype", null);
 }

 if (Ghosting == false )
 {
 SetValue(Selection(i) + ".visibility.ghosting", true, null);
 SetValue(Selection(i) + ".visibility.ghosttype", 1, null);
 
 }
 else
 {
 SetValue(Selection(i) + ".visibility.ghosting", false, null);
 }
}

var Camdisp = GetValue(oCam + ".camdisp.animghostfade",null);

if (Camdisp == true )
 {
 SetValue(oCam + ".camdisp.animghostenable", true, null);
 
 SetValue(oCam + ".camdisp.animghostframesbefore", oLastF, null);
 SetValue(oCam + ".camdisp.animghostframesafter", oLastF, null);
 SetValue(oCam + ".camdisp.animghostframestep", 1, null);
 SetValue(oCam + ".camdisp.animghostfade", false, null);
 SetValue(oCam + ".camdisp.animghostontop", true, null);
 
 SetValue(oCam + ".camdisp.animghosttrailsamples", 10, null);
 SetValue(oCam + ".camdisp.animghostvelocityscale", 1, null);
 
 SetValue(oCam + ".camdisp.keybeforecolorred", 1, null);
 SetValue(oCam + ".camdisp.keybeforecolorgreen", 0, null);
 SetValue(oCam + ".camdisp.keybeforecolorblue", 0, null);
 SetValue(oCam + ".camdisp.keyaftercolorblue", 1, null);
 SetValue(oCam + ".camdisp.keyaftercolorgreen", 0, null);
 SetValue(oCam + ".camdisp.keyaftercolorred", 0, null);
 
 SetValue(oCam + ".camdisp.framebeforecolorred", 1, null);
 SetValue(oCam + ".camdisp.framebeforecolorgreen", 0, null);
 SetValue(oCam + ".camdisp.framebeforecolorblue", 0, null);
 SetValue(oCam + ".camdisp.frameaftercolorblue", 1, null);
 SetValue(oCam + ".camdisp.frameaftercolorgreen", 0, null);
 SetValue(oCam + ".camdisp.frameaftercolorred", 0, null);
 
 SetValue(oCamA + ".camdisp.animghostenable", false, null);
 SetValue(oCamB + ".camdisp.animghostenable", false, null);
 SetValue(oCamC + ".camdisp.animghostenable", false, null);
 SetValue(oCamD + ".camdisp.animghostenable", false, null);
 SetValue(oCam + ".camdisp.animghostenable", true, null);
 }
else
 {
 SetValue(oCamA + ".camdisp.animghostenable", false, null);
 SetValue(oCamB + ".camdisp.animghostenable", false, null);
 SetValue(oCamC + ".camdisp.animghostenable", false, null);
 SetValue(oCamD + ".camdisp.animghostenable", false, null);
 SetValue(oCam + ".camdisp.animghostenable", true, null);
 }


軌跡出したい奴を選んで実行。
スクリプト実行するたびにアクティブなビューでゴースティング表示のON/OFF。

ゴースティングタイプはポイントにして、長さは前後にPlayControl.Outの値入れてます。
後は、色とフェードやらXrayやらチェックしたり外したり自分好みに。


複数選択してるモデルにブラウザで選択したプリセットを一気に
適応できたらいいなって思って。

しかしすっごい無理やり感が否めない・・。

違うビューに行ったら今までのゴースティング可視状態リセットして新たに選択している
ものだけゴースティング表示にしたいんだけども、シーン内のオブジェクト全部調べたら
処理速度が残念なことになったんだよなぁ。ヌルとカーブの数だけでも8000とかあるもの。

もっとこうエレガントにしたいもんです。
そろそろ友愛とやらに挑戦してみようかなドキドキ(;´Д`)ハァハァ

そうそう、今日Twitterでプログレスバーの実験に使ってたのこれです。
例文からコピペして、break ;を消しちゃって処理速度重い!!とかなってました(;・∀・)

どうなるかは分かったけどどこで使うかはイマイチ想像できてませんorz
ワケが分からなくなりつつ今日もまた日が暮れる(´・ω:;.:...


あとコレとは別に全部一気にゴースティング周り全部OFFにしてやんぜってことで、
こんなん
var oProgressBar = XSIUIToolkit.ProgressBar ;
oProgressBar.Maximum = 100 ;
oProgressBar.Step = 1;
oProgressBar.Caption = "ちょっと待ってね(´・ω・`)";
oProgressBar.CancelEnabled = true ;
oProgressBar.Visible = true;

while( oProgressBar.Value < oProgressBar.Maximum )
{
 SetValue("Views.ViewA.*Camera.camdisp.animghostenable", false, null);
 SetValue("Views.ViewB.*Camera.camdisp.animghostenable", false, null);
 SetValue("Views.ViewC.*Camera.camdisp.animghostenable", false, null);
 SetValue("Views.ViewD.*Camera.camdisp.animghostenable", false, null);
 SetValue("*Camera*.*Camera*.camdisp.animghostenable", false, null);
 SetValue("*.visibility.ghosting", false, null);
break ;
oProgressBar.Increment() ;
}


なんとなくプログレスバー入れてみた。
サンプルのコピペまんまだけど。しかも本文全部コマンドだけど。

いやはや難しいなぁ。全然進歩する気がしなひ(´・ω:;.:...

2012/08/01

にわかスクリプト~クリップをActionsフォルダに保存したかったんです。

記事2連投。
取り敢えずメモ代わりに。

作成したAnimSourcesクリップを選択(複数可)して実行。
親モデル名+クリップ名で開いてるプロジェクトのActionsフォルダに保存してくれる。。はず。
var oProject = ActiveProject;
for( i=0; i<Selection.count; i++ )
{
 SelName = "Sources." + Selection(i).Parent.name + "." + Selection(i).name;
 SaveName = Selection(i).Parent.name + "_" + Selection(i).name;
 SavePreset(SelName, oProject + "\\Actions\\" + SaveName + ".Preset", null, null, null, false, null);
}

そんなに検証してないけどAnimSourcesじゃないとダメっぽい?
ん~、やっぱりなんかスッキリしない感じ。もう少し工夫が必要だ(´・ω:;.:...
けど動くからいいか・・ということにしておこう(;´∀`)

前回の記事に追記でも良かったかも。まぁ、いいか。

にわかスクリプト~移り気ストーキングカメラ

人が何かに乗ってビューンっていったり、
ロボ的なのがなんか噴射してビューンっていったり、
まぁよく動く。

アニメーション付けるときフレームごとにソイツの所に飛んでいくの
が煩わしかったのです。キャラごとにカメラ付けたらゴチャついて使いづら。。

てことで選択したヤツをストーキングするカメラを作りたかったんです。

なんか、標準機能で良い方法がありそうなんですけども(´・ω・`)

var oSel = Selection(0);
var oSelName = oSel.fullname;
var oCamModel = Dictionary.GetObject("Follow_Cam",false);

if ( oCamModel == null )
{
 var oModel = ActiveSceneRoot.AddModel(null,"Follow_Cam");
 var oNull = oModel.AddNull("Follow_Cam_Cons");
 var oCam = oNull.AddCamera("camera","Follow_Cam");
 SetValue("Follow_Cam.Follow_Cam.kine.local.posz", 20, null);

 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posx", oSelName + ".kine.global.posx", null);
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posy", oSelName + ".kine.global.posy", null);
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posz", oSelName + ".kine.global.posz", null);
}
else
{
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posx", oSelName + ".kine.global.posx", null);
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posy", oSelName + ".kine.global.posy", null);
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posz", oSelName + ".kine.global.posz", null);
}


とまぁこんな感じで。if文的なモノの練習がてら。

内容は
-----------------------
ストーキングしたいオブジェクトを選択して実行。

もし"Follow_Cam"っていうモデルが無かったら"Follow_Cam"っていうModel作る
"Follow_Cam"の子に"Follow_Cam_Cons"ってヌル作る
"Follow_Cam_Cons"の子に"Follow_Cam"って名前のカメラを作る
"Follow_Cam_Cons"のGlobalポジション選択したオブジェクトのGlobalポジション
にExpressionで固定する。

"Follow_Cam"っていうモデルが存在していたら、カメラ構造の作成はせずに
だけ実行。
-----------------------
こんな感じ・・になってるハズ。多分きっとMaybe。

さて次は何を試してみようか(´・ω:;.:...