バッチファイルの書き方


xsi.exe -r -scene "\\Ibm02\HD-PU2 (D)\BS\XSI\Scenes\gun1\c01_c02_gunzei1_08.scn" -pass "chara" -sample_max 2 -sample_min 0 -filter "gauss" -jitter true -contrast "0.05,0.05,0.05,0.05" -continue

1.スケルトンを描く。

名前をこれにする

"root_leg"
"up_leg"
"low_leg"
"eff_leg"


2.インプリシットキューブを出す。

名前を"ctrl_foot"

eff_legのとこに持ってきてeffを選んでposicons。普通にセットアップする感じで。


3.ctrl_footを選んでカスタムパラメータを作る。

名前を”ctrl_foot_set”

ブールのパラメーターを作る。名前を"stretchy"

4.ボーンのlengthにエクスプレッションをかける

cond( ctrl_foot.ctrl_foot_set.stretchy && ctr_dist( root_leg., ctrl_foot. ) > 6, ctr_dist( root_leg., ctrl_foot. ) / 6 * 3, 3 )


二つのボーンにこれをかける。

作ったパラメーターでオンオフできる。

初めの6は二つのボーンを足した長さ。rootとeffの距離が6以上になると伸びる。
最後に6で割って3をかける意味は分からない。

ストレッチスケルトン


このサイトhttp://www.stephanemarino.com

選んでる全ての名前とタイプを表示する。

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


set oReturn = GetValue("SelectionList")


For Each r In oReturn

logmessage r & "is an" & r.Name
logmessage r & "is an" & r.Type

Next

at_frame( Fc - 1, cube.kine.local.roty )

反対にしたい時はこう↓

1 - at_frame( Fc - 1, cube.kine.local.roty )

これはキューブのrotyの値に-1フレーム遅れて付いてくる。
Fcは現在のフレーム数を表す。

cube.kine.local.roty の部分がキーフレームが打たれている上体でないとダメ

ヘビとかのワシャワシャ系にいいかも?

ワシャワシャ系の動き。ムカデの足などはsinを使うと出来る。
カスタムパラメーターをつくりその値を使えば変更が楽。



a * sin ( b * x + c * 1 ) + d


a=ふり幅
b=スピード

c=オフセット。オブジャクト間のずれ
d=オフセット。ディフォルトの位置


xはコントロールオブジェクトのrotの値。パラメーターでも可。cube.rotxなど。


数字の位置は全部の骨に同じ式を入れると同じ動きをする為、誤差を作るためにといれる。次の骨は、その次は

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


CustomPSet.furihaba * sin( CustomPSet.speed * cube1.kine.local.rotz + CustomPSet.offset * 1 ) + CustomPSet.off_defolto

カーブを使ったセットアップをもっと覚えたい。

蛇とか。


あと蛇とか。


骨をカーブにコンストレインポイントでくっつけて、そのカーブを低ポイントのカーブへデフォームバイカーブでくっつけて低カーブでコントロールする。
これだと上下の振りはいいけど左右に振った時にグリンッ!ってねじれる。アップベクターとか使えば平気かな。


あとはパスコンストレインで%をいじってちゃんと並べるとか。こっちの方がカーブ1コですむから軽い?
でも正しい%のとこにおかなくちゃいけないからそれをどうしよう。手で?
スクリプトでカーブの長さを求めて骨の数で割る。
骨の長さがそれぞれ違ったらダメだしょー

あーわかんね。

PoseとOrientationコンストレインのウエイトを下げた時の回転の計算方法が違う。らしい

PoseはクオータニンでOrientationはオイラー

てかPoseはCnsCompを使えば親子付けみたいになるけど、OrientationはX=X,Y=Y,Z=Zとなる。
Poseみたいにやるにはどうすりゃいんだろー


てかクオーターニオンとオイラーってなんだ?
色々探したけど結局分からない。
Itemの中には色々なものが格納されている。位置やタイプなど。でもどんなものが格納されているのかまだわからない・・・


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


set aSel = Application.selection


set oSel = aSel.Item(0)


logmessage oSel.type
logmessage oSel.posx
logmessage oSel.posx.Value

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


'INFO : polymsh
'INFO : cone.kine.local.posx
'INFO : 4.5308357433676

これは二つとも選択したリストを取得しその詳細をログに出すというもの。

上はosel に代入してるが下はsetを使いoSelobjを変数にしている。



上のログ

'INFO : _0ss
'INFO : String


下のログ

'INFO : XSICollection
'INFO : _0ss
'INFO : Object

TypeName に注目する。これは変数に格納されている値の型を調べる際に使う。


上はString(文字列)下はObjectと出た。





dim osel


osel = GetValue("selectionList")

logmessage osel
logmessage TypeName (osel)


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


set oSelobj = GetValue("selectionList")


logmessage oSelobj.type
logmessage oSelobj
logmessage TypeName (oSelobj)

Option Explicit


変数を強制的に宣言するもの。

スクリプトの先頭に書く。


変数を強制的に宣言することで、変数名の入力ミスを防げる。




Option Explicitで変数宣言を強制してるのでDimを消すと

'ERROR : この変数は宣言されていません。: 'oRoot' - [line 8]

と出る。


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



'VBScriptの例
Option Explicit

Main()

sub Main()
dim oModel, oRoot, oGroup, oGroups
set oRoot = ActiveProject.ActiveScene.Root
oRoot.AddGroup
oRoot.AddModel( oRoot.Children )
set oModel = oRoot.FindChild("_3D_Model")

set oGroups = oModel.Groups
LogMessage "Number of Groups : " & oGroups.Count
for each oGroup in oGroups
LogMessage oGroup.Name
next
end sub