IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Maya USD 批量改 Variant Sets 批量设置 Active 的小工具(附USD相关链接) -> 正文阅读

[游戏开发]Maya USD 批量改 Variant Sets 批量设置 Active 的小工具(附USD相关链接)

作者:token comment

前言:在Maya中操作USD只需要获取到USD的实例然后用USD的方法去操作即可

相关链接

User Documentation and Tutorials
API Documentation
MayaUSD GitHub
Autodesk Maya2022 - USD for Maya

界面展示

工具界面

功能介绍

Variant Sets:选择 usd 节点,点击此按钮,会生成在大纲中右键 usd 节点出现的 Variant Sets 相同的菜单选项,可以多选 usd 节点,默认是获取第一个 usd 节点的菜单信息

主要用到的命令

import maya.internal.ufeSupport.utils as ufeUtils
ufeUtils.getNonMayaSelectedItems()  # 获取当前选择的 usd 节点
# Result: ['|HelloWorld|HelloWorldShape,/Hello/world_grp/world_grpShape'] # 

import mayaUsd
mayaUsd.lib.GetPrim("|HelloWorld|HelloWorldShape").GetStage()  # 获取 Stage 实例
# Result: Usd.Stage.Open(rootLayer=Sdf.Find('...'), sessionLayer=Sdf.Find('...'), pathResolverContext=Ar.DefaultResolverContext(['...'])) # 

完整代码

# -*- coding=utf-8 -*-
# ==========================================
#       author: Ruben
#         mail: 773849069@qq.com
#         time: 2022/4/29
# ==========================================
u"""
批量设置变体工具
"""

import maya.cmds as mc
from functools import partial
import maya.internal.ufeSupport.utils as ufeUtils
import mayaUsd

# --*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*
WINDOW_NAME = "usd_variant_tool"
MENU_NAME = WINDOW_NAME + "_menu"


def usdPathToDict(path_list):
    result = {}
    for i in path_list:
        shape, prim = i.split(",")
        if shape not in result:
            result[shape] = []
        result[shape].append(prim)
    return result


def batchSetUsdVariant(prims, variant_set, variant, *args):
    u"""
    批量设置变体
    """
    prim_dict = usdPathToDict(prims)
    for shape, prim_list in prim_dict.items():
        stage = mayaUsd.lib.GetPrim(shape).GetStage()  # 获取 Stage 实例
        for i in prim_list:
            prim = stage.GetPrimAtPath(i)
            vs = prim.GetVariantSets()
            if vs.HasVariantSet(variant_set):
                vt = vs.GetVariantSet(variant_set)
                if vt.HasAuthoredVariant(variant):
                    vt.SetVariantSelection(variant)
    pass


def usdSetActive(prims, act):
    # 激活 prim
    if isinstance(prims, list):
        prims = usdPathToDict(prims)

    for k, v in prims.items():
        stage = mayaUsd.lib.GetPrim(k).GetStage()
        for path in v:
            try:
                prim = stage.GetPrimAtPath(path)
                prim.SetActive(act)
            except:
                pass
    pass


def setActivate(*_):
    usdSetActive(ufeUtils.getNonMayaSelectedItems(), True)
    pass


def setDeactivate(*_):
    usdSetActive(ufeUtils.getNonMayaSelectedItems(), False)


def create_variant_menu(*args):
    # 创建菜单
    mc.menu(MENU_NAME, e=True, deleteAllItems=True)

    sels = ufeUtils.getNonMayaSelectedItems()
    if len(sels) == 0:
        mc.menuItem(label='No Selected', p=MENU_NAME)
        return
    shape, path = sels[0].split(",")
    stage = mayaUsd.lib.GetPrim(shape).GetStage()
    prim = stage.GetPrimAtPath(path)
    variant_sets = prim.GetVariantSets()
    variant_names = variant_sets.GetNames()
    if len(variant_names) == 0:
        mc.menuItem(label='No Variant', p=MENU_NAME)
        return
    for i in variant_sets.GetNames():
        pass
        mc.menuItem(subMenu=True, label=i, p=MENU_NAME)
        mc.radioMenuItemCollection()
        variant_set = variant_sets.GetVariantSet(i)
        selected = variant_set.GetVariantSelection()
        for ii in variant_set.GetVariantNames():
            mc.menuItem(label=ii, radioButton=True if ii == selected else False,
                        command=partial(batchSetUsdVariant, sels, i, ii))


def main():
    if mc.window(WINDOW_NAME, exists=True):
        mc.deleteUI(WINDOW_NAME, window=True)
    mc.window(WINDOW_NAME, title="Usd Variant Tool", width=400, height=200, menuBar=True, mnb=True, mxb=False,
              sizeable=False)
    mc.menu(MENU_NAME, label='Variant Sets', postMenuCommand=create_variant_menu,
            postMenuCommandOnce=False)
    mc.rowColumnLayout(p=WINDOW_NAME, rs=(1, 1))
    mc.text("")
    mc.button(label="Activate Prim", command=setActivate)
    mc.button(label="Deactivate Prim", command=setDeactivate)
    mc.showWindow(WINDOW_NAME)


if __name__ == '__main__':
    main()
    pass

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:58:23  更:2022-05-13 11:58:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:32:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码