在Maya中,如何在UV平铺中查找所有壳?

2024-10-01 15:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Mel或Python中寻找一种方法来确定特定的UV壳是否在Maya中跨越多个纹理块。我知道Mudbox对此有一个检查,但我在Maya的界面或脚本中找不到一个简单的命令。在

我想到的一种方法是比较每个图块中的壳,看看是否有任何壳出现在多个图块中。在

我在这里找到了一个页面,有人知道了如何在一组给定的纹理瓷砖中选择每一个UV,但它是在UV上操作的,而不是在壳上。页面如下: http://forums.cgsociety.org/showthread.php?t=1123235

谢谢, 迈克


Tags: 方法命令脚本http界面页面uv瓷砖
1条回答
网友
1楼 · 发布于 2024-10-01 15:35:07

没有一种简单的方法可以做到这一点。在

下面是一个在Python中获取壳的uv边界框的方法的示例。它使用API获取对象中所有uv壳的边界框(注意,它应该是一个网格形状的对象,我没有添加任何检查)。在

import maya.api.OpenMaya as api
from math import floor

def get_shells(obj, uvset = ''):
    selected = api.MGlobal.getSelectionListByName(obj)
    node =  selected.getDependNode(0)

    mesh = api.MFnMesh(node)
    howmany, shell_ids = mesh.getUvShellsIds(uvset)
    u_list, v_list = mesh.getUVs()
    shells = []
    for shell_num in range(howmany):
        umin =  vmin = 9999999999999
        umax=  vmax = -9999999999999
        for idx, value in enumerate(shell_ids):
            if value == shell_num:
                umin = min(umin, u_list[idx])
                umax = max(umax, u_list[idx])
                vmin = min(vmin, v_list[idx])
                vmax = max(vmax, v_list[idx])

        shells.append ( (umin, vmin, umax, vmax) ) 

    return shells


print get_shells('pCylinderShape1')
# [(0.3437499701976776, -7.450580596923828e-08, 0.65625, 0.3125), (0.375, 0.3125, 0.6249997615814209, 0.6884398460388184), (0.3437499701976776, 0.6874999403953552, 0.65625, 1.0)]

结果是一个4项元组的列表,这些元组是存储为( u min, v min, u max, v max )的对象中uv壳的边界框。要捕捉平铺边界,只需检查的最小角点和最大角点是否相同的整数值:

^{pr2}$

相关问题 更多 >

    热门问题