SoftimageのWorkgroupの設定は、とても便利ですね。
たくさんの人とプラグイン状況が共有出来る素晴らしいものです。
ですが、プラグインを入れたり、バージョンアップなどで新規に設定したりすると、SIが、クラッシュして立ち上がらなくなる場合がしばしば・・・。
そんなときは、
C:\Users\[User]\Autodesk\Softimage_2013
フォルダをリネームなどして対処していましたが、設定がデフォルトになってしまうので、2つほどやり方を発見したのでメモです。
1つ目。
まず、コマンドからパスをクリーンアップする方法。
スタートメニュー -> Autodesk -> Autodesk Softimage 20XX (XX-bit) -> Command Prompt
cmdを立ち上げて、コマンド
xsi -w
を入力すると、Workgroupを未登録の状態にしてくれます。
本来、-wの後は、Workgroupのパスを入れて設定のために使うようですが、入力しないことで未登録に出来ます。
2つ目。
ダイレクトに、プリファレンスファイルをいじる方法。
C:\Users\[User]\Autodesk\Softimage_2013\Data\Preferences\default.xsipref
をメモ帳などで開きます。
その中の
data_management.workgroup_appl_path
という部分のパスを消去すれば、Workgroupが解除されます。
逆に、複数のパスをセットしたいときは
;[セミコロン]で、パスを連結すると複数セットできます。
A-s-C-e-n-S-i-o-N
SOFTIMAGE|XSIの気になった機能の詮索、スクリプトの羅列、質問に答えりした記録
とてもステキな映像を見つけた的なblog
2012/04/25
外部Pythonを使用する際の注意
0
comment
| リアクション: |
SIのバージョンを複数インストールしている状態で、外部Pythonを使用しているときに起こる問題です。
SIを起動するとPythonがらみで、ある問題が発生することがあります。
新機能として搭載されたCrowdFXですが、PluginがPythonで書かれていることもあり、Pythonが正しい状態で無いと、エラーでメニューが表示されないことが起きてしまいます。
その場合、外部Pythonの下記のフォルダを消去すると問題が解消します。
C:\Python27\Lib\site-packages\win32com\gen_py
(Pythonのバージョンが2.7の場合です)
この情報はこちらを参照してください。
Errors after re-installation
http://softimage.wiki.softimage.com/index.php?title=Python_(XSISDK)&redirect=no
SIにインストールされた、Pythonを使う際、問題は出ないのですが、ScriptのPreferenceの
Use Python Installed with Softimage (Windows Only)
のチェックがオフの場合、SIを初めて立ち上げたときのみ、先程のフォルダにSIのPythonにおける定数のキャッシュを作成します。
from siutils import C # win32com.client.constants
C.siNullPrimType
こんな感じでsiTypeの定数を使う時のキャッシュですね。
このフォルダは、無くても動作するようですので、消してしまって大丈夫です。
このキャッシュを作る仕様は、どうやら、SI2013より、SI2010のほうが強いみたいで、2010を立ち上げると、2010用になり、その後2013を立ち上げても、ファイルが存在するので、更新はしないようです。
ですので、エラーの内容は、定数の値が取得出来ないぜ。と言っているようです。
サーバーなどで、Pythonを共有している会社さんは、注意が必要ですね。
SIを起動するとPythonがらみで、ある問題が発生することがあります。
# ERROR : Traceback (most recent call last):
# File "<:script 2="" block="">", line 29, in XSILoadPlugin
# in_reg.RegisterEvent("UpdateRigProxyHierarchy",C.siOnEndCommand)
# File "C:\Python27\lib\site-packages\win32com\client\__init__.py",line 170, in __getattr__
# raise AttributeError(a)
# AttributeError: siOnEndCommand
# - [line 28 in C:\Program Files\Autodesk\Softimage 2013\Addons\CrowdFX\Application\Plugins\CrowdFX_Plugin.py]
こちらは、SI2010を立ち上げた後、SI2013を立ち上げたときのエラーメッセージです。
新機能として搭載されたCrowdFXですが、PluginがPythonで書かれていることもあり、Pythonが正しい状態で無いと、エラーでメニューが表示されないことが起きてしまいます。
その場合、外部Pythonの下記のフォルダを消去すると問題が解消します。
C:\Python27\Lib\site-packages\win32com\gen_py
(Pythonのバージョンが2.7の場合です)
この情報はこちらを参照してください。
Errors after re-installation
http://softimage.wiki.softimage.com/index.php?title=Python_(XSISDK)&redirect=no
SIにインストールされた、Pythonを使う際、問題は出ないのですが、ScriptのPreferenceの
Use Python Installed with Softimage (Windows Only)
のチェックがオフの場合、SIを初めて立ち上げたときのみ、先程のフォルダにSIのPythonにおける定数のキャッシュを作成します。
from siutils import C # win32com.client.constants
C.siNullPrimType
こんな感じでsiTypeの定数を使う時のキャッシュですね。
このフォルダは、無くても動作するようですので、消してしまって大丈夫です。
このキャッシュを作る仕様は、どうやら、SI2013より、SI2010のほうが強いみたいで、2010を立ち上げると、2010用になり、その後2013を立ち上げても、ファイルが存在するので、更新はしないようです。
ですので、エラーの内容は、定数の値が取得出来ないぜ。と言っているようです。
サーバーなどで、Pythonを共有している会社さんは、注意が必要ですね。
label:
Manegement,
Python
2011/12/11
カスタムパラメータのパラメータソート
0
comment
| リアクション: |
少し前Twitterで、話題になったカスタムパラメータのパラメータソートを作ってみました。
実際には、Softimageでは、パラメータの順番を変えることは出来ないので、カスタムパラメータの全情報を取得し、マーキングした順番で新たにカスタムパラメータを作り直すというものです。
SI2012+
CustomParameterSort.pys
(2011.12.17 パラメータにアニメーションが入っていてもエラーが出ないようになりました)
今現在、カスタムパラメータとヌルに、エクスプレッションやプロクシパラメータが設定してあります。
実際には、Softimageでは、パラメータの順番を変えることは出来ないので、カスタムパラメータの全情報を取得し、マーキングした順番で新たにカスタムパラメータを作り直すというものです。
SI2012+
CustomParameterSort.pys
(2011.12.17 パラメータにアニメーションが入っていてもエラーが出ないようになりました)
![]() |
| Scene Explorer |
![]() |
| Expression & Proxy |
内容は、このように、お互いがお互いをエクスプレッションしている状態です。
![]() |
| パラメータをソートしたい順に選択 |
このスクリプトを実行する前に、カスタムパラメータを選択し、並べ替えたい順に、パラメータをマーキングしていきます。
そして、スクリプトを実行します。
![]() |
| 並べ終わった結果 |
結果、順番が変わったカスタムパラメータが新しく作られます。
エクスプレッションとプロキシの情報をキープします。
ただ、ひとつ弱点は、このカスタムパラメータから、別のカスタムパラメータやキャラクターキーセットにプロキシしているものに関しては、情報が取得出来ず、消えてしまう問題があります・・・。
コレに関しては、シーンの全パラメータ情報を見て、取得してやらないと方法が無いように見えるので、今回は外してあります。
undoが出来るようにしてあるので、安心して使えるかと思います。
今回勉強出来たなーと思うのは、XML情報の取得です。
このパラメータへ、どのオブジェクトが見ているかの情報は、XMLで取得するしかなく、要素を取り出すのに少々苦労しました。
Pythonのモジュールを使っても良かったんですが、VBSやJScriptでも同じように出来るやり方で作ってます。
興味のある方は、中身を覗いてみてくださいね。
ではでは。
label:
Manegement,
Python
2011/11/29
ICE : 配列とセットの違いを理解する
0
comment
| リアクション: |
ICEを構築していると、いろいろな壁にぶち当たります。
そんな、そびえ立つ大きな壁のひとつとして、配列とセットという概念があります。
配列とセットの違いは、ICEを攻略する上で、非常に重要な概念となるので、覚えておく必要があります。
Get -> Primitive -> Point Cloud -> Grid
から、3x3のPoint Cloud Gridを作成して、以下のICE Treeを繋ぎます。
上の黄緑の流れは、2012から搭載された、Build Array from Setノードを使用しています。
内部的には、セットから配列へ変換するノードです。
結果、配列で表示されています。
対して、下の黄色の流れは、普通にPointPositionを表示しています。
こちらは、セットです。
それぞれをカスタムICEアトリビュートのself.a、self.bと、二つにデータを格納しています。
データを確認したいときは、ノードの線を右クリックして、Show Valuesでのプロパティの設定を開いてOKボタンで確認します。
ですが、今回のポイントは、このプロパティの一番下の文章です。
Labelに#を入れると、IDで置換します。
となっていますので
#:
とLabelに入力したものが、上の図です。
黄緑の配列の値は、こんな感じで表示。
[ ] の中の数字が増えていっています。
0[0]:-4, 0, -4
0[1]:-4, 0, 0
0[2]:-4, 0, 4
.
.
.
一方黄色のセットの表示は、
0: -4, 0, -4
1:-4, 0, 0
2:-4, 0, 4
.
.
.
そんな、そびえ立つ大きな壁のひとつとして、配列とセットという概念があります。
配列とセットの違いは、ICEを攻略する上で、非常に重要な概念となるので、覚えておく必要があります。
![]() |
| PointCloud Grid 3x3 |
から、3x3のPoint Cloud Gridを作成して、以下のICE Treeを繋ぎます。
上の黄緑の流れは、2012から搭載された、Build Array from Setノードを使用しています。
内部的には、セットから配列へ変換するノードです。
結果、配列で表示されています。
対して、下の黄色の流れは、普通にPointPositionを表示しています。
こちらは、セットです。
それぞれをカスタムICEアトリビュートのself.a、self.bと、二つにデータを格納しています。
![]() |
| Show Valuesのポイント |
ですが、今回のポイントは、このプロパティの一番下の文章です。
Labelに#を入れると、IDで置換します。
となっていますので
#:
とLabelに入力したものが、上の図です。
黄緑の配列の値は、こんな感じで表示。
[ ] の中の数字が増えていっています。
0[0]:-4, 0, -4
0[1]:-4, 0, 0
0[2]:-4, 0, 4
.
.
.
一方黄色のセットの表示は、
0: -4, 0, -4
1:-4, 0, 0
2:-4, 0, 4
.
.
.
と、[ ]が無い状態ですが、一番左の数字が増えていっています。
この違いは、一体なんなのか。
これを理解するには、IDという存在がキーポイントとなります。IDというのは、オブジェクトのポイントなどの頂点番号の事です。
3x3のPoint Cloud Gridは、9個のポイントから成り立っています。その頂点番号は
0, 1, 2, 3, 4, 5, 6, 7, 8
といったように、0から始まる番号がポイントひとつひとつに割り振られています。
試しに右上のポイントをタグ選択して、Selectを見てみます。
6番が選択されています。丁度、黄色のセットの表示では
6:4, 0, -4
となっており、6つ目の要素であること確認出来ます。
ポジションの値からも確認することが出来ますね。
つまり、セットとは、IDというオブジェクトの頂点番号とセットのデータということになります。
一方、配列のほうは、IDが0の場所に、9個のデータが一気に格納されています。
ここが決定的に違うところなのです。
詳しく見ていきましょう。
![]() |
| PointPositionへ接続 配列は挿せず、セットは挿せる |
上のツリーから、Set Dataに Self.PointPositionを追加し、そこへ、配列のaというデータと、セットのbというデータが挿せるかどうか、試してみます。
IDを持たない配列aの場合、PointPositionへ接続しようとしても、拒否されてしまいます。
PointPositionは、IDを必要とするICEアトリビュートのようです。
変わって、セットbの場合は、ID情報があるので、素直に接続することが出来ます。
![]() |
| 配列にIDを割り振りPointPositionへ接続 |
配列aのようなデータをPointPositionへ接続するには、IDを割り振るという作業が必要です。
Get Point ID と Select in Array ノードをこのように繋げば、PointPositionへ挿すことが出来ます。
このコンボは、非常に良く使うので、覚えておいて損は無いでしょう。
さらに、詳しく見ていきましょう。
![]() |
| 違う大きさのCubeA、B |
良くある問題で、このオブジェクトと同じ形状にしたいのになんで接続出来ないんだろう・・・?
ということが、たびたびあるかと思います。
違うオブジェクトからデータを持ってきたときに、接続出来ないことが良くあります。
これも実は、IDの問題なのです。
![]() |
| 別のPointPositionのデータが繋がらない |
Bの形状を、Aと同じにしたい。と考えた場合、BにICE Treeを作り、誰でも最初はこういう風に挿そうと思うものです。
今まで説明してきたセットのあり方を考えると接続出来るのでは?と不思議に思うのですが、実は、IDというものは、オブジェクトごとに固有に持っているもののようです。
この状態ですと、AのIDを持ったPointPositionのデータを、BのIDのPointPositionへ無理やり持ってきているようなものです。
ですので、考え方として、AのPointPositionを、一度IDを持たない配列データにし、BのIDを割り振り直し、BのPointPositionへ挿すという風にします。
![]() |
| Aのセットを配列にし、BのIDを割り振る |
Build Array from Set で、配列データへ変換した後、Get Point ID と Select in Array ノードで、BオブジェクトのIDを割り振るといったことをすれば、挿せるようになります。
このように、配列とセットを理解するだけで、かなり出来ないことが出来るようになるはずです。
実を言う僕も、触り始めて半年くらい良く分かりませんでした・・・。
他人が繋いでいるのをなんとなく見ていて、「ああ、なるほど!こういう風にやればさせるのか!」と思っていたのですが、なんで?というのが、拭いきれませんでした。
完全に理解できたのは、Show Valuesで、Labelに#を入れて見た瞬間でした。
なるほどなぁ。こう違うんだ。
とね。
読んでくれてありがとう。
登録:
投稿 (Atom)











