2017-08-02 12 views
2

2番目のUVセットを作成し、オブジェクト内の各UV頂点をベクトルu=0, v=1.0/number of verticesで移動したいとします。オフセット/ベクトルで各UV頂点を移動する

:頂点0 (u=0,v=0)ため、頂点1 (u=0,v=0.25)ため、頂点2 (u=0,v=0.5)ため、頂点3 (u=0,v=0.75)ため、等

Iは、C#ソースコードを持っている。このように行くべき新しいUV頂点4、頂点面のために作成座標

Vector2[] UV2 = new Vector2[m.vertexCount]; 

    float HalfTexelSize = (1f/ (float)m.vertexCount)/2f; 

    for (int i = 0; i < m.vertexCount; i++) { 

     UV2[i] = new Vector2(0f, (float)i/(float)m.vertexCount) + new Vector2(0f, HalfTexelSize); 
    } 

    m.uv2 = UV2; 
    meshFilter.mesh = m; 

私の研究が進んでいる限り、Pythonにはベクターはなく、今では解決策が残っています。これまでのところ、私はこれを思いついた:

しかし、出力は(0,0)UV座標のすべての頂点を持つ2番目のUVセットです。誰でも助けてくれますか?どんなMEL/Pythonの解決策も高く評価されます。

答えて

0

デフォルトのmaya pyhonにはベクターはありません。

バニラのpython専用ソリューションをお望みなら、this projectは単一ファイルのベクターライブラリです。

ます。また、直接APIを使用して、マヤから3ベクトルを取得することができます:

from maya.api.OpenMaya import MVector 

v1 = MVector(1,2,3) 
v2 = MVector(3,4,5) 
print v1 + v2 

これらは3Dのベクトルですが、あなただけの、実際に作成し、UVセットを編集するための3Dコンポーネント

を無視することができ、ただ、新しいUVセットを作成することは、あなたにのセットを提供します

  1. 考慮すべき複雑さのカップルがあります。セットは存在しますが、UVは含まれません。 vertsとUVの関係は必ずしも1:1であるとは限りません。物理的な頂点に複数のUVを付けることができ、マップされていない頂点を持つことができます。頂点ごとに1つのuvを作成するには、単純な平面図または球面図を適用するのが最も簡単です。
  2. mayaはあなたが作業したいセットを知っているように、「現在のUVセット」を設定する必要があります。残念なことに、UVセット名をmayaに尋ねると、Unicodeが与えられますが、設定すると文字列が必要になります(少なくとも2016年 - これはバグだと思います)
  3. これを設定するベクターは本当に必要ありませんあなたの現在のコードが指示である場合。

    import maya.cmds as cmds 
    
    # work on only one selected object at a time 
    selected_object = cmds.ls(sl=1, fl=1)[0] 
    vertexCount = cmds.polyEvaluate(selected_object, v=True) 
    
    # add a projection so you have 1-1 vert:uv mapping 
    cmds.polyPlanarProjection(selected_object, cm=True) 
    # get the name of the current uv set 
    latest_uvs = cmds.polyUVSet(selected_object, q=True, auv=True) 
    # it's a unioode by default, has to be a string 
    new_uv = str(latest_uvs[-1]) 
    # set the current uv set to the newly created one 
    cmds.polyUVSet(selected_object, e=True, cuv = True, uvs=new_uv) 
    vert_interval = 1.0/vertexCount 
    
    for vert in range (vertexCount): 
        uv_vert = "{}.map[{}]".format (selected_object, vert) 
        cmds.polyEditUV(uv_vert, u= 0, v = vert * vert_interval, relative=False, uvs=new_uv) 
    

最終的な解決策は次のようになります

関連する問題