« 2013年9月 | トップページ | 2013年11月 »

2013年10月

2013年10月29日 (火)

俺の Next Keyframe 2。

先日書いたフレーム移動のスクリプトの話 ですが、キーフレーム移動はこちらの方が便利だな、と思ったのでメモしておきます。



MEL Script :

//俺の Next Keyframe 2
undoInfo -stateWithoutFlush off;
currentTime -edit `findKeyframe -which next`;
undoInfo -stateWithoutFlush on;


//俺の Previous Keyframe 2
undoInfo -stateWithoutFlush off;
currentTime -edit `findKeyframe -which previous`;
undoInfo -stateWithoutFlush on;



前に書いたのとどう違うかというと、前のは、

currentTime -edit `findKeyframe -timeSlider -which next`;


でした。 -timeSlider オプションが付いていたんですね。 意味も分からずどっかの WEB からパクったからなのか、あるいはスクリプトエディタからコピペしたんだかは忘れましたが、あえてこうしたわけではなく、たまたまそのまんま放置されていたという感じですけどね。 今回のバージョンはこのオプションを取っ払っただけです。


これがあると、「次のキーフレーム」 というのは、タイムスライダ上で表示されている次のキーフレームということになります。 UI 上の次/前キーフレームボタンを押した時はこの挙動です。 


でもこの挙動だと不便に感じることがあったんですね。 それは、グラフエディタ上でカーブを選択している時です。


XSI の感覚で言うと、カーブを明示的に選択している時は、次のキーフレームに行けと言った場合はそのカーブ上での次のキーフレームに言って欲しいですよね。 でも、 -timeSlider オプションを付けていると、選択しているカーブがあろうとなかろうと、タイムスライダ上にある次のキーフレームに飛んでしまうわけですよ。

Nextkey1

こういう時に不便に感じたのです。

現在、posy のカーブを選択しています。 このカーブ上にある現在フレームから見た次のキーフレームは、ですよね。 この時は A に行きたいわけですよ。 しかしタイムスライダ上では  が次のキーフレームです。 選択していない posz のキーフレームがAよりも先に存在するんですね。

このときに上記の -timeSlider オプションが付いた状態で実行すると( UI 上のボタンも同じ)、現在フレームが A ではなく  に行ってしまってゴルァになるわけです。 ま、スクリプトで 「タイムスライダ上での次のキーフレームに行け」 と言っているんだから、当たり前ですよね。Maya 様が悪いのではなく、俺が悪いのです。 ごめんなさい Maya 様。


しかし、 -timeSlider を外すと、 「選択しているカーブがあればそのカーブ上での次のキーフレームに飛ぶ。 カーブを選択してなければ、そのオブジェクトが持つキーフレーム全体の中で、次のキーフレームに飛ぶ」 という挙動になったように見えるのです。



うん、これがいいじゃないか。 現在の選択状態を反映して挙動を変えてくれる。 これの方が便利だ。 XSI の挙動と同じ、かな? どうだっけ。 たぶんそう。 こっちの方が田舎くさくて良い。 XSI村の百姓にはちょうどいいべな。




ということで、やはりちゃんと意味は分かってないしロクにマニュアルも調べてないんですが、 -timeSlider オプションは取っ払って使っています。 という話でした。 以上。







それにしても、Maya 様のグラフエディタ操作って、なんだか重くないですか? さほど複雑なシーンでもないのに、グラフエディタ上でキーをつかんでグイっとドラッグした時とか、そのドラッグ動作自体がすんげえもっさりしているんですよね。 スイっと動いてくれない。 

新規シーンにポリゴンオブジェクト1個とかであれば、さすがにスイスイ動くんですけどね。でもさほど複雑じゃないキャラクタ1体とか動かす時に、もう重くなってる。 重くなるの早くねえか?

XSI だと、そこそこ複雑なシーンでも、Fカーブエディタ上での操作はけっこうサクサクですよね。 さすがにクソ重いシーンだとビューへの反映に時間かかることもあるけど、でもそういう場合はオプションでリアルタイム反映をオフにできるので(マウスボタンを離してから初めて反映という)、ドラッグ操作自体はサクサクにすることもできるんですが、Maya 様の場合はいつももっさりしている印象です。 俺だけ?

未だ自分でゼロからアセットを作ったりとかね、リグを組んだりとかも全然できないから、人様から渡されたデータを扱ってるだけなんですよ。 だから、データの作り方ゆえに重くなっているのか、それとも Maya 様はそんなものなのか、判断がつかないんです。 しかもプリファレンスで軽くできるのかも知れないしね。まだ分かってない。 だから、てめえこのクソMaya様今すぐお市にになられて下さいとか言いたいのですが、自信がなくて小さい声でしか言えません。


道のりは遠く。









.

| | コメント (0) | トラックバック (0)

2013年10月26日 (土)

頂点N個おきに発生。

ポリゴンの頂点上にパーティクルを発生、ってのはよくやるわけですが、頂点全部に発生させたいわけじゃなくて、N個おきに発生させたかったりするわけですよ。


で、相変わらず ICE たんに愛されていない俺には、当てずっぽうで Modulo とかいじくって、さっぱり思った通りにならず、おとなりさんの家の庭に俺のモニタが堆積して行くわけです。数十万年後に EIZO 遺跡として発掘されることでしょう。


で、ひとりではどーにもならなくて教えを乞うと、親切に俺に知恵を授けてくれる賢者様たちがいるわけです。 俺は幸せ者です。 その幸せをおすそ分けします。


Addpointoneverynthvertex

クリックするとでかい画像が出ます。


うん、これで良い。スヴァらしい。




冗長だけどロジックをコトバで説明すると以下のようになると思います。



発生源としてポリゴングリッドがあります。

そのグリッドの PointPositon つまり頂点位置を Add Point に食わせてやって、頂点を発生させます。

しかしこのままでは全部の頂点に発生しやがります。 任意の個数おきに発生させたいのです。

そこでまず、グリッドの頂点番号を取得します。 VertexIndex です。

そいつを Modulo に食わせ、2個おき にするなら  を食わせます。 Modulo は、頂点番号それぞれを2で割ってその余りを吐き出します。

余りがゼロの時は、2で割り切れている時ということになります。 ってことは、頂点番号が2の倍数の時に割り切れることになります。

その結果を Filter に食わせます。 Filter は条件が一致した時のみ Keep します。 この場合、頂点番号が2で割り切れた時のみ(2の倍数の時のみ)、Keep つまり保持して次のノードに渡すわけです。

こうして2個おきにキープされた頂点番号の頂点位置に Add Point でパーティクルが出現します。

3個おきにしたかったら、Modulo に 3 を食わせます。 3の倍数の時のみ Keep され、パーティクルが出現します。

めでたいです。

男が白い歯を輝かせて笑います。




説明、これで合ってますか? 間違ってたら指摘して下さいね。




このシーンファイルのダウンロード JJJ_ICE_AddPointOnEveryNthPoints.zip (XSI 2012)






m4g さん、msk さん、いつもありがとう。 あなた達のおかげで仕事ができてます。





.

| | コメント (0) | トラックバック (0)

2013年10月11日 (金)

△。

三角波を生成するツールを書きますた。だいぶ前ですけど。


△。
三角波生成ツール。
http://homepage3.nifty.com/jjj/XSIFiles/Plugin/JJJ_XSI_Plugins.html

Masuo Suzuki さん、m4g さんなどにお世話になりますた。いつものように。 俺はインターフェースを書いただけ。 肝心のアルゴリズム部分は教えてもらったものをそのまんま使っているだけですね。


エクスプレッションに Sin とかはあるんだから、三角波も標準機能で用意して欲しいなあ。 今どきは ICE でやれという話になりそうですが・・・・。 ならコンパウンド用意してくれないかなあ。




Suncackhur
.

| | コメント (2) | トラックバック (0)

2013年10月10日 (木)

カーブデフォームはX。

これも長年不満だったんですが、あっさり解決してしまったので・・・・。



カーブデフォームの不審なロールのことですよ。


こういうやつ。

Cd1

XSI 男がカーブに沿って気持ち良さそうにスウィングしてますが、変なロールが入ってるの分かりますか。綺麗にエビ反りになるのではなく、ひねりが入ってるというか、回転してしまっている。不審なロールです。



他の分かりやすい例で言うと、例えばキャタピラみたいなものを作る時にカーブデフォームを使ったとしますよね。 まあキャタピラじゃなくとも何でも同じなんですけどね。 で、オブジェクトはちゃんとカーブに沿ってくれるのはいいんですが、カーブの接線方向を中心とした軸で変な回転が入ってしまうわけですよ。 ロールですね。  カーブがXYZ全方向にぐねぐね曲がっていたらしようがないにしても、キャタピラの履板オブジェクトを沿わせるのに使う目的だと、キャタピラは左右に波打ったりしませんから、カーブは平面になりますよね。 YZ平面に沿った平面カーブ。 それでも、ロールが入っちゃうんです。

このように。

Cd2


しかも、きっちり90度とかのロールであれば、カーブデフォームの PPG の中でロール値を補正してやることもできるので問題ないんですが、半端なロールなので、正確には補正できない。 今までは、ロールがほぼゼロに見えるよう、Roll の値に微妙な数値を入れながら見た目で修正してました。非常に不満でした。

長年これに耐え忍んできて、先日とうとうブチ切れて、っていうか聞いてみりゃいいじゃんって思いついて、空調屋さんに 「どーなってんのこれ。アフォですか」 って言ってみたんですよ。 そしたら、まあ謎仕様ではあるんですが、綺麗に解決できちゃったんですね。




方法は簡単なんですが、


  カーブデフォームのカーブは、XY平面に描け。


以上。



上のキャタピラの例で言うと、例えば戦車やブルドーザなどキャタピラがあるものを作るとき、普通は車体を  方向を向かせて作りますよね。 車体の前後方向がZ軸です。 そうなると、キャタピラは YZ平面のカーブ に沿うことになりますよね。 なので、横のビューからキャタピラの形にカーブを描きます。


 YZ平面。
 これがいけなかった。



カーブデフォームの内部仕様が公開されているわけではないので理由は分からないけれど、XY平面でカーブを描けば、変なロールが入らないのです。 ええっ マジっすか空調屋さん。 


Cd3

ほんとだ・・・・。

長年使ってきて、全然気づかなかったよ orz


ってことで、XY平面で描いたカーブでデフォームすれば、変なロールは入りません。 フロントビューで描けばいいわけですね。 間違ってサイドビューから描いてしまっても、90度回転させてローテーションをフリーズすればいいだけのこと。

最終的な形はもちろんYZ平面のカーブに沿ったものにしたいわけですが、XY平面のカーブを描いた後にカーブをY軸に90度回転させてやれば望みの方向になるので問題ないです。 Y90度というローテーションの値が入るのが気に入らないなら、ヌルなどで親でも作ってそこから回転させるか、ニュートラルポーズを使えばよろしい。 ちなみにカーブデフォームの PPG で Constrain to Deformer のチェックはもちろんオンである必要があります。 それがないとカーブをY軸90度回転させたときに着いて来なくなるから。


変形させられる方のオブジェクトの向きは、まあどうでもいいと思います。デフォーム後に意図した方向になってなくても、90度単位で補正すればいいだけなので、カーブデフォームの PPG の中で Roll の値をいじってもいいし、元のオブジェクトのセンターを90度回転させてあげてもいい。XY平面のカーブであれば半端な数値のロールにはならないんだから、90度単位できっちり正確に補正できます。 以上。 解決。





いやあ、まだ知らないことだらけです XSI。
知ってました? 
知らないのは俺だけですか。

空調屋さんいつもお世話になります。
マニュアルにも書いてないのになんで知ってんですかこんなこと。





いえ~~い

Cd4

| | コメント (2) | トラックバック (0)

2013年10月 9日 (水)

サブDハードエッヂ。

先日皆さんに教えて頂いたことをメモります。



+ キーを押してサブDしたオブジェクトを、サブD後の状態で固めてしまいたくなることはよくあります。 「固める」 というのは俺が勝手にそう言っているだけですが、サブDで分割された結果の状態をナマのポリゴンとしてベイクする、つまり分割後の状態へコンバートしてしまうことです。


で、それをやるためには Edit > Duplicate/Instantiate > Duplicate using Geo App. でもいいですし( + キーによるサブD後の状態で複製)、 Create > Poly Mesh > Subdivision でもいいですし(サブDされた新しいオブジェクトを作る)、ポリゴンを全部選択して Modify > Poly Mesh > Local Subdivision Refinement(選択中のポリゴンをサブDのアルゴリズムで分割)でもいいですよね。 結果は同じです。たぶん。


しかし、もともとのオブジェクトにハードエッジが設定されていた場合、上記の方法で複製した時に、複製後のオブジェクトからはそのハードエッジが消失してしまっているんですね。 

Subd_he1

一番左がもともとのメッシュです。青い線のハードエッジがあるのがわかります。そしてサブDされています。

これを、Duplicate using Geo App で複製したのが真ん中です。 ハードエッジ消えてます。 ちなみに Create > PolyMesh > Subdivision で複製しても同じ結果です。

Local Subdivision Refinement したのが右側です。ハードエッジ消えてます。


どの方法でもハードエッジは消えるのですね。
なんでやねん。
これが問題なわけですよ。 

どーしてハードエッジ消してしまうんですか XSI さま。 消した方がいい理由があるんですか。 ないですよね。 アフォですかあなた。 そんなことしてるから嘔吐デスク様から見放されるんですよ。 レンタルとか当然できねえし。


余談ながら、Local SubD 使った方法とそれ以外の方法で、結果が完全に同じにならないのは俺だけ? ちょっとだけ頂点の位置がズレる部分があるんだよね。  サブDのアルゴリズムは同じ Catnull-Clark 使ってるのに・・・。 これはいずれ検証しないといかんか。。。




と困っていたところ、複数のお方が救いの手を差し伸べてくれまして、サブDを固めた後にハードエッジを復活させる技を教えて頂きました。


そのやり方ですが、まず、一番右、Local SubD Refinement を使います。 真ん中のはダメです。 Local SubD じゃないとダメです。


次に E キーなどを押してエッジ選択モードに入ります。

次に、インターフェース右上のセレクションフィルタの三角アイコンをクリックして、 Crease Edge を選びます。

Subd_he2

この状態で、Local SubD したオブジェクト全体を囲むようにエッジを選択します。

すると、

Subd_he3

画像にあるように、Local SubD したオブジェクトには Crease Edge としてハードエッジの情報が残っているらしく、選択ができちゃいました。 真ん中のオブジェクトはダメですね。


選択さえ出来てしまえばもうこっちのもんです。 そのエッジが選択されたまま、Mark Hard Edge してやれば、元のオブジェクトと全く同じエッジをハードエッジにすることができます。 以上。 ううむ、スヴァらしい。



Crease Edge は、Hard Edge とは本来、違うものです。 目的は基本的には同じようなものだけど、Crease Edge は Hard Edge と違い、ハードにする度合いがパラメータで調整できますね。 でも、Local SubD した時には、Crease Edge も Hard Edge もいっしょくたに、Crease Edge というフラグが立てられて残るように見えます。 試しに、Hard も Crease も両方混じったメッシュで同じ実験をやってみましたが、結果は同じでした。 つまり、Local SubD した時のみ、Hard も Crease も両方、Crease Edge フィルタに引っかかってくれました。





ってことで、基本、このやり方でいいんではないかしら。
他にも良い方法がありましたら、どうか教えて下さい。




もし、Crease Edge も Hard Edge も両方含めた Crease Edge フィルタを使うのではなく、Hard Edge のみを選択したいという場合があったら、それは ymt3d さん のスクリプトを使うとよいようです。

http://3dnchu.com/archives/select_hard_edge_softimage/

おお、ICE のアトリビュートに EdgeIsHard なんてやつがあるんですね? そのフラグを見てハードエッジかどうかを判断しているようです。


Special Thanks to 秋雨様 / マーティンくん / ymt3d 様

いつもお世話になります
(゜∀゜)






あ、そうだ、念のため空調屋さんにも聞いてみたんですよ。 そしたら、嘔吐デスク様にも問い合わせてくれて、結局は良い方法は無いとのこと。 リクエストとして受け付けてもらったようです。 ↓

BSPR-11153
Duplicate using Geo Approx ignores hard edge if changed OGL Level


通常の複製ではハードエッジは引き継がれるわけですから、サブDしたもので出来ない理由はないですよね。 Gator とかでも転送できないし。 最初からそれができれば問題ないのに、謎仕様ですよ嘔吐デスク様。 

でも、一応リクエスト受け付けてくれたのですね。 リクエストなんて実現するかどうか全く分からないし、むしろ実現しないやつの方が多いと思うんだけど、門前払いをしないでちゃんとリクエストとして受け付けてくれるだけ有り難いですね。 某様の方は、今のところ、門前払いが少なくないという印象なんですよねー。 「多くの人がそれを望んでいるわけではないからリクエスト受け付けません」 「MEL で出来ることはそっちでやればいいからリクエスト受け付けません」 みたいな。 いやほんと。 代理店通してもそうなんだから。


あ、俺が XSI 村の村民だからですか。

納得。




.

| | コメント (0) | トラックバック (0)

2013年10月 8日 (火)

俺の Frame。

マヤ様は、フレームを移動しただけでそれもアンドゥにカウントされるんですね。 我々 XSI 村の村民は粗野なので、そんなことはアンドゥしなくていいとか思ってしまいます。


アニメーション作業をしています。
Fカーブなどでモーションを調整しました。
フレームを動かして、調整が上手く行ったかどうか確認します。
上手く行ってない場合、アンドゥします。

すると一発で戻ってくれない。
フレームを動かした過程もアンドゥ対象だからです。


モーション調整後、確認のために1コマずつトトトトトと動かしたり、
タイムスライダをスクラブしたりすると、
アンドゥした時に、
マヤ様はその全てを、
トトトトトトのひとつずつまでもを、
丹念に、
ご丁寧に、
ご親切に、
真心を込めて、
1個1個アンドゥして下さりやがります。

マヤ様の真心が身に滲みます (´;ω;`)ウゥゥ

どうか今すぐお氏にになって下さいマヤ様




こうしておびただしい回数の Ctrl + Z が出現することになるのです。

Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z + Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z Ctrl + Z



連続で Ctrl + Z を押しているうちに、どこまで戻ったのかよく分からなくなってきたり、なんかラリってきたり、お花畑が広がってきたり、アンドゥってなんだっけ? Ctrl + Z って、このスペルで合ってる? なんか Z って文字、直線が3本だよね。 なんで折れ曲がってんの? っていうかこれほんとに Z なの? そもそも Z ってなに? 誰が決めたの?  Z って別に N でもいいじゃない。 俺の知ってる Z はこれじゃないよね。

などとゲシュタってしまうのです。 

俺の精神を破壊しないで下さいマヤ様







同じことを考えている人もいたみたいで、どっかの WEB からパクったり知人に教えてもらったりして、今では ↓これらのスクリプトに落ち着いています。 どこからパクったかはもう忘れてしまいました。すいません。

要するに、マヤ様の標準機能のフレーム移動を独自のスクリプトで置き換えてしまう、ということをやっているだけです。 置き換えるって言っても、マヤ様のコマンドをいじるとかではなく(そういうこともできるらしいが)、独自スクリプトをホットキーに割り当てるだけですけどね。

独自スクリプトとは、フレーム移動操作の前にいちいちアンドゥをオフにし、フレームを移動、そしてその後アンドゥをまたオンにするという、それだけのものです。 1行目がアンドゥオフ、3行目がアンドゥオンです。 これらをホットキーエディタ内で独自コマンドを作りどんどんキーに割り当てていきます。 



//俺の Next Frame
undoInfo -stateWithoutFlush off;
currentTime ( `currentTime -q` + 1 );
undoInfo -stateWithoutFlush on;


//俺の Previous Frame
undoInfo -stateWithoutFlush off;
currentTime ( `currentTime -q` - 1 );
undoInfo -stateWithoutFlush on;


//俺の Next Keyframe
undoInfo -stateWithoutFlush off;
currentTime -edit `findKeyframe -timeSlider -which next`;
undoInfo -stateWithoutFlush on;


//俺の Previous Keyframe
undoInfo -stateWithoutFlush off;
currentTime -edit `findKeyframe -timeSlider  -which previous`;
undoInfo -stateWithoutFlush on;


//俺の Start Frame
undoInfo -stateWithoutFlush off;
playButtonStart;
undoInfo -stateWithoutFlush on;


//俺の End Frame
undoInfo -stateWithoutFlush off;
playButtonEnd;
undoInfo -stateWithoutFlush on;




これでなんとかなります。 それぞれ全部、ホットキーに割り当てました。 命からがらです。 これがなければ俺は確実に死亡します。 ありがとうマヤ様。 俺たち XSI 村の奴婢たちにも生きる道を与えてくれて。




ただし、これはホットキーに割り当てたというだけであり、 UI 上のボタンを押した時にも上記のスクリプトの動作になってくれるわけではありません。 例えば、となりのフレームに移動するのに UI 上の Next Frame ボタンを押した場合は、上記スクリプトではなくマヤ様標準機能の 「次フレームへ移動」 が起動されますので悪しからず。つまりアンドゥ対象のフレーム移動です。


でも、ボタンに割り当てられている機能の改造すら、やろうと思ったらできちゃうんですねマヤ様は。 UI 上のボタンに独自スクリプトを割り当てるやり方は、N澤くんに教えてもらいました。 が、まだ俺は習得には至っていません。 故に今のところまだ俺のマヤ様のボタンは標準のままですが、まあ、フレーム移動などはどうせホットキーでしかやらないので問題ない。UI 上からこれらのボタンを取っ払ってしまいたいくらいです(それもできるんか?)。

聞くところによると、マヤ様は UI 上のボタンの定義まで全て MEL 呪文で書かれており、ゆえに元の呪文を書き換えてしまえば、あるいは呪文を唱えて一時的に機能を上書きしてしまえば、そのボタンを押した時に何が起こるのかすら変えてしまうことができるという、まさに黒魔術なことができる宗教ソフトウェアなんですね。 試しに、教えてもらった通りにいじってみたら、再生ボタンを押しても次フレームボタンを押しても最終フレームボタンを押しても何を押しても必ずポリゴンの sphere が出現する、という超鬼畜な UI が出来上がりました。 すごいなマヤ様は。 XSI は被差別民ですから、UI 上のボタンが押された時の挙動なんて、カスタマイズできません。そんな大それた改編は、お上から許されていないのです。

あ、そういえば、マウスでの操作はどうなんだろう。 つまり、タイムスライダ上をマウスでスクラブしたり、タイムスライダのある1点をクリックしたりすることも、フレーム移動ですよね。 それはホットキーで独自コマンドを起動するのとも、UI 上のボタンをクリックするのとも、違う動作ですよね。 そういうのもカスタマイズできちゃうんでしょうかね? だとするとなお助かるなあ。 タイムスライダ上をクリックしてフレーム移動ってのもよくやる操作ですからね。 これもアンドゥ対象外にしてしまえるといいなあ。







まあともかくですよ、このフレーム移動操作のカスタマイズがなければ、とてもじゃないけどマヤ様でアニメーション作業はできません。 もともとマヤ様のもとにおられた皆様はもちろん気にもしてないというかそっちの方が自然に感じるのでしょうけれど、XSI 村の人間にとってはこれはクリティカルです。 無理無理。  特にアニメーション作業中ってのは、ポーズやタイミングやFカーブの形のみに集中してそれ以外のことは一切頭に浮かんで欲しくないという状況下にあるので、アンドゥでゲシュタってしまったりしたら、もう、全てぶち壊しです。せっかく頭の中にできつつあった良いモーションのテンポやノリが破壊されてしまい、どう修正しようとしていたのか思い出せず、余計なところまでいじり始め、昨日よりも悪い動きに改悪してしまい、結局モニタまでもを破壊することになるのです。

俺のモニタを破壊しないで下さいマヤ様






 .

| | コメント (0) | トラックバック (0)

2013年10月 1日 (火)

すっからかんのシーン。カメラすらない。

いや、これもほんと、どーでもいいネタなんですが、さっき気づいたもので・・・。


XSI って、シーンに必ず1つはカメラが必要ですよね。 最後のカメラを削除しようと Delete キーとか押しても、消えないじゃないですか。 そういうもんだと思ってました。 しかし、そうではなかったんですよ。 知ってました?


XSI を起動、もしくは新規シーンをすると、このようなオブジェクトが既にありますよね。

Nocam1

シーンルートは実体の無いものだから別として、 カメラリグと、ライトのみがあります。




で、このうち、ライトは普通に消すことができますよね。ライトが全く無いシーンというものは普通に存在可能です。 

一方カメラの方は、カメラリグ内のカメラ本体以外の部品、つまり Root Interest は削除できます。

Nocam2

こういう状態ですね。 はい。 これ以上は消せません。 カメラ本体は消えてくれません。 Delete 押しても消えないし、スクリプトで DeleteObj コマンドを走らせても、最後のカメラ1個は消えてくれないのです。


ということで、これが XSI における最小限のシーン、ということになると思います。


・・・・思ってました。


実は違ったんです。





このように Model の子供にします。

Nocam3




次に、この Model から中クリックで ブランチ選択 します。

そして渾身の力を込めて Delete キー を押します。


Nocam4

XSI を十何年使い続けて初めてたどり着いた、カメラすらない、すっからかんのシーンです。 おめでとう俺。 とうとうここに立つことができたね。






カメラが無いので、ビューポート上でそのカメラの画角範囲を表すゲートの表示もなくなってますね。 ビュー左上のカメラの名前を表示する場所には、No Cameras という表示になっています。

Pass のオプションを見てみると、

Noncam_pass

カメラの部分は No Scene Cameras という表示になっています。


このように、No Camera とかそういう表示の文字を用意しているんだから、開発者側としては、カメラが存在しないシーンというものは、ちゃんと想定済みなのではないでしょうかね? 
単にユーザの操作上の混乱を防ぐために、GUI から普通にカメラを消そうとすると最後の1個だけは消せないという、UI 上の制限を付けているだけ、ということなのかな。  あるいは、カメラが存在しないとまずいもの、例えば上記の Pass の設定とかですが、そういう色んな箇所でカメラの存在の有無をチェックするプログラムを書くのが面倒くさくなってしまって、ええいカメラは必ず1個は存在しなければいけないという風に見える UI にしちまえー ってことでこうしたのかも知れません。たぶん後者です。 間違いなく後者です。


カメラはなくとも、S キーなどでビューをぐりぐり動かすことはできます。 レンダリジョンを描けばレンダもできました。 でも Pass をレンダしようとすると Invalid Pointer というエラーが出て止まりました。

ほらね。やっぱり。  カメラの有無を調べて 「カメラがないと Pass のレンダはできません」 とかユーザに警告を出すのがあるべきソフトウェア設計の姿ですが、Pass だけでなくあちこちでそういうことをしなければいけないので面倒くさがって、エラーで実行が止まるのは完全放置プレイにしているわけですよ。 その代わりに、そもそもカメラがひとつも存在しないという状況をユーザが作れないように最後のカメラは削除できなくする、という根性の捻じ曲がったインプリでその場しのぎをしたわけです。ええそうに違いありません。 そのくせ、Model からブランチ選択なら消せるなどという抜け道が存在してしまうあたり、実に XSI らしい感じで微笑ましくなります。 

と、またこんなどうでもいい記事に時間とエネルギーを使ってしまいました。 こんなもん、書かなければ電力需要はもっと下げることができます。 あなたもこんなどうでもいい記事読んでないでさっさと仕事終わらせなさい。社会のリソースの無駄遣いです。それではごきげんよう。






.

| | コメント (0) | トラックバック (0)

« 2013年9月 | トップページ | 2013年11月 »