2012/07/08

ICE : N Points Constraint

ひさびさの更新ですー。
なかなか忙しくて土日にパソコンに向かうのがおっくうになってきましたw

でも、ICE で N Points Constraintにチャレンジしてみました。

通常のN Points Constraintは、Rotationが無いんですよね。残念です。誠に。
3Pointsにはあるんですけどねー。こいつは便利です。
ですが、Rotationを付けないのには訳があったんですねー。
作ってみると無いのには納得できました。なるほどなぁ(含)

通常、車体の揺れなどを表現するために、傾きをリギングする場合、コンストレイントは、Directionが4つ必要になります。それぞれUpVectorを付けたほうが安全かしら。
3Pointsが4つでも出来ますね。Direction1つと3Pointsが3つでもいいかな。
Blend Weightがそれぞれ、1, 0.5, 0.333333, 0.125と少しずつ傾きを加える方法です。

もし、軸が6本あったら、コンストレイントは、6つ必要になります。
Blend Weightの計算が大変です。

ですので、ICEを使って、自動的に3Pointsを発生させて、傾きの平均を出して、N Pointsを作ろうじゃないかって考えました。

やることは、すべてのポジションから、3Pointsをそれぞれ出して傾きを平均化すればOKです。
(こ・・・言葉にするとこんなに簡単・・・w)

ICE : N Points Constraint

出来たICEツリーは、こちらになりました。

では、解説します。
まずは、やはり3PointsをICEで表現しなきゃですね。

3点からベクトルを2つ取って法線をだす


上の図からポイントからポイントを引いてベクトルを取り、法線を出していきます。

ベクトルとベクトルをCross Productでかませば法線が取れます。
取れたら平均化して、Rotationへ変換すれば、OK!

で、ここがポイントなんですが、このベクトルの順序が逆だと法線が逆向きになります。
なので、Groupを作るときは、時計回りか、もしくは、反時計回りに入れてください。
じゃないと、変になります・・・。

ポジションは、Group登録すべてのポジションの平均化のみでいいですね。
でも、外したほうが使いやすいですかね。

あとは、親の影響を受けさせるために、親のマトリクスをかけて、グローバル変換をします。

これで完成。

意外とスマートに組めました。

これで、100 Points Constraintも現実のものに。
なんてのは、無いでしょう。

ダウンロードも出来ます。2013ですけどいいですか?

N Points Constraint (SI2013 Scene)


2012/04/25

Softimageのワークグループ設定

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が解除されます。

逆に、複数のパスをセットしたいときは
;[セミコロン]で、パスを連結すると複数セットできます。


外部Pythonを使用する際の注意

SIのバージョンを複数インストールしている状態で、外部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を共有している会社さんは、注意が必要ですね。

Perforce: 複数のワークスペースを更新するバッチ

batを叩けば全部更新。 @echo off set P4PORT=x.x.x.x:xxxx set P4USER=user set P4PASSWD=password echo %P4PORT% echo %P4USER% echo %P4PASSWD% echo %P4PAS...