myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | Cam2Obj

カメラをオブジェクトやコンポーネントをフォーカスするスクリプトです。

このサイトをみたけど、ダウンロードリンクが見つからなくて、自分で書いてみた。

書いた後に、右側にグレイ色に赤文字のリンクがあるのは分かった。

赤をグレー50%に乗せるのは駄目でしょう・・・。

まぁ、もう書いちゃったんだから良かったら見て下さい。

スクリプト内容:

このスクリプトはオーソグラフィックカメラを作って、選択されたオブジェクト・コンポーネントにフォーカスして、CTRL押しながら実行したらこのカメラに変わります。CTRLを押さずに実行すると、ビューカメラをこのカメラに合わせててからそのカメラを削除する。

それだけです。

数学的にアングルを計算してビューカメラを合わせてるのではなく、単純に手動のやり方をワンクリックで出来るようにしただけです。だからちょっと遅いけど、1秒もかからないから別に良いじゃない?

mCam2Obj & mObj2Cam from myara on Vimeo.




mCam2Obj DOWNLOAD

mObj2Cam DOWNLOAD


実行方法
現段階ではただのスクリプトです。やっぱり便利かもと思ったらアドオンバージョンも公開します。

・スクリプトエディターにドラッグ&ドロップして、実行ボタン。
・ツールバーやシェルフにドラッグ&ドロップで登録してボタンを作り、ボタンにクリック。






スクリプトメモ

今回の重要なメモとしては:

Commands( "Frame Selection" ).execute()



これで「Frame Selection」を実行できます。
同じく「Frame All」 「Switch To Animate Toolbar」とか、ログを残さないけど、キーに当てられるコマンドはこれで実行することが出来ます。

SI | mHard Edge Marker 1.3 更新

今日は久しぶりにこのプラグインを使ってみたんですけど、使うたびにレンダーリングが出来なくなることに気づきました。

バグでした。

SIを再起動するとレンダーリングが元に戻るので、そこまでクリティカルなバグでもありません。
でも再起動は嫌ですね。

Diablo 3 を買おうと思ったけど、どうやらサーバーが混みすぎてBattlenet にも入れなかったので、 Diabloの代わりにSIを相手にしてみました。

SIと何時間も戦ってやっとこのノーレンダー野郎を見つけて倒しました!! ヤッター!
全然楽しくない戦いだったけど、達成感がはんぱないです。ちょー気持ちいい。ヤッタ!!

Diablo 3 やるなんかより・・・ や、そこまでないね。やっぱ、Diablo 3やりてーな。

また話がずれちゃった、

まぁ、要するに、犯人はフリーズファンクションだった !

MarkEdge オペレーターを探すために ConstructionHistory を Enumeratorでループしていて、type で確認して、このMarkEdgeだけをフリーズ。という内容です。

そこまで黒魔術でもないと思うんだけど、やっぱりこいつはダメでした。

で、Filterで試してみたらスムーズで綺麗に出来たのでこれでやってみたら、なんの不具合もなく動きました。

FreezeObj(oObj.ActivePrimitive.ConstructionHistory.Filter("MarkHardEdgeVertex"))


そして、前回Twitterで話していた Custom Property -> View にして、GUIをコンパクトにしてみました。
こんな感じです:

mHardEdgeMarker2.gif

上記のスクリーンショットに 1_2 って書いて歩けど、アドオンの方には「1.3」って書いています。 v1.3です。

DOWNLOAD website


更新内容をまとめると:

・レンダーリングのバグ修理
・GUIをコンパクトに
・エラーキャッチを増やしました。
指定された角度でエッジが見つからない場合エラーが出ていたけど、今度はちゃんと「ないよ!」と言ってくれます。

最初のバージョンと比べて:
HardEdges.gif

どうでしょうか? コンパクトで使いやすくなっていると思います!

では、おやすみなさい

SI | 保存する前にシーンファイルバージョンの確認

前回にも書いたんですが、自分はSIの色んなバージョンを使うことが多いです。
それで忙しい時にわけが分からなくなって、2010 のファイルを 2011 で開いて上書きしちゃったりすることもあります。

そうすると元に戻すことはもう不可能ですね。
SIにはMAXみたいに古いバージョンで保存するオプションなんてないし、MAYAみたいにASCIIで編集することも出来ません。
こういうところはSIはとても不便です。
多分これからも変わらないと思います。

2011 で 保存されたファイルは 2011 以降のSIでしか開けません
でも、2011SP2 で保存されたファイルは 2011で開くことは可能です。

つまり、メジャーバージョン(一番左の番号)が変わるとSoftimageに「前方互換がありませんが、マイナーバージョン(右の番号、例 x.1, x.5, SP1, SAP, 等)が変わっても大丈夫です。

いつもバックアップをとっているので今までは特に大きな問題がなかったんですが、やっぱり怖いですね。

なのでこのイベントプラグインを書いてみました:

mCheckFileVer

DOWNLOAD

機能内容:
シーンを保存する時にこのプラグインが実行されます。
シーンファイルのバージョンを確認して、Softimageのバージョンと比べます。
シーンファイルのメージャーバージョンが違ったらメッセージボックスが出てきます
上書きするか・キャンセルするかは選べます。

インストール方法:
SIのユーザーか、ワークグループのPluginフォルダに入れるだけです。

checkver.gif




プラグインの解説

保存する前にシーンのバージョンを確認出来たら良いな~と思ってたら、保存する前にイベント起動させればいいじゃない?と思いつきました。

しかしシーンファイルのバージョンの取得方法が分からなくて、マニュアルを探っても何も見つかりません。

Windowsのコマンドプロンプトで「printver.exe」というスタンドアロンコマンドがありますが、
これ以外にもっと便利な方法があるんじゃないかな?

だって、ファイルを開くときにスクリプトエディターにちゃんと出てきますね。

INFO : 4034 - Loaded scene was created with build number: 8.0.201.0

みたいな。

残念ながらSIメールリストで聞いても、printver か scntoc を読む しか方法がないと言われました。

scntocファイルがあると限らないから、この方法はNGなので printver を使うことにした。

printver.exe 「開いているシーン」 でバージョンが出てきますが、SIから返ってくる情報が取得出来ない。
(出来るかもしれないけど、その方法が知らない)


僕の少ない知識でなんとか出来ないかと思い、printverの結果をテキストに書き出して、
その後にそのテキストを読みこむことを思いつきました。

printver.exe scene.scn > text.txt

あとは、アプリバージョンと比べれば良いだけですね。


これにFSOとWSHを使えばやりやすいかなと思ってVBSで書くことにしました。

パスの取得:
ファイルパス+ファイル名 = Application.ActiveProject2.ActiveScene.filename.value
テンポラリフォルダ = XSIUtils.Environment("TEMP")

WSH の run を使って printver で ファイルのバージョンを テンポラリフォルダに テキストで書き出します。

ここのポイントは 「Program Files」とかにはスペースが入っている為クォーテーションマークを入れる必要があります。
現在のシーンファイルのフォルダにも、テンポラリフォルダにもスペースが入ってるかもしれないので
全部にクォーテーションマークを入れた方が安全です。

クォーテーションマークを入れるには 「""」 を使います。これはストリングのなかににれると「" "" "」になります。
例:「"""" & テンポラリフォルダ & """" 」
→ 「  " テンポラリフォルダ " 」になります。


これでテキストが出来てるから、FSO の OpenTextFile と .ReadLine を使ってそのテキストを読み込みます。

スプリットとかでメージャーバージョンだけをとります。
上にも書いたとおり、マイナーバージョンが違っても特に問題ないからね。

で、メージャーバージョンを取得して、アプリバージョンと比較してマッチしなければ:

「上書きする?、保存をキャンセルする?」という注意msgboxが出てきます。


よし、これでもう保存失敗はしないでしょうね


因みに、Stephen Blair氏はeX SI blogでPythonでの取得方法を書いてくれましたが、
これを使うとコマンドプロンプトの画面が一瞬出てくるからちょっと嫌だから結局 > txt を使っています。
Read more

Icon 編集

仕事でプロジェクトによってSIのバージョンが異なる場合が結構多いです。

2012だったり、2011だったり、2010だったり、7も使ったりします。
複数のラインを同時にやる時だって普通にあります。

Autodeskになる前まで微妙にアイコンが違った気がするけど、Autodeskになってから毎回アイコンが全く同じで、Splash Screenも(起動する時の画面)ほぼ同じですね。

僕はWindows 7 の QuickLaunchを使ってアイコン表示だけにしているので、全部同じアイコンになっているのはあまりにも不便だからアイコンをカスタマイズすることにしました。

アイコン用のツールは多分いっぱいあると思うんですが、今回使ってみた無料ソフトを紹介します。



Icon Extract
http://www.nirsoft.net/utils/iconsext.html

まずは、ソフトイマージのアイコンを書き出す必要があるので、このソフトを使ってみました。

英語だけど使い方は簡単です。「Scan icons in files」というオプションにして、ファイルを入力します。
例:
C:\Program Files\Autodesk\Softimage 2012\Application\bin\xsi.exe

「Search for Icons」にクリックすると、
そのファイルの中に入っているアイコン全部出てきます。
「Save Selected Icons」で書き出します。

このアイコンをPhotoshop で編集したいので、icon を書き読みを可能にしてくれるプラグインをフォトショップに入れる必要があります。



ICO (Windows Icon) Format
http://www.telegraphics.com.au/sw/icoformat.ja.html

Windows  64 は CS4専用と書いてありますが、普通にCS5 64it でも動きます。

プラグインをインストールするともう好きに編集するだけですね。



僕のアイコンはこんな感じになっています:

SI-Icons.jpg

そして、念のために今回作ったアイコンをアップしておく。


DOWNLOAD

こんなアイコンをアップするのは違法ですかね?

SI & Maya | センター(中心軸)の方向の直し方

球体を作って、適当にXYZで回転して、フリーズ回転。

これでどうやってセンターを元に戻せるのか。

簡単に言うと、不可能です。もうその情報が消えちゃったからですね。

でも、センターをどういう風にしたいか分かっていれば、頭の中に見えていれば、なんとかなります。

その自分の頭の中に見えてる向きとマッチしているエッジやポリゴンやオブジェクトを探しましょう。なかったら作りましょう。

次に直したいオブジェクト(球体)を選択して、SelectメニューでCenterーフィルタにして回転ボタンを押しましょう。移動・スケールでも良い。

次に、右のTransformメニューの「Ref」と書いてあるボタンに右クリックして、「Pick Edge Reference」を選んで、さっき自分のイメージに合っているエッジを選びましょう。ポリゴンやオブジェクトでもOK。

回転数値を0,0,0にして完了。

オブジェクト選択に戻して、確認しましょう。

これはオブジェクトのセンターをリファレンスにしたエッジ(またはポリゴン・オブジェクト)の法線に合わせただけなので、自分が理想としているセンターの向きにするために回転を+-45°、90°とかに直す必要があるかもしれません。


昨日聞かれたことで、やり方はもう忘れてました。
失敗しながら思い出したので、メモっておきます。


Mayaのやり方も聞かれたんですけど、分かりません。Mayaのセンター回転が出来ないからどうやるんだろう。ピボット回転出来ないんですよ、次世代3Dソフトはw

正確言うと、回転は出来ますが回転ピボットだけです。
そう!回転のピボットとスケールのピボットと移動のピボットはそれぞれ違うので、頑張って好きな向きに回転してもスケールのピボットはフリーズされたままです。

使えねーな。次世代3Dソフトは

一つだけが分かります。正確な方法ではないけど一応です。ヌル(ロケーター)を作って、好きな向きにして、直したいオブジェクトをこのヌルの子にしてフリーズ回転して、親子関係を解除してヌルを消す。


XSIでも上手く行くやり方ですけど、このヌルを正確な角度にするのは難しいけどね。


他にもっとやりやすい方法がありますか?
Next page