2006年10月22日

右側基準でUVごとシンメトリーに modo 202

さてここで質問なんだが、左右対称の図形を作るとき、左右どっち側で作業する?自分は右側なのでこのスクリプトは右用に作ってある。だからどんなに左側で頑張っても問答無用で右と対称になるので気をつけて。

人には癖ってのがあるので、もしかしたら世の中、左基準もいるんじゃないかと思っているんだが、そんな人はコメント欄にリクエストを寄せてくれたら左基準バージョンも作るよ。

さて、クールかどうかは分からないけどUVをテーマにスクリプトを作ってみた。通常左右対称の物体は対称モードで作成して行くけど、途中で破綻する事は良くある話。そこで半分削除してミラーコピーするわけだけど、せっかく貼ったUVマップはミラーでひっくり返らず片側に重なったままになっちゃうのが欠点だ。そこでこのスクリプトはUVマップのU値が0.5より小さい側のポリゴンを全部削除して0.5より大きい側をミラーコピーして、左右対称にし、さらにU値が0.5のポイントはX=0の位置に移動させ、UVマップもひっくり返して0.5より小側に持ってくる。使い方としては、こんな感じ。modoの優れたUVマッピングツールがあればこんな苦労はいらないのかも知れないけどね。

fig1まずモデルをとりあえず半分にしてUVマップをU=0.5を挟んで右側に寄せて中心に来るU=0.5のポイントを正確に位置あわせする。一応centerUV.LXMというマクロを付けておいたので、U=0.5付近のポイントを全選択してこれを実行してもいいだろう。

fig2これで準備完了。symmetry+uv.pyを実行する。スクリプトを実行する時は対象となるUVマップが選択されている必要があるよ。それからU=0.5をまたいだUVマップのポリゴンは左半分削除の時に削除対象にならないのでマップはU=0.5をまたがないようにした方がいいよ。

fig3ご覧の通りUVマップもミラーされている。実はこの時モデルの方も、U=0.5の位置にマッピングされているポイントはx=0の位置に移動している。残念ながらU=1のポイントをx=0に移動させる事はしていないので、このモデルの後ろの頂点は何も調整されない。

fig4ここで右側を変形して左右対称を崩してみる。ついでに中央の位置もちょっと変えてみた。

fig5スクリプトを実行すると右側の変更が左側に反映されているのが分かると思う。さらにずらしておいた真中の点もX=0の位置に戻っているのが確認できると思う。

fig6モデルを裏返してU=1の位置に割り付けられている真中の点をエッジごとずらしてスクリプトを実行してみると、

fig7位置が調整されないので、このように隙間が空くか、重なるかの状態になってしまう。これは手動で直すしかない。もちろん、スクリプトで位置合わせさせるようにするのは簡単だが、物によってはそれがかえって仇となるケースもあるのでそのままにしてある。

このスクリプトのミソは対称軸をUVマップの方に取っている事で、UVマップの中心位置U=0.5さえ動かさなければモデルをいろいろいじっても左右対称が崩れないところにある。もちろんUVマップの方もU=0.5より右側をいじってスクリプトを実行すれば左側に反映できるよ。modoの近代的UVマッパーの前ではいささかオールドファッションではあるかも知れないけど、使いどころによっては便利かもよ。それではまた次回。

スクリプトまとめページ( Down Load はこちらから)



take_z_ultima at 11:31│Comments(5)TrackBack(0)modo | CG

トラックバックURL

この記事へのコメント

1. Posted by 須田   2006年10月26日 11:58
こちらでははじめまして。
某所ではいろいろとご教授いただきありがとうございます。

早速こちらのスクリプト、試してみました。記事通りの動作がなされて、ちょっと感動。

ところで、U=0.5に位置あわせする必要がある、ということは、オブジェクトの中心(X=0)にエッジのあるオブジェクトのみに対応したスクリプト、と考えてよろしいでしょうか?
2. Posted by 須田   2006年10月26日 11:59
現バージョンのmodo(日本語版)では、対称モードで編集していると対称が崩れてしまう不具合があり、それを直す為「対称ツール」を使用すると、X=0近辺のエッジが左右に歪んでしまう現象が発生するようです。(サブデビかけている時のみ発生するかも、ですが)

この仕様を回避する為、X=0にエッジを作らずに、モデリングをしている為、U=0.5に位置あわせをすることが、事実上出来ない状況です。
そのままこちらのスクリプトを実行すると、X=0に一番近いエッジ間のポリゴンが反転してくっついてしまうようです。
3. Posted by 須田   2006年10月26日 12:00
つきましては、位置あわせの必要のない反転コピースクリプトがあったら嬉しいなあ、とリクエストしてみたり。

ほんと、わがままですみませぬ。

文字数制限で怒られたため、連続コメント失礼しました。
4. Posted by take_z_ultima   2006年10月26日 14:06
そうなんですよ。U=0.5にエッジが無いとダメなんです。ご指摘のサブデビ時のゆがみはおそらく作業中にX=0のポイントが微妙にずれて、中心位置で無くなる為、対称ツールが勝手に対称ポイントを探し出すために発生するものではないかと思います(中心点は対称点が無い筈ですね)。
ちなみにこのスクリプトは左半分削除して右側をコピーしてくるプログラムで、これを実行すれば左右対称に戻り、対称ツールを使う必要は無くなるので対称ツールを使うために発生するゆがみの問題は回避出来ると思うのですがどうでしょうか。
ちなみにU=1.0については放置してありますが、この点も強制的にX=0に持って来るようにするオプションとか付けとく手はありますね。
中心にエッジが無いものを対象に左右対称のものを作る場合、難しいのは5角形以上の多角形の点をどう左右に振り分けるかですね。条件を絞れば出来そうな気はします。
5. Posted by take_z_ultima   2006年10月26日 14:41
さっそくU=1.0の点をX=0に強制移動させるオプションを付けました。
@symmetry+uv.py 1
などのようにスクリプト名の後ろにスペースで区切って何か書けばこのモードで実行されます。ショートカットに登録するか、メニューに追加するといいでしょう。これで最初にUVマップをセットアップしておけば、UVマップをいじらない限りどんなに変形してもこのスクリプトを実行すれば左右対称に戻り、U=0.5とU=1.0のポイントはX=0に戻ります。U=0.5とU=1の位置合わせは昨日作った不連続UVに対応した値の設定スクリプト(http://blog.livedoor.jp/take_z_ultima/archives/50729726.html)をお使いください。

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 

Archives