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が同じ青色で表示されます。
図がないとわかりにくいですねぇ。まぁ、備忘録なのでご容赦ください。

 

一応自分の試した限りではうまく動作しました。
ただ、全て人様のものをかいつまんだもので、内容は理解しておりません。場合によっては正しい場所を選択できないのかも知りません。
自己責任でお願いします。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です