MODO TD SDK – Flip UV Tangent
TD SDKというラッパーがMODO901くらいから入りました。
全然触ってません。
Pymelのように便利だそうですが、色々と不備があるようで、触っておりませんでした。
そんな中、随分前に遭遇した問題に、改めて遭遇し、手早く解決できないか、
とTD SDKのお世話になりました。
随分と前からずっとそうなのですが、何故かMODOはUVの接線方向を揃えてくれません。
自分も詳しくわからないので、そういう表現で正しいのか知りませんが、MODOでUVラップを実行したモデルを
MayaのUVシェードで見ると、青と赤が入り交じった状態になります。
ゲームデータとしてはよろしくない場合が多いです。
ゲーム開発も視野にいれるのであれば、すぐにでも直してほしいのですが、全然直してくれません、、
Webで調べてみると、同じ問題に遭遇している人はたくさんいるようで、最終的にはMODOにはそれが出来ない。
ということで、諦めているようです。
過去の自分がどのような解決をしたのか、思い出せませんが、Mayaで見つけた、それを検出するスクリプトと、
TD SDKでのUV取得の方法を混ぜて、簡易版を作りました。
import modo flf = [] mesh = modo.Mesh('PulseRifle.lxl (4)') uvm=mesh.geometry.vmaps['Texture2'][0] uvValues = [] for p in mesh.geometry.polygons: nVerts = p.numVertices uvPos = [] for eachVert in range(nVerts): uvPos.extend( p.getUV(eachVert,uvm) ) uvAB = modo.Vector3( [ uvPos[2] - uvPos[0], uvPos[3] - uvPos[1],1 ] ) uvBC = modo.Vector3( [ uvPos[4] - uvPos[2], uvPos[5] - uvPos[3],1 ] ) cross = uvAB.cross( uvBC ) vec = modo.Vector3([0, 0, 1]) if modo.Vector3.dot(cross, vec) <= 0: flf.append( p ) if flf: [ x.select() for x in flf ]
MODOのスクリプトエディタで実行してください。
抽象化は全くしていないので、メッシュの名前は3行目の「PulseRifle.lxl (4)」を書き換えて使います。
UVセットの名前は4行目、「Texture2」を書き換えて使います。
どちらも存在し、ポリゴンセレクトモードでスクリプトを実行すると、該当するフェースを選択します。
アイランドではないのです。ここは注意が必要です。
で、ポリゴンフェースなので、他のポリゴンにつながっている場合もあります。
確認のため、UVを動かしてみて、アイランドであることを確認します。
もし引っ張られるUVががあれば、アンドゥして、引っ張られるフェースの選択を解除します。
完全にアイランドだけの状態であることが確認できたら、アクションセンターで、センターをローカルに
して、スケールツール。
マイナススケールのチェックをオフにして「-100%」をU方向に実行すると、アイランドそれぞれの場所の中心で
UVがU方向に反転されます。
この状態でMayaに読み込むと、全てのUVが同じ青色で表示されます。
図がないとわかりにくいですねぇ。まぁ、備忘録なのでご容赦ください。
一応自分の試した限りではうまく動作しました。
ただ、全て人様のものをかいつまんだもので、内容は理解しておりません。場合によっては正しい場所を選択できないのかも知りません。
自己責任でお願いします。
コメントする
トラックバックする
トラックバック用URL: