ないブログに表示されています。新しい記事を書く事で広告が消えます。13:312014/08/16特定の軸の回転を解消するICEとその解説Twitterに上げたものを記事にしてみる。今や絶滅の危機に瀕しているSoftimageで「特定の軸の回転を解消するICE」を組んでみました。実際に動かしてるのがこんな感じ。Y軸の回転がなくなっているのが分かると思います。これを応用すれば、ねじれ解消のための補助骨なんかに使えますねー。実際のICEはこうなっています。(クリックで拡大)これを3Dビュー上でみるとこんなイメージ。(クリックで拡大)ベクトル、内積、外積だ~ってよくわからんのがいっぱいですね!自分も頭から煙をプスプス出しながらやってました^^;結果、「難しいことは理解しなくても結果論でいいじゃん!」ということに落ち着きましたがw要するに。・ベクトルとは矢印!!・矢印が2あれば、内積ってのを使えばその角度が求められるらしい!・外積ってのを使えば、垂直な軸が求められるらしい!!外積で求めた軸を中心に、内積で求めた角度を回転させてやれば同じ向きを向いてるけど、余計な回転が入ってないものができあがるんじゃない?という、そういうざっくりしたイメージっすw自分が概念を理解するために参考にしたサイトベクトルとは?http://www.geocities.jp/k27c8_math/math/vector/what_is_vector.htm内積の意味http://kadakun-toudai.seesaa.net/article/120073477.html内積については、高校で勉強したらしいがこれっぽっちも覚えておりませんでした。いうことでググってわかりやすいサイトを発見しました!イメージ優先で書いてくれてるのでわかりやすいです。外積の意味http://proofcafe.org/k27c8/math/math/vector_analysis/page/meaning_of_outer_product/二つのベクトルから直角になるベクトルです。イメージとしては2つのベクトルを平面として考えて、そこに人が立ってる状態と考えれば分かりやすいっす。上のGIFアニメは赤い矢印が外積の動きを表したものです。垂直をキープしてますね。青矢印が右に行くと赤の矢印が手前から奥に変化しますが、これも重要っす。↓の項目の3次元の座標(右手系・左手系)が関係しているようですよ。右手系と左手系3次元の座標には右手系と左手系ってのがあって、それも関係してます。最後に外積のベクトルを基準に内積の角度分グリっと回す方向ですね。なんか見たことあるはず~!http://d.hatena.ne.jp/nakamura001/20081217/1229502492内積と外積の使い方http://marupeke296.com/COL_Basic_No1_InnerAndOuterProduct.html内積と外積、その使い方についてゲームのプログラミングの視点から記事が書かれているので、具体的なイメージが沸きますね~。基準となるベクトルを変えてやれば、X軸やZ軸の回転を無効にすることができますよ。今回はSoftimageのICEで再現してますが、Maya様のカスタムノードでもMAXやほかのDCCツール、はたまたいろいろなゲームエンジンなんかでも同じことができるはずです。補助骨をDCCツール上で動作すればいい場合や、ゲームにもアニメーションデータとして吐き出すとすれば、↓↓↓のようなやり方でも何も問題なさそうです。http://td-matt.blogspot.jp/2011/02/setting-up-forearm-roll-joint-method-1.htmlhttp://td-matt.blogspot.jp/2011/02/setting-up-forearm-roll-joint-method-2.htmlただ、ゲーム中にリアルタイムで動作させたい場合なんかはこういった方法を使っていくことで実現できそうですねー^^基本部分を理解しただけで、まだまだ「そうらしい」って理解しかできてませんがなにかのお役に立てれば幸いです。17:4302014/01/15ポリゴンの表面を沿うICE(回転も表面に沿うよ!)ポリゴンメッシュの表面をオブジェクトが沿うような挙動を実現したくてICE作ってみました。NOTESのポリゴン表面に沿って移動の項目と似ているんですが、サンプルは移動だけで回転は沿って動かなかったので、参考にしつつ拡張を行いました。親のオブジェクトを移動・回転させても問題ないようにしています。具体的には以下のような事ができますー。コンパウンドは以下のリンクからダウンロードしてください。ダウンロードコンパウンドを適用する方法は以下のような感じです。「ポリゴンメッシュと沿うオブジェクトは同一親オブジェクトによってまとめられている」という状況で使うことを想定しています。それ以外はどうなるか知りません(==;しかし、ICEを適用してるオブジェクトも子供にして回転させると挙動がおかしくなるんですよね...何でか良く分かってません。誰か教えて~コンパウンドの内部は以下のような感じです。ポリゴンメッシュから位置と法線を取得して、それを親のオブジェクトのマトリクスと合成してる感じっす。出来あがってみると大して複雑な内容でもないんですが、ICEに慣れいなくてとどんなコンパウンドがあるのか良く分からず時間を使い、そもそもベクトルとかマトリクスとかなにそれ?状態だったので時間を食ってしまいました。03:5812014/01/15動くとワイヤーカラーが変わるICEコンパウンド前回に続きちょこちょこICEを触っております。慣れません...orz今回は下のような事が出来るICEコンパウンドのご紹介。リグを作っていて「コントローラーが動いたかどうか視覚的に分かり易くしてほしい」という要望があたので作ってみました。下記のリンクからコンパウンドをダウンロードして、効果を適用したいオブジェクトにコンパウンドを読み込むだけです。ダウンロードコンパウンドの中身はこんな感じ。「ローカルキネマティクスが少しでも変化したら適用される色が変わる」というだけの非常にシンプルでブログに書くほどの事でもないのですが、ICE初心者の学習のためには良い具合の練習問題でした。́ー`)しかしスクリプトでは実現出来ない事がいとも簡単に実現できてしまうICEって面白いですねぇ~。※追記※このコンパウンド、シーン内に100個とか適用するとそれなりの処理負荷になります。オブジェクトが画面に描画されてなければ処理は回らないようで処理負荷は増えないようですね。03:0202013/12/07オブジェクトがカメラに写っているかどうかを取得するICEコンパウンド「オブジェクトがカメラに写っているかどうかを取得したい!」ということでICEで組んでみました。今回は分かりやすいようにカメラの範囲外になると表示が消えるようにしています。)ダウンロード使い方1.判別したいポリゴンメッシュオブジェクトのICETreeにコンパウンドを読み込む2.任意のカメラをコンパウンドに接続ICEツリーをエンベロープより上位のコンストラクションモードに差し込んでやることでエンベロープオブジェクトにも対応できます。分かってるバグエンベロープ済みのオブジェクト自身に回転値を加えるなどすると判定がおかしくなります。ボックスの取得)』を拝借して使っています。ボックスの取得)』で自分自身のPointPositionからバウンディングボックスの情報を取得。Camera(カメラからの可視性のテスト)』を流用して作ったコンパウンドでカメラ内に収まっているかどうかを判別しています。12ポイントの1つでも画面内に収まっていたらそのオブジェクトは画面内に収まっていると判断されます。Camera(カメラからの可視性のテスト)』についてはカメラの視野タイプが「水平」の場合のみを考慮していたようで「垂直」にすると正常に動作していなかったです。いうことで、その点も修正してみました。Camera2コンパウンドの中を参照)その結果をもとにオブジェクトの表示・非表示を切り替えています。選択オブジェクトに対して今回のICEコンパウンドを適用するスクリプトはこんなかんじ。){//既存のICETreeを削除する。);}//ICETreeを作成。ActiveCamera.Fullname;}赤字の部分はICEコンパウンドがSIに読み込まれている場合の記述なので、適当な場所に置いておく場合はファイルのフルパスになります。一応複数選択でも処理してますが、オブジェクトが多すぎるとSIさんがお亡くなりになられる可能性が高いですw自己責任でどうぞ。