« 2007年09月 | メイン | 2007年11月 »
2007年10月31日
CD MorphとCD Jointの連動における問題についてメモ [ CINEMA 4D Plugins ]
先のエントリのコメントで話題になった、CD MorphでCD Jointの角度によってモーフ量を適用する際に生じる問題について、ちょっとわかったことを自分用メモ程度に。
(1)Limb IKの親ジョイント(腕でいうと上腕/脚でいうと腿)のJoint Transformationの角度値は、FKのときは操作している軸しか変化しないが、IKのときはHPBすべて同時に変化する。ただし、見かけ上動いていない軸(回ってるのがPだとするとHとB)の値は相殺する関係になるのでジョイントの向きそのものは正しく、スキン変形に与える悪影響はない。
(2)CINEMA 4DのHPB座標系の制約なのか何なのか不明だが、本来(0,0,0)であるべきオブジェクトの角度が(180,180,-180)や(0,0,360)等に化けることがある。化けているときのオブジェクトの角度は、ぐるっと回って結局同じところへ戻ってくるので見かけ上は同じだが、角度を数値として取得して使う場合には問題になる。CD JointのJoint Transformation角度でも(1)と同時にこの現象が発生する。
(3)CD Morphをジョイント角度に同期してモーフさせる場合、オブジェクト座標が化けていなくても、Joint Transformationが化けているとMorphは狂う。見かけ上、Morphタグが見ている値はジョイントの座標値だが、実際にはJoint Transformationをオブジェクト座標に換算したものを使っているのだろうか?
(4)Joint Transformationの角度値が化ける現象は、Limb IKの親ジョイントの主に動いている軸の角度が90度を超えたときに発生することが多いようだ(Joint Transformationが角度の変化量を取得する際にHPB座標系だと破綻する?)。親ジョイントが90度以上回らないように気をつければ大丈夫かも? アニメーションの途中で化けたのはまだ見たことがないので、ビューでIKを動かしてキーを打つとき気をつければ大丈夫かも?
(5)ジョイントの本来のオブジェクト座標は化けにくい? Joint Transformationが化けてもオブジェクト座標そのものは化けないらしい。算出方法が違うのか?
(6)CD Morphタグ内でジョイントの角度とモーフ量を連動させるとJoint Transformationが化けたとき問題が起きるが、Xpressoでジョイントのオブジェクト座標を取得してMorphタグにつなげれば、Joint Transformationの値の影響はない。つまりジョイントの本来の角度が化けてさえいなければ問題は起きない。危ないジョイントだけMorphタグではなくXpressoで同期すればいいかも。角度とモーフ量の同期がリニアでない場合、複数のジョイントが関係する場合などは、いずれにせよXpressoが必要になるので、Morphタグによる連動自体をすっぱり捨てるのもアリ?
(7)腿のジョイントは、単にルートのジョイントの子にするとZ軸がほぼ正反対を向くので、初期角度が180度付近となる軸があり危ない。ルートの直下に置かずに旧MOCCAのヌルボーンのように同じ向きの親ジョイントをはさむと、ジョイントの初期角度が小さくなり、オブジェクト座標が化ける危険はさらに減少する(ような気がする)。
(8)Joint Transoformation値をXpressoでクランプするとか、ジョイントにクォータニオンタグをつけるとかは効果がなかった。
(9)Joint Transformationの算出にクォータニオンを使えば角度値は化けないような気がするが、プログラム的にどうなってるのか(プラグインのほうでどうにかなるのか、SDKの制約なのか等)わからないのでなんともいえない。この件についてはCactus Danに言ってみるつもり。
2007年10月18日
フルみっく [ 雑記 ]
indexページにブログパーツの【フルみっく伝染歌プレーヤー】をつけてみました。ニコニコの初音ミク楽曲は数が増えすぎて名曲を探すのが大変になってきましたが、これは随時レコメンド曲が追加されているようなのでラクチンであります。
唯一難を挙げるとすれば、表示されてるだけで(曲を再生してなくても)CPUパワーを100%近く食っちゃうことでしょうか。シングルコアのマシンだとキツイかもしれません。
2007年10月17日
ボーンドリヴンモーフ(2) [ CINEMA 4D Plugins ]
ボーンドリヴンモーフ、こんどは服の変形に使った例を紹介。
たとえば服の袖口は、中の手首に押されて一緒に動くが、皮膚のように完全に一体化しているわけではなく表面を滑るように動くので、単純にメッシュをボーンにくっつけても正確な動きは再現できない。

腕を曲げたときの袖の潰れ方やシワの寄り具合も、ボーンだけで表現しようとするとなかなか思い通りにはならないが、曲がった状態をモーフで作ってしまえば自由自在だ。これは前回のヒザ関節と同様。

詳しくは実際に動いているところを見てもらったほうがいいだろう。モーフの適用量は関節の回転と同期させて自動化してあり、アニメーションでキーを打っているのは腕のIKのゴールオブジェクトの位置と手首のFKのコントローラの角度の2つだけだ。
ムービー
サンプルファイル(CINEMA 4D R10、CD Joints & Skin、CD IK Tools、CD Morphが必要です)
ちなみに腕の動作は、ゴールのIK移動と手首のFK回転に切り離したほうが扱いやすいように思う。手首の回転までIKで動かすと、IKゴールの角度がグローバル座標系の中でラディカルに変化するので、途中の補間がどうなるのか予測がしにくい。クオータニオンタグをつければいいという考え方もあるかな。クオータニオンは、以前は一度タグをつけると角度が変えられなくなってしまってたのだが、いつのまにかまともに動くようになってる(仕様じゃなくバグだったのか?)。
2007年10月15日
ボーンドリヴンモーフ(1) [ CINEMA 4D Plugins ]
モーフィング=顔アニメに使うもの、と考えられがちだが、モーフはボーンによる変形を補助する機能としても有効だ。
ボーンによる変形は基本的にはポイントを回転させることしかできない。たとえば人間のヒザ関節のように180度近くまで曲がるような場合、関節の内側の部分で「肉」が完全にめり込んでしまうことになる(下図/上段)。
こういう問題を避けるために、関節を多重化する、より狭い領域での稼働を追加するなど、ボーンの動作を複雑化させる方向での解決法も使われているが、操作がどんどんややこしくなるだけで生産性は低いように思う。
ボーンであれこれ工夫するのではなくて、モーフを使って圧迫された「肉」の変形を再現すれば、正攻法であっさりと解決できる(下図/下段)。

ムービーで実際に動いている様子を比較すると、モーフを併用することで得られる効果は一目瞭然だ。
おなじみCactus DanのプラグインCD Morphや最近のMOCCAには、最初からこういう使い方を想定したオプションがついている。MOCCAのことはよく知らないので、ここではCD Morphでの実例を紹介する。この手法にはいろんな呼び方があるようだが、さしあたりボーンドリヴンモーフ(Bone Driven Moph)と呼ぶことにする。
当たり前だが、モーフ自体の設定は先にやっておく。
CD Joints & Skinであれば、メッシュをジョイントで曲げた状態でも普通にモーフターゲット編集ができるので、単純なモーフと同様に作業できる(CINEMA 4D純正のボーン/ジョイントの場合、「変形を編集」を有効にすると変形されているポイントは座標系が見た目と一致しないのでかえって厄介なことになる)。
モーフをコントロールするのはヒザ関節のボーン(ジョイント)。

モーフが適用される脚のメッシュには「Morph Reference」タグ、ヒザのジョイントにはモーフターゲットとなる「CD Morph」タグがついている。Morphタグはタグ内部のスロットで脚のメッシュを参照しているので、タグ自体は他のオブジェクトに移動できる。タグをヒザのジョイントにつけることで、このジョイントをモーフを制御するオブジェクトとして認識できるようになるわけだ。

Morphタグで「Morph using Object Rotation」(拙訳日本語版では「ボーンの回転でモーフ」)をオンにすると、このタグのつけられているオブジェクトのローカル角度がモーフミキサーの適用量をコントロールするようになる。この例ではヒザ関節はP回転なので軸はPだ。また「Min」(最小)が「-95度」、「Max」(最大)が「-150度」となっているので、「-95度」まではモーフミキサーは「0%」、そこからモーフ量が増大し始め、「-150度」で「100%」となる。「Clamp Min/Max」(最小/最大で止める)をオンにしておかないと、ジョイントのP角度が指定した最小/最大値を超えた範囲ではモーフミキサーの値がマイナスや100%超になるので注意。

サンプルファイル(CINEMA 4D R10、CD Joints & Skin、CD Morphが必要です)
ボーン(ジョイント)のローカル角度に不都合があったり、単純に関節の曲がり具合とモーフを直結するだけでは済まない場合(複数のモーフターゲットを使う、モーフと角度の関係がリニアでない、など)は、XPressoで自前のコントロールを構築することになる。
CD Joints & SkinとXPressoを組み合わせる場合は、ジョイントのローカル座標だけでなくジョイントが内部的に持っている座標値を取得できる。

この座標値は「Zero Transformation」(座標変換をゼロにする)ボタンで初期値をゼロにすることができ、ジョイント自体のローカル座標とは別に「初期状態から稼働した差分の値」を取得できるので、XPressoで扱いやすい。

2007年10月04日
R10.5 [ CINEMA 4D R10.5 ]
CINEMA 4D R10.5が発表になりましたね。
今回はわりと地味なアップデートです。内容の地味さを反映してか、R10→R10.5のアップグレード料金はC4Dコアの分の29,400円のみで、モジュールの分の追加料金はありません。
地味、とは言いましたが、ワークフローにおいては劇的に生産性を上げる新機能がいろいろ追加されています。その目玉が「XRef」です。「XRef」は「eXternal Reference」つまり「外部参照」で、いってみれば参照するオリジナルが別ファイルになっているインスタンスといえます。CINEMA 4Dで大規模プロジェクトを扱ってる人なら涙が出るほど嬉しい機能なんじゃないかと思うんですが、どうでしょうか。
CINEMA 4Dのバージョンアップが「x.0」で革新→「x.5」で熟成なのはもうR8以来の伝統なんで、このバージョンを逃す手はないと思いますよ。ARは相変わらず華麗にスルーされたけど、むしろVRayのプラットフォームとして考えれば、古いXLやSTUDIOをバージョンアップするぐらいならCINEMA 4Dコア単体を新規に買っときゃいいだろ(126,000円ぽっきり)的なコペルニクス的展開もアリで、いまこそCINEMA 4Dは最強に強まっていると言っていいのではないか。これはもうMAXON信者乙とか関係なしに。