hibitekitou
Alt教に入信か
xsi |2014-03-30
将来maya様に移行する時、SI風のオペレーションをmaya様に何とか実装するのか、それともその時に備えて今からmaya様のルールでSIを操作するのか、迷いどころです。後者を選ぶ時、それはAlt教に入信するという事なのです。しかし、ビューポートオペレーション(ドリー、回転)はAltを使っての操作という事は分かるのだけど、その他ショートカットがどうなるのか、さっぱりなのです。
と言うのを思ったのはですね、先日ちょいとParallels上のSoftimageをmaya風のキーマップに設定しててそのまま忘れて今さっき起動したら、maya風の操作がさっぱりで、なんだかいろいろ困ったからなのですよ。

コンポーネントの選択はどうやるのですか?というものですよ。
ていうか、maya様使ってコンポーネントのセレクトツールにする時って右クリックでメニューをだして切り替えている印象があるんだが、ショートカットは特に設定されていないのか?
とか何とか非常に苦労するような気がします。ていうか間違いなく苦労するな。苦労するぐらいなら、maya様じゃなくてhoudiniとかに行きたいな。でもそれは仕事との事情的に許されないだろうな…………………………鬱ですよ。
基本的なところはAlt教に入信しつつ、mayaにもカスタムな設定をしつつSI側にも同じ設定を適用というのをちまちまとやっていくしかないですか。ここいらへん(Suite UsersNotes [ダイキンCOMTEC])を参考にちまちまやりますか。あー、面倒くせ。恨むぞAutodesk。
と言うのを思ったのはですね、先日ちょいとParallels上のSoftimageをmaya風のキーマップに設定しててそのまま忘れて今さっき起動したら、maya風の操作がさっぱりで、なんだかいろいろ困ったからなのですよ。

コンポーネントの選択はどうやるのですか?というものですよ。
ていうか、maya様使ってコンポーネントのセレクトツールにする時って右クリックでメニューをだして切り替えている印象があるんだが、ショートカットは特に設定されていないのか?
とか何とか非常に苦労するような気がします。ていうか間違いなく苦労するな。苦労するぐらいなら、maya様じゃなくてhoudiniとかに行きたいな。でもそれは仕事との事情的に許されないだろうな…………………………鬱ですよ。
基本的なところはAlt教に入信しつつ、mayaにもカスタムな設定をしつつSI側にも同じ設定を適用というのをちまちまとやっていくしかないですか。ここいらへん(Suite UsersNotes [ダイキンCOMTEC])を参考にちまちまやりますか。あー、面倒くせ。恨むぞAutodesk。
コメント ( 0 )|Trackback ( )
それでも更新されてるのがうれしいですね。
xsi |2014-03-11

emTools 1.93 - New Stuff and Liquid Particle Shaper [Vimeo]
emTools。無料のありがたいICEのツール集。Softimageへのモチベーションをうしなわず、アップデート来ました。ありがとう。
この新しいコンパウンド自体は別のツールに対する何かになるみたいですけど、これだけでもちょっと面白いですね。
別のツールに対する何かってのは
RnD: Weighted Principal Component Analysis (implemented in emTools) [Vimeo]
RnD: Weighted Principal Component Analysis (final version in emTools + polygonizer test using emTopolizer2) [Vimeo]
こちらな感じすか?
for softimageのあとは、for mayaやfor fabric engineのemPolygonizerに搭載してくるみたいですけど、for macもよろしくです(^^)
コメント ( 0 )|Trackback ( )
Softimageに死の宣告
xsi |2014-03-05
Softimage の最終リリースについてのお知らせに関する FAQ [Autodesk] PDFへの直リン
Softimage 2015が最終バージョンになること。サポートは2016年4月までであること。
既存サブスクリプションユーザはMayaかMaxへの移行オプションを無償で用意すること。
その移行期間は2年間でこの間はMayaかMaxとSoftimageを起動できるライセンスになること。
Entertainment Creation Suite PremiumユーザはUltimateに自動的に移行となること。
…
…
…
いやもぉ、この時がくると、徐々に覚悟させるような空気にAutodeskは持っていってくれていたけどさ。ふざけんなって思いますよ。死ねならむしろ(自主規制)
ということで、Softimageは今年4月にリリースされる物が最後です。2015の新機能も見れるようになっていますが、そんなことを見たあとなので心が踊るものはありません(そもそも心躍る新機能は含まれていませんけど)。
mayaかmaxへの移行を選んだ場合、2016年4月以降に発行されるライセンスでのSoftimageの扱いはどうなるんでしょうね?
僕個人でいえばECSPからECSUに移行となりますけど、max使えるようになってもなぁってのが正直なところ。使う気は全くないんですよね。
なんか将来的にサブスク契約切っちゃうかもしんないなぁ…。
これに乗じてHoudiniの維持費が安くなりませんかね。維持費がSoftimage並になるなら、ICEを使っていたSIユーザーが流れ込んでくるんじゃないかと思うんだけど、まぁ流れ込んできたとしても大した人数じゃないからそれを見越して安くする動機にはなりませんか、そうですか。
Softimage 2015が最終バージョンになること。サポートは2016年4月までであること。
既存サブスクリプションユーザはMayaかMaxへの移行オプションを無償で用意すること。
その移行期間は2年間でこの間はMayaかMaxとSoftimageを起動できるライセンスになること。
Entertainment Creation Suite PremiumユーザはUltimateに自動的に移行となること。
…
…
…
いやもぉ、この時がくると、徐々に覚悟させるような空気にAutodeskは持っていってくれていたけどさ。ふざけんなって思いますよ。死ねならむしろ(自主規制)
ということで、Softimageは今年4月にリリースされる物が最後です。2015の新機能も見れるようになっていますが、そんなことを見たあとなので心が踊るものはありません(そもそも心躍る新機能は含まれていませんけど)。
mayaかmaxへの移行を選んだ場合、2016年4月以降に発行されるライセンスでのSoftimageの扱いはどうなるんでしょうね?
僕個人でいえばECSPからECSUに移行となりますけど、max使えるようになってもなぁってのが正直なところ。使う気は全くないんですよね。
なんか将来的にサブスク契約切っちゃうかもしんないなぁ…。
これに乗じてHoudiniの維持費が安くなりませんかね。維持費がSoftimage並になるなら、ICEを使っていたSIユーザーが流れ込んでくるんじゃないかと思うんだけど、まぁ流れ込んできたとしても大した人数じゃないからそれを見越して安くする動機にはなりませんか、そうですか。
コメント ( 2 )|Trackback ( )
Softimageでのワイヤーフレームレンダリング
xsi |2014-02-08

SIでワイヤーフレームのレンダリングを行おうとする時、ちょっと困った気分になると思います。ビューポーとキャプチャをしてみたり、リアルタイムレンダラーでやってみたり。けれども、mentalrayには該当する項目はありません。お金をかけれるなら、Arnoldを入れちゃうといいでしょう。そのものずばりなシェーダがあるようですから。
で、mentalrayには無いと描きましたけど、SDKのサンプルとしてシェーダが納められてはいるようです。SDKの中のワークグループを指定するとそれをシェーダとして選ぶことが出来ますが、正常に動きません。コードのサンプルも入っているんで、コンパイルすることの出来る環境を持っているなら、動作するシェーダを作成可能かもしれませんね。でも、その環境を持っていないので、それは諦めます。
すると、Toonを利用する事になります。このやり方、Twitterで@JunkiTheJunkieさんに教えてもらって、ほぅ、となりました。感謝です。
やり方は簡単で、Toon_HostのSeams→Unblendのgroupにポリゴンごとに違う値を入れてやる、という物です。違う値を入れるに当たって、テクスチャを利用する(そのために適切なUVを設定しておく)方法を教えてもらいました。指定した所にインクラインを引くための機能を利用しているわけですね。
ただ、テクスチャを用意したりUVを設定してやるのは面倒だなぁと思いまして…(^^;。 (UVについてはスクリプトを走らせるのかな)
ワイヤーフレームとしてだす場合には、全てのポリゴンが違う整数値になるようにしてやればいいわけですから、ICEのアトリビュートで指定できないかと考えました。
非常に簡単にできましたよ。
とりあえず、普通にインクラインが出るような設定をしておきます。CameraにはTook_Ink_Lensシェーダを適用しておくし、オブジェクトにのマテリアルにはToon_Hostシェーダを設定しておきます。

その上で、ワイヤーフレームを出力したいオブジェクトに以下のICE Treeを構築します。NodeToPolygonで得られるノードごとのポリゴンインデックスをカスタムアトリビュートとして記録しているだけですね。ただし、単なるインデックスではなく、ちょっと数字を足して大きめの値で記録しています。

ちなみに、記録したカスタムアトリビュートの名前はPolyIDとしています。
んで、その値をマテリアルに設定したToon_Hostのunblend_groupにぶち込んでやります。unblend_groupに0を入れるとこの機能は働かないそうなので、0を入れないようにICE Treeで大きめの値を足しました。

これだけ。難点はオブジェクト全てにこの設定をせねばならないと言うことですけど、そこはまぁ、うまくやってくださいw
なお、ここではNodeToPolygonを使いましたけど、PolygonIndexでもいけそうな感じです。Nodeを使ったのは、UVも操作しようと考えたからで、既存のUVを操作して、ポリゴンごとに違う色をというような効果を狙った物を作成可能です。

ICE Treeをこんな風に設定します。既存のTexture Projectionにたいして値をいじっている形になります。その結果、UVはポリゴンごとにグリッド状に並びました。

で、テクスチャの色を流し込みます。SIデフォルトのテクスチャを差し込んでます。

ということで、レンダリングするとこんな感じ。

まぁそんなわけで、ワイヤーフレームだしが必要な時にこのやり方を今後考慮してみようと思います。
コメント ( 0 )|Trackback ( )
Closest Location の基準となる座標系
xsi |2014-01-15
ちょっと疑問に思ったので検証です。
以下のようなシーン構造です。

Parentというヌルの子供にNullとGridがいます。それで、この3つのオブジェクトに同じICE Treeを設定しました。Nullに一番近いGrid上の位置を取得しようとしています。しかして結果は、上の図のようにすべて違う値が出力されてきています。
ということで仮説。Closest Locationで評価される座標系は、ICE Treeが設定されたオブジェクトのオブジェクト空間(ローカル座標)なんじゃね?
だから、ICE Treeが親のParentに設定されている場合、正しくはNullの座標を親のParentの座標系で評価してやり、その上でグローバル座標系の値に戻してやるという処理をせねばならない。ということなんじゃないかと思っているのですが、さてさて。

以下のようなシーン構造です。

Parentというヌルの子供にNullとGridがいます。それで、この3つのオブジェクトに同じICE Treeを設定しました。Nullに一番近いGrid上の位置を取得しようとしています。しかして結果は、上の図のようにすべて違う値が出力されてきています。
ということで仮説。Closest Locationで評価される座標系は、ICE Treeが設定されたオブジェクトのオブジェクト空間(ローカル座標)なんじゃね?
だから、ICE Treeが親のParentに設定されている場合、正しくはNullの座標を親のParentの座標系で評価してやり、その上でグローバル座標系の値に戻してやるという処理をせねばならない。ということなんじゃないかと思っているのですが、さてさて。

コメント ( 0 )|Trackback ( )
メモ:ストランドの向きを法線向きに
xsi |2013-12-25
シミュレートする必要もないしめり込み上等な感じの場合、こんな具合かなぁってやり方メモっす。完成予定図はこんな感じ。

Create Strandでストランドを生やしてTurbulize Strandでうねっとさせているだけの物です。
んじゃ、順番に。とりあえずこんな形のメッシュを用意してそこからパーティクルをエミットしております。


エミットしたパーティクルにたいしてそのままストランドを生やしてもいいのですが、一味加えてます。emToolsのEqual Distribution on Surfaceでポイントを何となく均等にばらまく感じにしてみました。

で、ストランドを生やします。

こんな感じで、すべてのストランドの向きが一方向にそろってしまうので、これをストランドの根元のメッシュの法線方向にしてやりたいというのがミソといえばミソですね。たいしたことはしていません。

法線の向きに (0, 1, 0) の向きのベクトルを回転させるRotationを取得し、それをStrand Positionに適用しているだけです。

後はこの結果に対してTrubulize Strandを適用してぐにゃっとさせるだけ…なんですけど、このコンパウンドを適用しただけだとみんな上向きになっちゃうんですよね。


というわけでコンパウンドの中身を一部書き換えてやります。もともとはこんな感じ。

その中のStrandCeneterをStrandPositionに変更してやります。


後は微調整を加えて完成。たとえば、下図はStrandの長さをちょっと調整している図です。


ざっくりとうねうねしていればいいのなら、これでいいのかなぁって所です、はい。
コリジョンとかちゃんとし出すときっと大変ですから、もっと高度なチュートリアルやら毛用の仕組みを取り入れるやらすべきでしょうな。
mentalrayのレンズフレアを使ってみたかっただけです…

Create Strandでストランドを生やしてTurbulize Strandでうねっとさせているだけの物です。
んじゃ、順番に。とりあえずこんな形のメッシュを用意してそこからパーティクルをエミットしております。


エミットしたパーティクルにたいしてそのままストランドを生やしてもいいのですが、一味加えてます。emToolsのEqual Distribution on Surfaceでポイントを何となく均等にばらまく感じにしてみました。

で、ストランドを生やします。

こんな感じで、すべてのストランドの向きが一方向にそろってしまうので、これをストランドの根元のメッシュの法線方向にしてやりたいというのがミソといえばミソですね。たいしたことはしていません。

法線の向きに (0, 1, 0) の向きのベクトルを回転させるRotationを取得し、それをStrand Positionに適用しているだけです。

後はこの結果に対してTrubulize Strandを適用してぐにゃっとさせるだけ…なんですけど、このコンパウンドを適用しただけだとみんな上向きになっちゃうんですよね。


というわけでコンパウンドの中身を一部書き換えてやります。もともとはこんな感じ。

その中のStrandCeneterをStrandPositionに変更してやります。


後は微調整を加えて完成。たとえば、下図はStrandの長さをちょっと調整している図です。


ざっくりとうねうねしていればいいのなら、これでいいのかなぁって所です、はい。
コリジョンとかちゃんとし出すときっと大変ですから、もっと高度なチュートリアルやら毛用の仕組みを取り入れるやらすべきでしょうな。
mentalrayのレンズフレアを使ってみたかっただけです…
コメント ( 0 )|Trackback ( )
えせフルイド
xsi |2013-11-10
DIY fluid solver in softimage ice - from matches and acorns part 2 DRUNKEN MASTER [vimeo]
このチュートリアル。なかなかに刺激を受けました。
流体の渦の挙動をなんちゃってで作ってみましたってモノと理解していますけど、なるほどなぁ、って思った次第。
考え方としては、2Dのグリッドの各位置での渦の力を設定し、パーティクルが自身の位置から一番近いグリッドの位置の持つ渦の力を自身に適用する、というものですね。渦の力を出すための渦の中心位置を、別のパーティクル位置から参照しています。
これを3次元に拡張できないかなって思ってちょっとやってみました。

考え方としては、外積二回かますことで渦の回転の向きを得ようと言うものです。

上図のパーティクルPcが渦の中心位置を指定するために発生させているパーティクルの一つです。
Pcの影響を受ける位置Pでの渦の向きを出そうとする時、とりあえずY軸方向に移動するパーティクルに流体っぽい挙動を与えようとしているために、XZ平面に平行でPcを通る軸を中心に回転する方向を得るにはどうするか、と考えます。
その軸は上図の水色のベクトルで、Y軸からPcへのベクトル(オレンジ)とY軸方向のベクトル(水色)の外積で得られるとします(軸の向きはワールドのY軸中心の円周方向になるけど、この円周の中心軸は任意の位置に設定できるようにした方が良いですね。でないと常にワールドの中心にパーティクルを発生させるという事になるから)。
これを軸に回転する向きが黄色のベクトルというわけですが、これはPからPcへのベクトル(紫色)と軸となるベクトルとの外積で得られるものとします。上図の外積の結果得られるはずのベクトルの向きは適当です。2つのベクトルの外積で出てくるベクトルの向きは、両ベクトルに垂直である、って所だけを考えて書いた図で、向きまでは意識しておりません(苦笑)
このベクトルの大きさはPからPcまでの距離から指定してやり、それをPに記録しておきます。
後はそれを力としてとりだせばよいわけで、まぁ、何となくそれっぽい動きは作れそうです。でもあくまでもそれほどレベルの高くない「それっぽい」なので、これの挙動を詰めてより精度の高い「それっぽい」にするのはなかなかに大変じゃないかなぁって思ったり。その苦労をするなら、Slipstream [Exocortex] とかemFluid4 [Mootzoid] を入手した方がよいやもっすな。ツールを入れたとして、それでより精度の良い「それっぽい」を作るために相当苦労するだろうけど、苦労の結果確実に作れる可能性はこっちの方がたかいんじゃなかろうかw
もちろん、だからといって追加コスト無しにこれを実現する最初にリンクしたチュートリアルの価値はいささかも減じるものではありませんけど。
このチュートリアル。なかなかに刺激を受けました。
流体の渦の挙動をなんちゃってで作ってみましたってモノと理解していますけど、なるほどなぁ、って思った次第。
考え方としては、2Dのグリッドの各位置での渦の力を設定し、パーティクルが自身の位置から一番近いグリッドの位置の持つ渦の力を自身に適用する、というものですね。渦の力を出すための渦の中心位置を、別のパーティクル位置から参照しています。
これを3次元に拡張できないかなって思ってちょっとやってみました。

考え方としては、外積二回かますことで渦の回転の向きを得ようと言うものです。

上図のパーティクルPcが渦の中心位置を指定するために発生させているパーティクルの一つです。
Pcの影響を受ける位置Pでの渦の向きを出そうとする時、とりあえずY軸方向に移動するパーティクルに流体っぽい挙動を与えようとしているために、XZ平面に平行でPcを通る軸を中心に回転する方向を得るにはどうするか、と考えます。
その軸は上図の水色のベクトルで、Y軸からPcへのベクトル(オレンジ)とY軸方向のベクトル(水色)の外積で得られるとします(軸の向きはワールドのY軸中心の円周方向になるけど、この円周の中心軸は任意の位置に設定できるようにした方が良いですね。でないと常にワールドの中心にパーティクルを発生させるという事になるから)。
これを軸に回転する向きが黄色のベクトルというわけですが、これはPからPcへのベクトル(紫色)と軸となるベクトルとの外積で得られるものとします。上図の外積の結果得られるはずのベクトルの向きは適当です。2つのベクトルの外積で出てくるベクトルの向きは、両ベクトルに垂直である、って所だけを考えて書いた図で、向きまでは意識しておりません(苦笑)
このベクトルの大きさはPからPcまでの距離から指定してやり、それをPに記録しておきます。
後はそれを力としてとりだせばよいわけで、まぁ、何となくそれっぽい動きは作れそうです。でもあくまでもそれほどレベルの高くない「それっぽい」なので、これの挙動を詰めてより精度の高い「それっぽい」にするのはなかなかに大変じゃないかなぁって思ったり。その苦労をするなら、Slipstream [Exocortex] とかemFluid4 [Mootzoid] を入手した方がよいやもっすな。ツールを入れたとして、それでより精度の良い「それっぽい」を作るために相当苦労するだろうけど、苦労の結果確実に作れる可能性はこっちの方がたかいんじゃなかろうかw
もちろん、だからといって追加コスト無しにこれを実現する最初にリンクしたチュートリアルの価値はいささかも減じるものではありませんけど。
コメント ( 0 )|Trackback ( )
Sort Array with Key
xsi |2013-11-03
ICEのSort Array with Keyノードを見て、こんな関数はPythonに用意されていないのか?ってお話。

このノードは、キーとなる配列を使って配列をソートするというものっすね。マニュアルには
たとえば [100, 200, 300, 400] という配列があったとして、それを [2,3,1,0] をキーとして並べ替えるとします。
[ 2,3,1,0 ] を並べ替えると [0, 1, 2, 3]になります。
言葉で書くと、1つ目の要素(2)は3番目に、2つ目の要素(3)は4番目に、3つ目の要素(1)は2番目に、4つ目の要素(0)は1番目にそれぞれ変更されたわけです。これと同様の変更を [100, 200, 300, 400] にも施しましょう、というのがこのノードの狙いで、けっこう便利に使っております。
んで、同じことをPythonでどう書くのだろうと思ったりしたわけですよ。調べてみると、以下のような書いてやればよいようです。
a = [100, 200, 300, 400]
b = [2,3,1,0]
c = zip(b,a)
c.sort()
sorted_b, sorted_a = zip(*c)
LogMessage('a:%s, b:%s'%(str(sorted_a), str(sorted_b)))
# INFO : a:(400, 300, 100, 200), b:(0, 1, 2, 3)
zip関数がミソでした。
zipで辞書としてまとめらたリストをソートして、その後またリストに分解しているという動作です。ソート時にその条件をlambda式あたりで指定してやることも出来るので、ICEのSort Array with Keyよりよほど自由度は高いわけですが、同じことならとりあえずシンプルにsort()でいい感じですな。

このノードは、キーとなる配列を使って配列をソートするというものっすね。マニュアルには
このノードを使用すると、配列のエレメントの値ではなく、キー配列のエレメントの値に基づいて配列をソートすることができます。となっております。
たとえば [100, 200, 300, 400] という配列があったとして、それを [2,3,1,0] をキーとして並べ替えるとします。
[ 2,3,1,0 ] を並べ替えると [0, 1, 2, 3]になります。
言葉で書くと、1つ目の要素(2)は3番目に、2つ目の要素(3)は4番目に、3つ目の要素(1)は2番目に、4つ目の要素(0)は1番目にそれぞれ変更されたわけです。これと同様の変更を [100, 200, 300, 400] にも施しましょう、というのがこのノードの狙いで、けっこう便利に使っております。
んで、同じことをPythonでどう書くのだろうと思ったりしたわけですよ。調べてみると、以下のような書いてやればよいようです。
a = [100, 200, 300, 400]
b = [2,3,1,0]
c = zip(b,a)
c.sort()
sorted_b, sorted_a = zip(*c)
LogMessage('a:%s, b:%s'%(str(sorted_a), str(sorted_b)))
# INFO : a:(400, 300, 100, 200), b:(0, 1, 2, 3)
zip関数がミソでした。
zipで辞書としてまとめらたリストをソートして、その後またリストに分解しているという動作です。ソート時にその条件をlambda式あたりで指定してやることも出来るので、ICEのSort Array with Keyよりよほど自由度は高いわけですが、同じことならとりあえずシンプルにsort()でいい感じですな。
コメント ( 0 )|Trackback ( )
Fury 2 インストールメモ
xsi |2013-10-19
SoftimageやMayaで動作する Fury 2 [Exocortex] のライセンスは昨年購入していて、一時入れていたんだけど、長いこと触っていないうちにSoftimageのバージョンは上がり新たにインストールせねばならず(Fury 2についてはその認識が間違いなのだけど)、どうインストールするか忘れてしまっていたので忘れないためのメモなのです。
ダウンロードしたFuryはこんな感じで特にインストーラもありません。

んじゃどうするかというとFuryフォルダをどっかにコピーして、その中のSoftimageフォルダをワークグループに登録するんだそうです。それでインストールは完了。
問題はライセンスの取得です。
Fury 2はrlmのライセンスサーバーでフローティングライセンスで動作しています。
だから、そのライセンスサーバーで適切にライセンスファイルが読み込まれていれば、後はライセンスをサーバーに見に行くだけなんですが、その見に行く設定が分からない。その説明がこちらのページです。
Computer Graphics and Simulation Software [Exocortex]
RLM Client Setupを見ると、どうやらWindowsの環境変数を新たに設定する必用があるのでした。変数名がRLM_LICENSE、その値が ComputerName@Port です。ComputerNameとPortはブラウザでサーバーにポート5054にhttpで接続して参照します。ローカルマシンがサーバーなら
http://localhost:5054
ですな。で、RLMを管理できるページが開くのでそこのステイタスで見れまする。
その値を設定した上でsetenvに
exocortex_LICENSE=port@licenseserver
って値を書いておく、と。
というわけで、無事にSoftimageでFuryが動作しました。試しに、適当にレンダリング。Fury 2ならではって感じのものじゃありませんが、とりあえず正常動作しているようです。
ダウンロードしたFuryはこんな感じで特にインストーラもありません。

んじゃどうするかというとFuryフォルダをどっかにコピーして、その中のSoftimageフォルダをワークグループに登録するんだそうです。それでインストールは完了。
問題はライセンスの取得です。
Fury 2はrlmのライセンスサーバーでフローティングライセンスで動作しています。
だから、そのライセンスサーバーで適切にライセンスファイルが読み込まれていれば、後はライセンスをサーバーに見に行くだけなんですが、その見に行く設定が分からない。その説明がこちらのページです。
Computer Graphics and Simulation Software [Exocortex]
RLM Client Setupを見ると、どうやらWindowsの環境変数を新たに設定する必用があるのでした。変数名がRLM_LICENSE、その値が ComputerName@Port です。ComputerNameとPortはブラウザでサーバーにポート5054にhttpで接続して参照します。ローカルマシンがサーバーなら
http://localhost:5054
ですな。で、RLMを管理できるページが開くのでそこのステイタスで見れまする。
その値を設定した上でsetenvに
exocortex_LICENSE=port@licenseserver
って値を書いておく、と。
というわけで、無事にSoftimageでFuryが動作しました。試しに、適当にレンダリング。Fury 2ならではって感じのものじゃありませんが、とりあえず正常動作しているようです。
コメント ( 0 )|Trackback ( )
PySideをSoftimageで利用してみる
xsi |2013-10-10
以下は、Softimageに付属するPythonでやっていますが、いろいろ入れるので、複数のバージョンのSoftimageから利用できたりといった汎用性を考えると、Pythonを別途インストールしてそちらに環境構築するのがたぶん正しいです。
Windows上で動作するSoftimageでは、多くの場合SoftimageとともにインストールされるPython(Softimageのインストールパスと同じ場所に入る)を使われていることと思います。そのため、Pythonがインストールされたという記録がレジストリ上に無く、モジュールのインストール時にインストール先が見つからないという状況になるようです。これはPySideのインストーラ利用時でも例外でなく、インストールするにはレジストリをいじってやる必要があります。
参考 Installing Python modules in the Softimage Python site-packages [eX-SI]
具体的にはHKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\InstallPathを作成し、規定値にPythonへのパスを入力してやるわけっす。ちなみに、Softimage 2014 SP2では
C:\Program Files\Autodesk\Softimage 2014 SP2\Application\python
がPythonへのパスとなります。

僕の場合、使用しているSoftimageのバージョンがひとつなのでこれでいいわけですけど、複数のバージョンを使用しなきゃならない場合はどうすべきなんでしょうかね? レジストリに追加したレジストリのパスでPythonのバージョンが2.7になっているのはSI 2014に付属するPythonが2.7.3だから。ゆえにPySideも2.7をターゲットにしたインストーラになっている。なお、バイナリーとして配布されているのは2.7用と3.3用なので、SIのちょっと古いバージョンを使っているとちょっと困りそう。一度この設定をしたなら、SIのバージョンが変わらない限り、別のモジュールを入れるために同じ作業をする必要はない。
PySideのインストーラは公式 [Qt Project]から落とします。インストールは通常のWindowsアプリケーションと同じ。ただし、インストールを管理者権限で行わないとインストールが止まります。
Qtも入れておきます。(Qt Project) 4.8を入れようと思うのですけど、Windows用って三種類配布されているのですね。minGWってのとVS 2008とVS 2010。どれを入れるべきなんでしょ? よくわからないのでVS 2010ってのを入れてみました。
最後に環境変数でPythonへのパスを通してやります。コンピュータのプロパティからシステムの詳細設定で開くウインドウの詳細設定タブ内にある環境変数ボタンを押して開くウインドウのシステム環境変数の中からPathを探して、そこの変数値にPythonのパスを追加しておきます。これで、コマンドプロンプト上でPythonを実行するとSoftimageで使っているPythonが呼び出されるようになるはずです。

また、インストールしたモジュールへのパスも通しておきます。同じく環境変数に PYTHONPATH という変数とその変数値に、
C:\Program Files\Autodesk\Softimage 2014 SP2\Application\python\Lib\site-packages
を設定しておきます。
さて、Qt Designerでuiファイルを作成し、それをpyside-uicで変換するわけですが、ImportError: No module named pkg_resources と出て変換できません。ググると、setuptoolsというものを入れる必要があるようです。
setuptools [Python]
上記ページの1.1.6のリンク先の" Installing and Using Setuptools "の中のWindowsで飛んだ先に ez_setup.py という文字列のリンクを見つけることができます。これを保存して出来上がるpyファイルをPythonで実行します。管理者権限で起動したコマンドプロンプト上で
python [ez_setup.pyへのパス]
です。それでsetuptoolsのダウンロードとインストールが行われます。
uiファイルの変換ができるようになりました。たとえば作成したuiファイルが test.ui なら
"C:\Program Files\Autodesk\Softimage 2014 SP2\Application\python\Scripts\pyside-uic.exe" test.ui -o ui_test.py
とか実行して変換します(気の利いた人ならpyside-uic.exeへのパスを通すのでしょう)。ちなみに作成したuiファイルはこんな感じです。

で、SIでスクリプトを書いてその中で変換してできたpyファイルを利用するわけです。
スクリプトを作るとき、問題は、作成するウインドウをSIの一番ベースになるウインドウの子供にする方法がわからないことでしてね。そのままだと作成したウインドウの外をクリックするとウインドウが別のウインドウの裏側に行ってしまいます。なので次善の策として常に一番上に表示されるというPySide.QtCore.QtのWindowStaysOnTopHintってのを使ってみております。PySideではなくPyQtでいくなら、PyQtForSoftimageってアドオンのインストールすることで使える機能いけるみたいです(PySideもサポートされているっぽく見えるんですが、うまく動きませんでした。どーやんだろ…)
もしPyQtForSoftimageが使えるなら、もっと自然でいい感じにいけそうなんですけどね。
とはいえ、俺レベルの必要なUIならSI標準のやつで組んでいったほうが良さそうかもですw

Windows上で動作するSoftimageでは、多くの場合SoftimageとともにインストールされるPython(Softimageのインストールパスと同じ場所に入る)を使われていることと思います。そのため、Pythonがインストールされたという記録がレジストリ上に無く、モジュールのインストール時にインストール先が見つからないという状況になるようです。これはPySideのインストーラ利用時でも例外でなく、インストールするにはレジストリをいじってやる必要があります。
参考 Installing Python modules in the Softimage Python site-packages [eX-SI]
具体的にはHKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\InstallPathを作成し、規定値にPythonへのパスを入力してやるわけっす。ちなみに、Softimage 2014 SP2では
C:\Program Files\Autodesk\Softimage 2014 SP2\Application\python
がPythonへのパスとなります。

僕の場合、使用しているSoftimageのバージョンがひとつなのでこれでいいわけですけど、複数のバージョンを使用しなきゃならない場合はどうすべきなんでしょうかね? レジストリに追加したレジストリのパスでPythonのバージョンが2.7になっているのはSI 2014に付属するPythonが2.7.3だから。ゆえにPySideも2.7をターゲットにしたインストーラになっている。なお、バイナリーとして配布されているのは2.7用と3.3用なので、SIのちょっと古いバージョンを使っているとちょっと困りそう。一度この設定をしたなら、SIのバージョンが変わらない限り、別のモジュールを入れるために同じ作業をする必要はない。
PySideのインストーラは公式 [Qt Project]から落とします。インストールは通常のWindowsアプリケーションと同じ。ただし、インストールを管理者権限で行わないとインストールが止まります。
Qtも入れておきます。(Qt Project) 4.8を入れようと思うのですけど、Windows用って三種類配布されているのですね。minGWってのとVS 2008とVS 2010。どれを入れるべきなんでしょ? よくわからないのでVS 2010ってのを入れてみました。
最後に環境変数でPythonへのパスを通してやります。コンピュータのプロパティからシステムの詳細設定で開くウインドウの詳細設定タブ内にある環境変数ボタンを押して開くウインドウのシステム環境変数の中からPathを探して、そこの変数値にPythonのパスを追加しておきます。これで、コマンドプロンプト上でPythonを実行するとSoftimageで使っているPythonが呼び出されるようになるはずです。

また、インストールしたモジュールへのパスも通しておきます。同じく環境変数に PYTHONPATH という変数とその変数値に、
C:\Program Files\Autodesk\Softimage 2014 SP2\Application\python\Lib\site-packages
を設定しておきます。
さて、Qt Designerでuiファイルを作成し、それをpyside-uicで変換するわけですが、ImportError: No module named pkg_resources と出て変換できません。ググると、setuptoolsというものを入れる必要があるようです。
setuptools [Python]
上記ページの1.1.6のリンク先の" Installing and Using Setuptools "の中のWindowsで飛んだ先に ez_setup.py という文字列のリンクを見つけることができます。これを保存して出来上がるpyファイルをPythonで実行します。管理者権限で起動したコマンドプロンプト上で
python [ez_setup.pyへのパス]
です。それでsetuptoolsのダウンロードとインストールが行われます。
uiファイルの変換ができるようになりました。たとえば作成したuiファイルが test.ui なら
"C:\Program Files\Autodesk\Softimage 2014 SP2\Application\python\Scripts\pyside-uic.exe" test.ui -o ui_test.py
とか実行して変換します(気の利いた人ならpyside-uic.exeへのパスを通すのでしょう)。ちなみに作成したuiファイルはこんな感じです。

で、SIでスクリプトを書いてその中で変換してできたpyファイルを利用するわけです。
スクリプトを作るとき、問題は、作成するウインドウをSIの一番ベースになるウインドウの子供にする方法がわからないことでしてね。そのままだと作成したウインドウの外をクリックするとウインドウが別のウインドウの裏側に行ってしまいます。なので次善の策として常に一番上に表示されるというPySide.QtCore.QtのWindowStaysOnTopHintってのを使ってみております。PySideではなくPyQtでいくなら、PyQtForSoftimageってアドオンのインストールすることで使える機能いけるみたいです(PySideもサポートされているっぽく見えるんですが、うまく動きませんでした。どーやんだろ…)
import sys from PySide.QtGui import QMainWindow, QApplication, QWidget from PySide.QtCore import Qt sys.path.append('UIファイルの場所') from ui_test import Ui_MainWindow app = Application class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setupUi(self) self.action_CreateCube.clicked.connect(self.createCube) self.cube_name.setText('NewCube') self.setWindowFlags(Qt.WindowStaysOnTopHint) def createCube(self): app.CreatePrim("Cube", "MeshSurface", self.cube_name.text(), "") qtapp = QApplication.instance() if not qtapp: qtapp = QApplication(sys.argv) w = MainWindow() w.show() qtapp.exec_()
もしPyQtForSoftimageが使えるなら、もっと自然でいい感じにいけそうなんですけどね。
とはいえ、俺レベルの必要なUIならSI標準のやつで組んでいったほうが良さそうかもですw

コメント ( 0 )|Trackback ( )