XSI スクリプト
2009年03月28日
選択した頂点1つ毎にクラスターを追加して、
2Dボーンへクラスターコンストレインを結ぶスクリプト
を作ってみました。
所詮マクロの延長なので難しいことはやってないのですが、
頂点のindex番号と頂点位置を取得するのに詰まったので、
備忘録的に投稿。
続きを読む
2009年01月23日
2009年01月18日
このスクリプトはposcnsだろうが、oricnsだろうが
片っ端からコンストレインを逆転するので、少々うっとうしい場面もあります。
というわけで、改造して
必要なコンストレインだけを逆転できるようにしました。
★使い方
オブジェクトを選択して、スクリプトを実行してください。
どのようなコンストレインが掛かっているのかを表示しますので、逆転したいコンストレインにチェックをいれて使用してください。
なおこのオブジェクトは複数オブジェクトに対して
実行することは想定していません。
2008年05月05日
モーションの右パターンと左パターンを用意することがゲームでは多々発生します。
1キャラ丸ごと反転というのは実にめんどくさくてつまらない作業です。
そこで今回はそれを手助けするスクリプトを作りました。
AとBのオブジェクトの位置を入れ替えるスクリプトです。
たとえば右手と左手の入れ替えに威力を発揮します。
右手左手、右足左足。の順番で選択すれば一気に位置を入れ替えることもできます。動物や昆虫などにも有効です。
続きを読む
2007年07月05日
VBScriptハッカーズ・プログラミング
VBScript Hackers Technique Webクライアント・アプリケーションの制作―HTML、HTA、XML、Ajaxを駆使したWeb2.0時代のプログラミングTips
この2つを購入しました。
ハッカーズプログラミングは初級者向けで Hackers Techniqueは中上級者むけでしょうか。
この本でwindowsの操作がほとんどできるようになります。
それどころか、VBS+HTMLを駆使して .hta形式のアプリケーションまで作ることが可能になりました。
ちょっとした社内ツールももりもり作ることが出来ますね。便利便利。
VBSに精通してくるとXSIからwindowsをガンガンいじることが出来るようになってきました。
まあそんなに精通したというわけではなく、未だにエラーが出ずに動いている。
程度ですけど。
2007年06月24日
[改訂版] VBScriptポケットリファレンスを購入しました。
ちょっと前から買っていたんですが予想以上の大活躍。
XSI上からWindowsを操るときに重宝しました。
ただし、VBSがわからないまったくの初心者よりは変数や関数がわかる中級者向けでしょうか?
出力したファイルを指定のフォルダに自動で振り分けたりするエクスポーターを作るときや、windows上でのちょっとしたリネームスクリプトなどを作るときに長方しました。
また、ポケットリファレンスとは直接関係ないですが、社内FTPサーバーを利用して、自動アップデートボタンもつけました。(サーバーにアップデートしたプラグインをローカルフォルダに上書きする程度のもの)
このサイトを参考にして実装しました。
2007年05月13日
リクエスト?があったので答えます
SetViewDisplayMode "wireframe"
これでアクティブビューポートがワイヤフレームに。
"wireframe"のところを、
- "shaded"
- "textured"
などに変更すると、シェーディング、テクスチャーにできます。
これを10キーの
4,5,6
にアサインするとMayaっぽく操れます。
変更できるディスプレイモードは以下の通りあります。
-
bbox: Bounding boxディスプレインモード
-
wireframe: Wireframeディスプレインモード
-
depthcue: Depth-cueディスプレインモード
-
hiddenline: Hidden-lineディスプレインモード
-
constant: Constantディスプレインモード
-
shaded: Shadedディスプレインモード
-
textured: Texturedディスプレインモード
-
texturedecal: Texture decalディスプレインモード
-
realtimeshaders: Real-time shaderディスプレインモード
2007年02月09日
2007年01月25日
ここ2週間ぐらいスクリプト漬けでした。
何をしてたかって言うと、汎用的な人型モデルでの簡単リグマシーン。
前回紹介したカスタムプロパティウィザードを利用してプラグイン形式でバージョン1完成。
ボタン1つで骨、ジオメトリのみの構造から好みにカスタマイズしまくったリグを一発で生成できます。
というか、簡単リグツールなんかどこの会社でもあるよな〜。
なんで今までなかったんだろうか。
スクリプターに頼らず、モーションデザイナーが自分で作れるところに意義ります。迅速カスタマイズ、修正などが可能です。
詳細は企業秘密です。
2007年01月21日
最近モーションの記事書いてないのですが、まあ今回もスクリプトネタです。
カスタムプロパティウィザードというコマンドが便利です。
適当にボタンを設定して、レイアウトを施してくれるコマンドです。
設定するとグア〜〜〜ッとスクリプトを記述してくれて後はFunctinに追加するだけで、あっという間にプラグインが完成します。
スクリプトを編集するときは、ツール開発環境のレイアウトが便利です。
プラグインタブから、自作プラグインを選び右クリック>編集を選ぶと横のスクリプトフィールドに展開してくれます。
そこでスクリプトを保存すると、リアルタイムにプラグインを反映してくれます。
ただし、インターフェースをいじった変更をした場合は、XSIを再起動しなければ適応されません。そこが不便です。
そして適当にプラグインを作ってみました。
続きを読む
2007年01月15日
XSIスクリプトで、VBSを使用しているのですが、突っ込めば突っ込むほど行き詰ってしまいました。
基本的なプログラムの勉強なんかしたこともないので、独学での限界が来たのかも。本を買おうにもXSIに応用できそうな本が見当たらない。
MELがうらやましく見えてしまいます。
2006年09月20日
今回はエクスプレッションです。
意外と簡単ですよ。慣れると複雑なものが組めますが、今回は簡単にプロペラを動かして見ます。
適当に板とトーラスをつくります。
Ctrl+Kと!マークを駆使してプロパティを二つ出します。
続きを読む
2006年09月05日
以前紹介したSOFT IKをアリフィンに適応してみました。
IKをつかったときのびくつきが軽減されているのがわかります。
んー。必須プラグインに採用!!
ただし注意が、
このIK、足に常用は向かないです。
足にSOFT IKを使用すると浮いてしまいます。
通常はOFFにしておいて、キックなど必要なときにONにしてあげると措置が必要です。ON/OFFアニメーションも可能なので非常に便利なプラグインです。
アリフィンに適応してみました。DLしてループ再生に設定すると良くわかります。
Soft IKをアフィリンに適応(QuickTime7推奨)
2006年07月18日
モーション(Fカーブ)を反転するスクリプトがあれば良いなあと思い、
試行錯誤作っているのですが、どうも無理っぽい。
なぜかというとログを吐き出してくれないんですね。
これではスクリプトしたくてもできない。
反転したいフレーム範囲を指定してあげて、それぞれのポーズをひとつひとつ反転していくといったアプローチしかないのか?
でもそれだとカーブのスロープハンドルまで正確に動きとしての反転はできないなあと。
以上の理由によりよっぽどなこと(モーションを大量に短期間で反転する仕事)がない限り、保留にしたいと思います。
もし「俺は知ってるよ」「それならこうすればいい」等
ご存知の方が読者にいましたらお力をお貸しくだされば、幸運です。
みなさんはどのようにしていますでしょうか。
2006年07月11日
やっと完成しました。コツコツとネット探しながらやりました。
参考になったスクリプトはXSIbaseに載っている
Set oReturn = GetValue("SelectionList")
For Each oAnimParam in oReturn(0).AnimatedParameters( siAnySource )
' Do stuff with the animated Params
LogMessage oAnimParam
Next
というスクリプト。格納すべきパラメータをログに流すスクリプトです。
それを改造して。
n = "" 'nは空だと宣言
Set oName = GetValue("SelectionList")
For Each oAnimParam in oName(0).AnimatedParameters( siAnySource )
'LogMessage oAnimParam
oStoreParam = oStoreParam + oAnimParam + "," 'oStoreParamに格納すべきパラメータをコンマ付きで足していく
Next
n =len(oStoreParam) 'oStoreParamの文字数をカウント
oStoreinput = left(oStoreParam, n - 1) '最後の一文字コンマを抜いた文字を抜き出す。このoStoreinputが格納すべきパラメータ
と、できたところで一気に作り上げることができました。
続きを読む
2006年07月04日
XSIの操作で
ブランチ選択(オブジェクト中クリック)
ツリー選択(オブジェクト右クリック)
は、あれど、親以下、子全部を選択する方法が見当たらないんですよね。
リグにいったん全部キーを打ちたいときとか、
グループを作りたいときとか、選択したくなります。
実はあります。
方法は
- 親を選択、
- 選択した名前.*と入力
とするだけです。
2006年06月30日
前回紹介した歩き、走りサポートツールをアップデートしました。
なぜかといいますと、アニメーションミキサーへと格納できないんです。
この問題を打破すべく、
操作される側のエクスプレッションをローカルからグローバルへと変更しました。
コレならエクスプレッションを設定した後、プロットすることによって格納することが可能です。
もしグラフをそのまま移植したい場合は、手動で移植したほうがいいですね。何度もやるようなら、オリジナルスクリプトを組んだほうがいいですけど。続きを読む
2006年06月20日
紹介の前にその原理を紹介します。
コーンとキューブをつくって適当に配置しますそして、Ctrl+Kを使ってコーンとキューブのLocalTransformプロパティを表示させます。
このときウィンドウ閉じるXボタン横のビックリマーク(!)
を押しておくとプロパティを表示し続けることができます。
Ctrl+Kを違うショートカットに割り当てている場合は[Editパネル]>[プロパティ]>[アニメーションプロパティ]
からもLocalTrasformを表示することができます。
コーン位置Xの緑のボタンをキューブ位置Xの緑ボタンへドラッグしますすると、エクスプレッションエディタが開きちょうどX軸だけ位置コンストレインしたようなエクスプレッションを自動的に設定してくれます。
30フレーム遅れて数値を取得するエクスプレッションを設定します。関数ボタンから
[時間]>[フレームオフセット]
を選ぶだけである程度書いてくれます。
<>で囲まれた部分を改造しろということなので.....
続きを読む
2006年06月03日
以前と違うところ
- 選択したオブジェクトの名前のままカーブにする。
- 生成したカーブのピボットを原点ではなくオブジェクトの中心になるようにした。
'=====GameMotionBlog Poly2Crv V1.5========
oName = GetValue( "SelectionList" )
ApplyGenOp "ExtractEdgeLoopOp", "" , oName &".edge[*]", 3, siPersistentOperation, siDeleteGenOpInputs
oName2 = GetValue( "SelectionList" )
SetValue oName2 &".Name", oName
MoveCtr2Vertices oName, False
'===============End script=================
※ちなみに所詮デザイナーが作ったスクリプトなので気休め程度につかってください
関連リンク
2006年05月27日
カスタムパラメータを一回制作してParam1,Param2に数値を入力させ、スクリプト実行後、カスタムパラメータを削除するスクリプトです。
実行してみるとログが1,2,3,4と流れますキャンセルすると1,2.4と流れます。
つまり、OKを押すとログ3が流れるので、ログ3のある行に実行スクリプトを書けばいろいろ使えるというわけです。
ただしアンドゥするとカスタムパラメータが復活するので注意が必要です。
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
SIAddProp "Custom_parameter_list", "Scene_Root", , "template"
SIAddCustomParameter "Scene_Root.template", "Param1", siString
SIAddCustomParameter "Scene_Root.template", "Param2", siString
SetValue "Scene_Root.template.Param1", 256
SetValue "Scene_Root.template.Param2", 64
logmessage "1"
On Error Resume Next
InspectObj "Scene_Root.template",,,4
logmessage "2"
if Err.Number = 0 then
logmessage "3"
End if
logmessage "4"
DeleteObj "Scene_Root.template"
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
人気blogランキングへ
続きを読む
2006年05月12日
前回も紹介した、oName = GetValue( "SelectionList" )をつかって、選択したオブジェクトをログに流す魔法のスクリプトを紹介します。
'/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
oName = GetValue( "SelectionList" )
logmessage oName
'/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
これは覚えておいたほうが良いです。選択したオブジェクトに自作のスクリプトを実行したいときは頭にoName = GetValue( "SelectionList" )とつけて、前回解説した
oName &"*****"のかたちにすれば、完成しちゃいます。
デザイナーの自分にとってはまさに魔法のスクリプト。
logmessage というコマンドはログに流すというコマンドです
logmessage "hogehoge"
と""でくくってやれば""の中のものを忠実に表示します。
応用すると
新規にポリゴン柱をつくり、それを選択した状態で、
logmessage oName &" is selecting"
と入力すればログに
'INFO : cylinder is selecting
と、表示されます。
2006年05月11日
ポリゴンをワイヤフレーム表示してリグを作っていると、マニピュレーター表示の遅延があるというXSI5からの改悪。
だからカーブでリグを作ればいいんですけど、ポリゴンほど柔軟に作れません。
そこで、ポリゴンをカーブ化することで解消します。方法は、Modelモードにして
作成>カーブ>エッジから抽出
このコマンドからポリゴンオブジェクトのエッジをPickしてやれば完成です。
これで簡単に思い通りの形状でカーブを作り出すことが出来ます。
しかしコレだけではゲームモーションブログは終わりません。
スクリプト化します!
続きを読む
2006年04月25日
選択したオブジェクトを軌跡でゴースト表示/非表示するスクリプトです。
いちいち設定するのがめんどくさいので作りました。
軌跡のゴースト表示は重要です。mayaにもMAXにも同様の機能があります。ゴースト機能はXSIが一番性能がいいのではないでしょうか。
ゲームモーションにとっての軌跡の重要性、それはゲーム中のエフェクトにあります。
映画やアニメとはちがい、リアルタイムで斬撃などのエフェクトをモーションを利用して制作するからです。軌跡が汚いとゲーム中の汚いエフェクトしか表示されません。
コレとかいい例じゃないでしょうか。ソウルキャリバー3のスクリーンショットです。
ソウルキャリバー3の公式サイト
続きを読む
2006年04月16日
モーションに限らず、作業効率を上げることは重要です。幸いほとんどの3DCGソフトにはスクリプト機能がついています。MayaならMELが、XSIならVBやJavaScript、MAXならMAX Script等です。コレを使わない手はありません。ここではXSIのスクリプト機能について説明します。適当にXSIを操作してScript Editorを開くと上の段にログが流れます。このログを下の段入力フィールドにコピペするだけで、ログと同じことが再現できるようになります。
たとえばコントローラー(リグ)のセットアップをログ記録するだけで、違うキャラにもセットアップを行うことが可能になるわけです。大量のキャラクタセットアップもクリック一発で可能になります。
スクリプトは確かにとっつきにくく、難しい処理ですが、楽をするためには避けて通れないステップでしょう。
今回はセットバリューコマンドを伝授します
(例)
SetValue "PlayControl.Out", 100
ScriptEditorに上記スクリプトをコピペして実行すると表示フレームが100フレームになります。30フレームや60フレームにしたりして改造してみましょう。
SetValueを宣言し、セットしたい命令をダブルクオーテーションで囲み、コンマの後に数値を入力するとほかのスクリプトも自作することが出来ます。
ここで躓くのがダブルクオーテーションで囲まれた部分がわからないことです。これを探すにはいつも通りの方法で数値を入力し、ログを参照するとコマンドを知ることが出来ます。ダブルクオーテーションで囲まれている部分をコピペして自作してみましょう。
たとえばポリゴンキューブの長さの数値を変更してみる
SetKey "cube.cube.length", 1, 9.225
とログに表示される
"cube.cube.length"をぬきだし
SetValue "cube.cube.length" , 30
と入力してみる
すると長さが30に変更されます。








