blog

2012/09/14

Null位置でDepth

前のブログでメモってたやつをメモしなおし。

この記事のこと。
http://caffeineabuse.blogspot.jp/2009/01/custom-depth-pass-in-xsi.html

深度をNullの位置で制御しようとしてる感じです。

・ヌルを2つ用意して「Near」と「Far」と、適当に名前付ける。
・Render treeは【Scalar state】--【Change Range】--【Material】
・Change RangeのPPG開いて、
元の範囲の開始にエクスプレッションで
ctr_dist_cam( Far.kine.global.pos )
元の範囲の終了に
ctr_dist_cam( Near.kine.global.pos )
・新規範囲の開始を0終了を1に。(0が真っ黒、1が真っ白)

・終わり。


とまぁこんな感じ。
ただの白黒グラデーションになるだけですがまぁ、ね(´・ω・`)

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

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