1154 lines
32 KiB
Plaintext
1154 lines
32 KiB
Plaintext
|
from pxr import Usd, UsdGeom, Gf
|
|||
|
import random
|
|||
|
|
|||
|
# 创建一个新的USD场景
|
|||
|
stage = Usd.Stage.CreateNew('HelloWorld.usda')
|
|||
|
|
|||
|
# 定义一个变换和一个球体
|
|||
|
xformPrim = UsdGeom.Xform.Define(stage, '/hello')
|
|||
|
spherePrim = UsdGeom.Sphere.Define(stage, '/hello/world')
|
|||
|
|
|||
|
# 获取球体的变换属性
|
|||
|
xformAttr = UsdGeom.Xformable(spherePrim).AddTranslateOp()
|
|||
|
|
|||
|
# 在随机位置移动球体并设置十个关键帧
|
|||
|
for frame in range(1, 11):
|
|||
|
# 生成随机位置
|
|||
|
pos = Gf.Vec3f(random.uniform(-10, 10), random.uniform(-10, 10), random.uniform(-10, 10))
|
|||
|
|
|||
|
# 设置关键帧
|
|||
|
xformAttr.Set(pos, frame)
|
|||
|
|
|||
|
# 保存场景
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
import maya.cmds as cmds
|
|||
|
|
|||
|
# 创建一个pxrUsdReferenceAssembly节点
|
|||
|
usdNode = cmds.createNode('mayaUsdProxyShape')
|
|||
|
|
|||
|
# 加载USD文件
|
|||
|
cmds.setAttr(usdNode + '.filePath', '/home/jcen/PycharmProjects/pythonProject4/sphere_animation.usda', type='string')
|
|||
|
|
|||
|
# 刷新节点以加载USD文件
|
|||
|
cmds.refresh(usdNode)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
https://github.com/kiryha/Houdini/wiki/Pixar-USD-Python-API#save-mesh-object-to-usd-file
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
from pxr import Usd, UsdGeom, Sdf
|
|||
|
|
|||
|
# 创建一个新的USD文件
|
|||
|
stage = Usd.Stage.CreateNew('box.usda')
|
|||
|
|
|||
|
# 创建一个Box
|
|||
|
box = UsdGeom.Xform.Define(stage, '/Box')
|
|||
|
|
|||
|
# 创建一个variantSet
|
|||
|
variantSet = box.GetPrim().GetVariantSets().AddVariantSet('geo')
|
|||
|
|
|||
|
# 添加variant
|
|||
|
for variantName in ['base', 'client_model', 'collision', 'deform_high', 'deform_low', 'display_high', 'display_low', 'garment', 'maquette', 'muscles', 'pose', 'render_high', 'scan_base', 'scan_high', 'scan_low', 'scan_mid', 'sculpt_bind', 'sculpt_pose', 'sculpt_symm', 'shapes_high']:
|
|||
|
variantSet.AddVariant(variantName)
|
|||
|
variantSet.SetVariantSelection(variantName)
|
|||
|
with variantSet.GetVariantEditContext():
|
|||
|
if variantName in ['base', 'deform_high', 'display_high', 'pose', 'render_high']:
|
|||
|
# 在这些variant中,我们添加一个extentsHint属性
|
|||
|
box.GetPrim().CreateAttribute('extentsHint', Sdf.ValueTypeNames.Float3Array).Set([(-16.629925, -0.035511017, -11.017016), (16.459915, 3.3556676, 11.016925)])
|
|||
|
# if variantName == 'base':
|
|||
|
# # 在base变体中,我们添加一个payload
|
|||
|
# with stage.GetEditTarget().GetLayer().PermissionToEdit():
|
|||
|
# box.GetPrim().GetPayloads().AddPayload(r"C:\Users\ARTIST\Desktop\tstProj\s.usda")
|
|||
|
|
|||
|
# 保存USD文件
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# -*- coding: utf-8 Jcen -*-
|
|||
|
import os, shutil
|
|||
|
import re
|
|||
|
#
|
|||
|
# file_size = 0
|
|||
|
#
|
|||
|
# for root, dirs, files in os.walk('W:/LFC'):
|
|||
|
# try:
|
|||
|
# if dirs[0] == 'render' and re.search('write', root.lower()):
|
|||
|
# # print(root, dirs, files)
|
|||
|
# # print()
|
|||
|
# if re.search(r'v\d+', os.listdir(os.path.join(root.replace('\\', '/'), dirs[0]))[0]):
|
|||
|
# # print(os.listdir(os.path.join(root.replace('\\', '/'), dirs[0])))
|
|||
|
# # print(root, dirs, files, os.listdir(os.path.join(root.replace('\\', '/'), dirs[0]))[0])
|
|||
|
#
|
|||
|
# if re.search(r'.*[a-zA-Z]\d{2}_\d{3}.*', os.listdir(os.path.join(root, dirs[0], os.listdir(os.path.join(root.replace('\\', '/'), dirs[0]))[0]))[0]):
|
|||
|
# path = os.path.join(root, dirs[0], os.listdir(os.path.join(root.replace('\\', '/'), dirs[0]))[0])
|
|||
|
# file = os.listdir(path)
|
|||
|
# for f in file:
|
|||
|
# match1 = re.search(r'\.\d{4}\.exr|\.\d{3}\.exr', f)
|
|||
|
# if match1:
|
|||
|
# frame = match1.group()
|
|||
|
# if len(frame) == 8:
|
|||
|
# frame = frame[:1] + '0' + frame[1:]
|
|||
|
# file_path = os.path.join(path, f).replace('\\', '/')
|
|||
|
# new_file_path = ['T:/proj/LFC/FIND_EXR', root.replace('\\', '/').split('/')[2], root.replace('\\', '/').split('/')[3], 'render_' + root.replace('\\', '/').split('/')[3] + frame]
|
|||
|
# # print(root.replace('\\', '/').split('/')[2], 'render_' + root.replace('\\', '/').split('/')[3], match1.group())
|
|||
|
# file_size += os.path.getsize(file_path)
|
|||
|
# print(file_path, '/'.join(new_file_path))
|
|||
|
# print('/'.join('/'.join(new_file_path).split('/')[:-1]))
|
|||
|
# # if not os.path.exists('/'.join('/'.join(new_file_path).split('/')[:-1])):
|
|||
|
# # os.makedirs('/'.join('/'.join(new_file_path).split('/')[:-1]))
|
|||
|
# shutil.copy2(file_path, '/'.join(new_file_path))
|
|||
|
# except:
|
|||
|
# pass
|
|||
|
#
|
|||
|
# print(file_size / (1024**3))
|
|||
|
|
|||
|
|
|||
|
# for i in os.listdir(r'T:\proj\LFC\FIND_EXR\q30'):
|
|||
|
# # os.rename()
|
|||
|
# os.rename(os.path.join('T:\proj\LFC\FIND_EXR\q30', i), os.path.join('T:\proj\LFC\FIND_EXR\q30', 'render_'+i))
|
|||
|
|
|||
|
# from pxr import Usd, UsdGeom
|
|||
|
# stage = Usd.Stage.CreateNew('HelloWorld.usda')
|
|||
|
# xformPrim = UsdGeom.Xform.Define(stage, '/hello')
|
|||
|
# spherePrim = UsdGeom.Sphere.Define(stage, '/hello/world')
|
|||
|
# stage.GetRootLayer().Save()
|
|||
|
|
|||
|
|
|||
|
# from pxr import Usd, UsdGeom
|
|||
|
# stage = Usd.Stage.Open('Hello_World1.usda')
|
|||
|
# colorAttr = UsdGeom.Gprim.Get(stage, '/Root/Mesh').GetDisplayColorAttr()
|
|||
|
# colorAttr.Clear()
|
|||
|
# print(stage.GetRootLayer().ExportToString())
|
|||
|
#
|
|||
|
# rootPrim = stage.GetPrimAtPath('/Root')
|
|||
|
# vset = rootPrim.GetVariantSets().AddVariantSet('shadingVariant')
|
|||
|
# print(stage.GetRootLayer().ExportToString())
|
|||
|
#
|
|||
|
#
|
|||
|
# vset.AddVariant('red')
|
|||
|
# vset.AddVariant('blue')
|
|||
|
# vset.AddVariant('green')
|
|||
|
# print(stage.GetRootLayer().ExportToString())
|
|||
|
#
|
|||
|
# vset.SetVariantSelection('red')
|
|||
|
# with vset.GetVariantEditContext():
|
|||
|
# colorAttr.Set([(1,0,0)])
|
|||
|
#
|
|||
|
# print(stage.GetRootLayer().ExportToString())
|
|||
|
#
|
|||
|
# vset.SetVariantSelection('blue')
|
|||
|
# with vset.GetVariantEditContext():
|
|||
|
# colorAttr.Set([(0,0,1)])
|
|||
|
#
|
|||
|
# vset.SetVariantSelection('green')
|
|||
|
# with vset.GetVariantEditContext():
|
|||
|
# colorAttr.Set([(0,1,0)])
|
|||
|
#
|
|||
|
# print(stage.GetRootLayer().ExportToString())
|
|||
|
# stage.GetRootLayer().Export('HelloWorldWithVariants1.usda')
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# from pxr import Usd, UsdGeom, Sdf
|
|||
|
#
|
|||
|
# def crate_geometry():
|
|||
|
# """
|
|||
|
# Procedurally create geometry and save it to the USDA file
|
|||
|
# """
|
|||
|
#
|
|||
|
# # Create USD
|
|||
|
# stage = Usd.Stage.CreateNew('hello_world1.usda')
|
|||
|
#
|
|||
|
# # Build mesh object
|
|||
|
# root_xform = UsdGeom.Xform.Define(stage, '/Root')
|
|||
|
# mesh = UsdGeom.Mesh.Define(stage, '/Root/Mesh')
|
|||
|
#
|
|||
|
# # Build mesh geometry. Here polygon creation magic should happen
|
|||
|
# geometry_data = {'points': [(-1, 0, 1), (1, 0, 1), (1, 0, -1), (-1, 0, -1)],
|
|||
|
# 'face_vertex_counts': [4],
|
|||
|
# 'face_vertex_indices': [0, 1, 2, 3]}
|
|||
|
#
|
|||
|
# # Set mesh attributes
|
|||
|
# mesh.GetPointsAttr().Set(geometry_data['points'])
|
|||
|
# mesh.GetFaceVertexCountsAttr().Set(geometry_data['face_vertex_counts'])
|
|||
|
# mesh.GetFaceVertexIndicesAttr().Set(geometry_data['face_vertex_indices'])
|
|||
|
#
|
|||
|
# # Save USD
|
|||
|
# stage.GetRootLayer().Save()
|
|||
|
#
|
|||
|
#
|
|||
|
# crate_geometry()
|
|||
|
#
|
|||
|
# from pxr import Usd, UsdGeom, Sdf, Gf, UsdShade
|
|||
|
# import random
|
|||
|
# stage = Usd.Stage.Open('HelloWorldWithVariants1.usda')
|
|||
|
# material = UsdShade.Material.Define(stage, '/Root/Mesh')
|
|||
|
#
|
|||
|
# pbrShader = UsdShade.Shader.Define(stage, '/Root/Mesh/PBRShader')
|
|||
|
# pbrShader.CreateIdAttr("UsdPreviewSurface")
|
|||
|
# pbrShader.CreateInput("roughness", Sdf.ValueTypeNames.Float).Set(0.4)
|
|||
|
# pbrShader.CreateInput("metallic", Sdf.ValueTypeNames.Float).Set(0.0)
|
|||
|
#
|
|||
|
# # material.CreateSurfaceOutput().ConnectToSource(pbrShader.ConnectableAPI(), "surface")
|
|||
|
# # stReader = UsdShade.Shader.Define(stage, '/Root/Mesh/stReader')
|
|||
|
# # stReader.CreateIdAttr('UsdPrimvarReader_float2')
|
|||
|
# # # 定义一个变换和一个球体
|
|||
|
# # spherePrim = stage.GetPrimAtPath('/Root/Mesh')
|
|||
|
# # # 获取球体的变换属性
|
|||
|
# # xformAttr = UsdGeom.Xformable(spherePrim).AddTranslateOp()
|
|||
|
# #
|
|||
|
# # # 在随机位置移动球体并设置十个关键帧
|
|||
|
# # for frame in range(1, 11):
|
|||
|
# # # 生成随机位置
|
|||
|
# # pos = Gf.Vec3f(random.uniform(-10, 10), random.uniform(-10, 10), random.uniform(-10, 10))
|
|||
|
# #
|
|||
|
# # # 设置关键帧
|
|||
|
# # xformAttr.Set(pos, frame)
|
|||
|
# #
|
|||
|
# # 保存场景
|
|||
|
# stage.GetRootLayer().Save()
|
|||
|
|
|||
|
|
|||
|
from pxr import Usd, UsdGeom, Sdf, UsdShade
|
|||
|
|
|||
|
# 创建一个新的USD文件
|
|||
|
stage = Usd.Stage.CreateNew('box.usda')
|
|||
|
|
|||
|
# 创建一个Box
|
|||
|
box = UsdGeom.Xform.Define(stage, '/Box')
|
|||
|
# stage = Usd.Stage.Open('box1.usda')
|
|||
|
#
|
|||
|
# print(dir(UsdGeom.Xform))
|
|||
|
# try:
|
|||
|
# print(UsdGeom.Xform.Get(stage, ''))
|
|||
|
# except:
|
|||
|
# pass
|
|||
|
# # print(box)
|
|||
|
# print(dir(stage))
|
|||
|
|
|||
|
# 创建一个variantSet
|
|||
|
variantSet = box.GetPrim().GetVariantSets().AddVariantSet('geo')
|
|||
|
|
|||
|
# 添加variant
|
|||
|
for variantName in ['base']:
|
|||
|
# ', client_model', 'collision', 'deform_high', 'deform_low', 'display_high', 'display_low', 'garment', 'maquette', 'muscles', 'pose', 'render_high', 'scan_base', 'scan_high', 'scan_low', 'scan_mid', 'sculpt_bind', 'sculpt_pose', 'sculpt_symm', 'shapes_high']:
|
|||
|
variantSet.AddVariant(variantName)
|
|||
|
variantSet.SetVariantSelection(variantName)
|
|||
|
if variantSet.GetVariantSelection() == 'base':
|
|||
|
with variantSet.GetVariantEditContext():
|
|||
|
new_xform = UsdGeom.Mesh.Define(stage, '/Box/NewXform')
|
|||
|
new_xform.GetPrim().GetPayloads().AddPayload(r"C:\Users\ARTIST\Desktop\tstProj\s.usda")
|
|||
|
with variantSet.GetVariantEditContext():
|
|||
|
if variantName in ['base', 'deform_high', 'display_high', 'pose', 'render_high']:
|
|||
|
# 在这些variant中,我们添加一个extentsHint属性
|
|||
|
box.GetPrim().CreateAttribute('extentsHint', Sdf.ValueTypeNames.Float3Array).Set([(-16.629925, -0.035511017, -11.017016), (16.459915, 3.3556676, 11.016925)])
|
|||
|
# if variantName == 'base':
|
|||
|
|
|||
|
|
|||
|
# box.GetPrim().CreateAttribute('extentsHint', Sdf.ValueTypeNames.Float3Array).Set(
|
|||
|
# [(-16.629925, -0.035511017, -11.017016), (16.459915, 3.3556676, 11.016925)])
|
|||
|
# # 在base变体中,我们添加一个payload
|
|||
|
# with stage.GetEditTarget().GetLayer().PermissionToEdit():
|
|||
|
# box.GetPrim().GetPayloads().AddPayload(r"C:\Users\ARTIST\Desktop\tstProj\s.usda")
|
|||
|
|
|||
|
# 保存USD文件
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
"""
|
|||
|
Export geometry from Maya scene to USD file
|
|||
|
"""
|
|||
|
|
|||
|
import random
|
|||
|
from pxr import Usd, UsdGeom
|
|||
|
import pymel.core as pm
|
|||
|
|
|||
|
|
|||
|
def get_geometry_data(mesh):
|
|||
|
"""
|
|||
|
Get points data for each face for USD file record
|
|||
|
"""
|
|||
|
|
|||
|
points = [] # World position coordinates (tuples) for each geometry point (point3f[] points)
|
|||
|
face_vertex_counts = [] # Number of vertices in each geometry face (int[] faceVertexCounts)
|
|||
|
face_vertex_indices = [] # List of geometry vertex indexes (int[] faceVertexIndices)
|
|||
|
|
|||
|
# Get vertex data for each face
|
|||
|
vertex_index = 0
|
|||
|
for face in mesh.faces:
|
|||
|
vertex_indexes = []
|
|||
|
for vertex in face.getVertices():
|
|||
|
position = tuple(mesh.vtx[vertex].getPosition(space='world'))
|
|||
|
points.append(position)
|
|||
|
vertex_indexes.append(vertex_index)
|
|||
|
vertex_index += 1
|
|||
|
|
|||
|
face_vertex_counts.append(len(vertex_indexes))
|
|||
|
face_vertex_indices.extend(vertex_indexes)
|
|||
|
|
|||
|
return points, face_vertex_counts, face_vertex_indices
|
|||
|
|
|||
|
|
|||
|
def process_geometry(stage, root_xform):
|
|||
|
"""
|
|||
|
Iterate over all scene meshes and record them to the USD stage
|
|||
|
"""
|
|||
|
|
|||
|
for mesh in pm.ls(type='mesh'):
|
|||
|
|
|||
|
# Create a USD Mesh primitive for the mesh object
|
|||
|
usd_mesh = UsdGeom.Mesh.Define(stage, root_xform.GetPath().AppendChild(mesh.getParent().name()))
|
|||
|
|
|||
|
# Get geometry data
|
|||
|
points, face_vertex_counts, face_vertex_indices = get_geometry_data(mesh)
|
|||
|
|
|||
|
# Set the collected attributes for the USD Mesh
|
|||
|
usd_mesh.GetPointsAttr().Set(points)
|
|||
|
usd_mesh.GetFaceVertexCountsAttr().Set(face_vertex_counts)
|
|||
|
usd_mesh.GetFaceVertexIndicesAttr().Set(face_vertex_indices)
|
|||
|
|
|||
|
|
|||
|
def export_geometry():
|
|||
|
"""
|
|||
|
Create USD file and record geometry data
|
|||
|
"""
|
|||
|
|
|||
|
# Create USD stage
|
|||
|
usd_file_path = r"D:\Test\temp5.usda"
|
|||
|
|
|||
|
# Create USD stage and root object
|
|||
|
stage = Usd.Stage.CreateNew(usd_file_path)
|
|||
|
spherePrim = UsdGeom.Xform.Define(stage, '/pSphere1')
|
|||
|
rootPrim = stage.GetPrimAtPath('/pSphere1')
|
|||
|
stage.SetDefaultPrim(rootPrim)
|
|||
|
|
|||
|
|
|||
|
UsdGeom.SetStageUpAxis(stage, UsdGeom.Tokens.y)
|
|||
|
stage.SetMetadata('metersPerUnit', 0.01)
|
|||
|
stage.GetRootLayer().documentation = "Generated from Composed Stage of pSphere1 layer"
|
|||
|
|
|||
|
|
|||
|
root_xform = UsdGeom.Xform.Define(stage, '/')
|
|||
|
|
|||
|
process_geometry(stage, spherePrim)
|
|||
|
|
|||
|
# Save the USD stage to the file
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
print(f'>> {usd_file_path}')
|
|||
|
|
|||
|
|
|||
|
export_geometry()
|
|||
|
# print(get_geometry_data(pm.ls(type='mesh')[0]))
|
|||
|
|
|||
|
|
|||
|
|
|||
|
"""
|
|||
|
Export geometry from Maya scene to USD file
|
|||
|
"""
|
|||
|
|
|||
|
import random
|
|||
|
from pxr import Usd, UsdGeom
|
|||
|
import pymel.core as pm
|
|||
|
|
|||
|
|
|||
|
def get_geometry_data(mesh):
|
|||
|
"""
|
|||
|
Get points data for each face for USD file record
|
|||
|
"""
|
|||
|
|
|||
|
points = []
|
|||
|
face_vertex_counts = []
|
|||
|
face_vertex_indices = []
|
|||
|
uv_coords = []
|
|||
|
|
|||
|
vertex_index = 0
|
|||
|
for face in mesh.faces:
|
|||
|
vertex_indexes = []
|
|||
|
for vertex in face.getVertices():
|
|||
|
position = tuple(mesh.vtx[vertex].getPosition(space='world'))
|
|||
|
points.append(position)
|
|||
|
vertex_indexes.append(vertex_index)
|
|||
|
vertex_index += 1
|
|||
|
|
|||
|
face_vertex_counts.append(len(vertex_indexes))
|
|||
|
face_vertex_indices.extend(vertex_indexes)
|
|||
|
|
|||
|
uvs = mesh.getUVs()
|
|||
|
for i in range(len(uvs[0])):
|
|||
|
uv = (uvs[0][i], uvs[1][i])
|
|||
|
uv_coords.append(uv)
|
|||
|
|
|||
|
return points, face_vertex_counts, face_vertex_indices, uv_coords
|
|||
|
|
|||
|
|
|||
|
def process_geometry(stage, root_xform):
|
|||
|
"""
|
|||
|
Iterate over all scene meshes and record them to the USD stage
|
|||
|
"""
|
|||
|
|
|||
|
for mesh in pm.ls(type='mesh'):
|
|||
|
|
|||
|
# Create a USD Mesh primitive for the mesh object
|
|||
|
usd_mesh = UsdGeom.Mesh.Define(stage, root_xform.GetPath().AppendChild(mesh.getParent().name()))
|
|||
|
|
|||
|
# Get geometry data
|
|||
|
points, face_vertex_counts, face_vertex_indices, uv_coords = get_geometry_data(mesh)
|
|||
|
|
|||
|
# Set the collected attributes for the USD Mesh
|
|||
|
usd_mesh.GetPointsAttr().Set(points)
|
|||
|
usd_mesh.GetFaceVertexCountsAttr().Set(face_vertex_counts)
|
|||
|
usd_mesh.GetFaceVertexIndicesAttr().Set(face_vertex_indices)
|
|||
|
stAttr = usd_mesh.GetPrim().CreateAttribute("primvars:st", Sdf.ValueTypeNames.TexCoord2fArray, False)
|
|||
|
stAttr.Set(uv_coords)
|
|||
|
|
|||
|
|
|||
|
def export_geometry():
|
|||
|
"""
|
|||
|
Create USD file and record geometry data
|
|||
|
"""
|
|||
|
|
|||
|
# Create USD stage
|
|||
|
usd_file_path = r"D:\Test\temp11.usda"
|
|||
|
|
|||
|
# Create USD stage and root object
|
|||
|
stage = Usd.Stage.CreateNew(usd_file_path)
|
|||
|
spherePrim = UsdGeom.Xform.Define(stage, '/pSphere1')
|
|||
|
rootPrim = stage.GetPrimAtPath('/pSphere1')
|
|||
|
stage.SetDefaultPrim(rootPrim)
|
|||
|
|
|||
|
|
|||
|
UsdGeom.SetStageUpAxis(stage, UsdGeom.Tokens.y)
|
|||
|
stage.SetMetadata('metersPerUnit', 0.01)
|
|||
|
stage.GetRootLayer().documentation = "Generated from Composed Stage of pSphere1 layer"
|
|||
|
|
|||
|
|
|||
|
root_xform = UsdGeom.Xform.Define(stage, '/')
|
|||
|
|
|||
|
process_geometry(stage, spherePrim)
|
|||
|
|
|||
|
# Save the USD stage to the file
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
print(f'>> {usd_file_path}')
|
|||
|
|
|||
|
|
|||
|
export_geometry()
|
|||
|
# print(get_geometry_data(pm.ls(type='mesh')[0]))
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
"""
|
|||
|
Export geometry from Maya scene to USD file
|
|||
|
"""
|
|||
|
|
|||
|
import random
|
|||
|
from pxr import Usd, UsdGeom, Sdf
|
|||
|
import pymel.core as pm
|
|||
|
|
|||
|
|
|||
|
def get_geometry_data(mesh):
|
|||
|
"""
|
|||
|
Get points data for each face for USD file record
|
|||
|
"""
|
|||
|
|
|||
|
points = []
|
|||
|
face_vertex_counts = []
|
|||
|
face_vertex_indices = []
|
|||
|
uv_coords = []
|
|||
|
|
|||
|
vertex_index = 0
|
|||
|
for face in mesh.faces:
|
|||
|
vertex_indexes = []
|
|||
|
for vertex in face.getVertices():
|
|||
|
position = tuple(mesh.vtx[vertex].getPosition(space='world'))
|
|||
|
points.append(position)
|
|||
|
vertex_indexes.append(vertex_index)
|
|||
|
vertex_index += 1
|
|||
|
|
|||
|
face_vertex_counts.append(len(vertex_indexes))
|
|||
|
face_vertex_indices.extend(vertex_indexes)
|
|||
|
|
|||
|
uvs = mesh.getUVs()
|
|||
|
for i in range(len(uvs[0])):
|
|||
|
uv = (uvs[0][i], uvs[1][i])
|
|||
|
uv_coords.append(uv)
|
|||
|
|
|||
|
return points, face_vertex_counts, face_vertex_indices, uv_coords
|
|||
|
|
|||
|
|
|||
|
def process_geometry(stage, root_xform):
|
|||
|
"""
|
|||
|
Iterate over all scene meshes and record them to the USD stage
|
|||
|
"""
|
|||
|
|
|||
|
for mesh in pm.ls(type='mesh'):
|
|||
|
|
|||
|
# Create a USD Mesh primitive for the mesh object
|
|||
|
usd_mesh = UsdGeom.Mesh.Define(stage, root_xform.GetPath().AppendChild(mesh.getParent().name()))
|
|||
|
|
|||
|
# Get geometry data
|
|||
|
points, face_vertex_counts, face_vertex_indices, uv_coords = get_geometry_data(mesh)
|
|||
|
|
|||
|
# Set the collected attributes for the USD Mesh
|
|||
|
usd_mesh.GetPointsAttr().Set(points)
|
|||
|
usd_mesh.GetFaceVertexCountsAttr().Set(face_vertex_counts)
|
|||
|
usd_mesh.GetFaceVertexIndicesAttr().Set(face_vertex_indices)
|
|||
|
stAttr = usd_mesh.GetPrim().CreateAttribute("primvars:st", Sdf.ValueTypeNames.TexCoord2fArray, False)
|
|||
|
stAttr.Set(uv_coords)
|
|||
|
# 添加自定义数据
|
|||
|
# 定义自定义数据
|
|||
|
customData = {
|
|||
|
"dictionary Maya": {
|
|||
|
"token name": "map1"
|
|||
|
}
|
|||
|
}
|
|||
|
stAttr.SetCustomData(customDataDict)
|
|||
|
# 修改插值方式
|
|||
|
# 修改插值方式的元数据
|
|||
|
stAttr.SetMetadata("interpolation", UsdGeom.Tokens.faceVarying)
|
|||
|
|
|||
|
|
|||
|
def export_geometry():
|
|||
|
"""
|
|||
|
Create USD file and record geometry data
|
|||
|
"""
|
|||
|
|
|||
|
# Create USD stage
|
|||
|
usd_file_path = r"C:\Users\Jcen\Desktop\USD\temp22.usda"
|
|||
|
|
|||
|
# Create USD stage and root object
|
|||
|
stage = Usd.Stage.CreateNew(usd_file_path)
|
|||
|
spherePrim = UsdGeom.Xform.Define(stage, '/pSphere1')
|
|||
|
rootPrim = stage.GetPrimAtPath('/pSphere1')
|
|||
|
stage.SetDefaultPrim(rootPrim)
|
|||
|
|
|||
|
|
|||
|
UsdGeom.SetStageUpAxis(stage, UsdGeom.Tokens.y)
|
|||
|
stage.SetMetadata('metersPerUnit', 0.01)
|
|||
|
stage.GetRootLayer().documentation = "Generated from Composed Stage of pSphere1 layer"
|
|||
|
|
|||
|
|
|||
|
root_xform = UsdGeom.Xform.Define(stage, '/')
|
|||
|
|
|||
|
process_geometry(stage, spherePrim)
|
|||
|
|
|||
|
# Save the USD stage to the file
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
print(f'>> {usd_file_path}')
|
|||
|
|
|||
|
|
|||
|
export_geometry()
|
|||
|
# print(get_geometry_data(pm.ls(type='mesh')[0]))
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
import os
|
|||
|
import tempfile
|
|||
|
from pathlib import Path
|
|||
|
|
|||
|
import pymel.core as pm
|
|||
|
from pxr import Kind, Sdf, Tf, Usd, UsdGeom, UsdShade
|
|||
|
|
|||
|
USD_ROOT = Path("Z:/Test_USD")
|
|||
|
COMPONENT_NAME = "my_component"
|
|||
|
|
|||
|
|
|||
|
def extract_geo_proxy(src_usd_stage: Usd.Stage, dst_usd_file: Path):
|
|||
|
src_root_prim = src_usd_stage.GetDefaultPrim()
|
|||
|
src_proxy_prim = src_root_prim.GetPrimAtPath("geo/proxy")
|
|||
|
|
|||
|
if not src_proxy_prim:
|
|||
|
return
|
|||
|
|
|||
|
dst_usd_stage = Usd.Stage.CreateInMemory()
|
|||
|
dst_proxy_prim = dst_usd_stage.DefinePrim("/proxy", "Scope")
|
|||
|
dst_usd_stage.SetDefaultPrim(dst_proxy_prim)
|
|||
|
UsdGeom.SetStageMetersPerUnit(dst_usd_stage, UsdGeom.LinearUnits.centimeters)
|
|||
|
UsdGeom.SetStageUpAxis(dst_usd_stage, UsdGeom.Tokens.y)
|
|||
|
|
|||
|
UsdGeom.Imageable(dst_proxy_prim).GetPurposeAttr().Set(UsdGeom.Tokens.proxy)
|
|||
|
|
|||
|
# reference to the source proxy prim and then flatten the stage
|
|||
|
dst_proxy_prim.GetReferences().AddReference(
|
|||
|
assetPath=src_usd_stage.GetRootLayer().realPath,
|
|||
|
primPath=src_proxy_prim.GetPath(),
|
|||
|
)
|
|||
|
|
|||
|
dst_usd_stage.Flatten().Export(dst_usd_file.as_posix())
|
|||
|
|
|||
|
|
|||
|
def extract_geo_render(src_usd_stage: Usd.Stage, dst_usd_file: Path):
|
|||
|
src_root_prim = src_usd_stage.GetDefaultPrim()
|
|||
|
src_render_prim = src_root_prim.GetPrimAtPath("geo/render")
|
|||
|
|
|||
|
if not src_render_prim:
|
|||
|
return
|
|||
|
|
|||
|
dst_usd_stage = Usd.Stage.CreateInMemory()
|
|||
|
dst_render_prim = dst_usd_stage.DefinePrim("/render", "Scope")
|
|||
|
dst_usd_stage.SetDefaultPrim(dst_render_prim)
|
|||
|
UsdGeom.SetStageMetersPerUnit(dst_usd_stage, UsdGeom.LinearUnits.centimeters)
|
|||
|
UsdGeom.SetStageUpAxis(dst_usd_stage, UsdGeom.Tokens.y)
|
|||
|
|
|||
|
UsdGeom.Imageable(dst_render_prim).GetPurposeAttr().Set(UsdGeom.Tokens.render)
|
|||
|
|
|||
|
# reference to the source render prim and then flatten the stage
|
|||
|
dst_render_prim.GetReferences().AddReference(
|
|||
|
assetPath=src_usd_stage.GetRootLayer().realPath,
|
|||
|
primPath=src_render_prim.GetPath(),
|
|||
|
)
|
|||
|
|
|||
|
dst_usd_stage.Flatten().Export(dst_usd_file.as_posix())
|
|||
|
|
|||
|
|
|||
|
def extract_material(src_usd_stage: Usd.Stage, dst_usd_file: Path):
|
|||
|
src_root_prim = src_usd_stage.GetDefaultPrim()
|
|||
|
src_material_prim = src_root_prim.GetPrimAtPath("mtl")
|
|||
|
|
|||
|
if not src_material_prim:
|
|||
|
return
|
|||
|
|
|||
|
dst_usd_stage = Usd.Stage.CreateInMemory()
|
|||
|
dst_usd_stage.OverridePrim("/root")
|
|||
|
dst_mlt_prim = dst_usd_stage.DefinePrim("/root/mtl", "Scope")
|
|||
|
dst_usd_stage.SetDefaultPrim(dst_mlt_prim)
|
|||
|
|
|||
|
# reference to the source material prim
|
|||
|
dst_mlt_prim.GetReferences().AddReference(
|
|||
|
assetPath=src_usd_stage.GetRootLayer().realPath,
|
|||
|
primPath=src_material_prim.GetPath(),
|
|||
|
)
|
|||
|
|
|||
|
# Iterate over all the prims under /root/geo and extract the material binding
|
|||
|
for src_prim in Usd.PrimRange(src_root_prim.GetPrimAtPath("geo")):
|
|||
|
if not src_prim.HasAPI(UsdShade.MaterialBindingAPI):
|
|||
|
continue
|
|||
|
|
|||
|
# get the bound material from the source prim
|
|||
|
src_material_binding_api = UsdShade.MaterialBindingAPI(src_prim)
|
|||
|
material, relationship = src_material_binding_api.ComputeBoundMaterial()
|
|||
|
if not material:
|
|||
|
continue
|
|||
|
|
|||
|
# create override prim for the destination prim and set the material binding
|
|||
|
dst_prim = dst_usd_stage.OverridePrim(src_prim.GetPath())
|
|||
|
dst_material_binding_api = UsdShade.MaterialBindingAPI(dst_prim)
|
|||
|
dst_material_binding_api.Bind(material)
|
|||
|
|
|||
|
dst_root_layer = dst_usd_stage.Flatten()
|
|||
|
print(dst_root_layer.ExportToString())
|
|||
|
dst_root_layer.Export(dst_usd_file.as_posix())
|
|||
|
|
|||
|
|
|||
|
def construct_modelling_usd(
|
|||
|
modelling_usd_file: Path,
|
|||
|
proxy_usd_file: Path,
|
|||
|
render_usd_file: Path,
|
|||
|
):
|
|||
|
usd_stage = Usd.Stage.CreateNew(modelling_usd_file.as_posix())
|
|||
|
|
|||
|
# create prims
|
|||
|
root_prim = usd_stage.DefinePrim("/root", "Xform")
|
|||
|
geo_prim = usd_stage.DefinePrim("/root/geo", "Scope")
|
|||
|
proxy_prim = usd_stage.DefinePrim("/root/geo/proxy", "Scope")
|
|||
|
render_prim = usd_stage.DefinePrim("/root/geo/render", "Scope")
|
|||
|
|
|||
|
# set root prim metadata
|
|||
|
model_api = Usd.ModelAPI(root_prim)
|
|||
|
model_api.SetKind(Kind.Tokens.component)
|
|||
|
root_prim.SetInstanceable(True)
|
|||
|
|
|||
|
# use relative path to reference the proxy and render usd files
|
|||
|
proxy_relative_path = os.path.relpath(proxy_usd_file, modelling_usd_file.parent)
|
|||
|
proxy_prim.GetPayloads().SetPayloads([Sdf.Payload(proxy_relative_path)])
|
|||
|
|
|||
|
render_relative_path = os.path.relpath(render_usd_file, modelling_usd_file.parent)
|
|||
|
render_prim.GetPayloads().SetPayloads([Sdf.Payload(render_relative_path)])
|
|||
|
|
|||
|
# set the metadata for the stage
|
|||
|
usd_stage.SetDefaultPrim(root_prim)
|
|||
|
UsdGeom.SetStageMetersPerUnit(usd_stage, UsdGeom.LinearUnits.centimeters)
|
|||
|
UsdGeom.SetStageUpAxis(usd_stage, UsdGeom.Tokens.y)
|
|||
|
|
|||
|
# save the stage
|
|||
|
usd_stage.Save()
|
|||
|
|
|||
|
|
|||
|
def construct_component_usd(
|
|||
|
component_usd_file: Path,
|
|||
|
modelling_usd_file: Path,
|
|||
|
material_usd_file: Path,
|
|||
|
):
|
|||
|
usd_stage = Usd.Stage.CreateNew(component_usd_file.as_posix())
|
|||
|
|
|||
|
# add modelling usd file and material usd file as sublayers
|
|||
|
sub_layer_paths = usd_stage.GetRootLayer().subLayerPaths
|
|||
|
sub_layer_paths.append(
|
|||
|
os.path.relpath(material_usd_file, component_usd_file.parent)
|
|||
|
)
|
|||
|
sub_layer_paths.append(
|
|||
|
os.path.relpath(modelling_usd_file, component_usd_file.parent)
|
|||
|
)
|
|||
|
|
|||
|
usd_stage.Save()
|
|||
|
|
|||
|
|
|||
|
def export_usd(dag_object):
|
|||
|
# temp_dir = tempfile.mkdtemp(prefix="usd_export_")
|
|||
|
# usd_file = os.path.join(temp_dir, "temp.usda")
|
|||
|
usd_file = r"D:\Test\temp.usda"
|
|||
|
|
|||
|
pm.mayaUSDExport(
|
|||
|
file=usd_file,
|
|||
|
exportRoots=dag_object,
|
|||
|
defaultUSDFormat="usda",
|
|||
|
jobContext="Arnold",
|
|||
|
stripNamespaces=True,
|
|||
|
materialsScopeName="mtl",
|
|||
|
)
|
|||
|
|
|||
|
print(usd_file)
|
|||
|
return usd_file
|
|||
|
|
|||
|
|
|||
|
usd_file = export_usd(pm.selected()[0])
|
|||
|
|
|||
|
src_usd_stage = Usd.Stage.Open(usd_file)
|
|||
|
extract_geo_proxy(src_usd_stage, Path(r"D:\Test\proxy.usda"))
|
|||
|
extract_geo_render(src_usd_stage, Path(r"D:\Test\render.usda"))
|
|||
|
extract_material(src_usd_stage, Path(r"D:\Test\material.usda"))
|
|||
|
construct_modelling_usd(
|
|||
|
Path("D:/Test/modelling.usda"),
|
|||
|
Path("D:/Test/proxy.usda"),
|
|||
|
Path("D:/Test/render.usda"),
|
|||
|
)
|
|||
|
construct_component_usd(
|
|||
|
Path("D:/Test/component.usda"),
|
|||
|
Path("D:/Test/modelling.usda"),
|
|||
|
Path("D:/Test/material.usda"),
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
def maya_export_usd_geo(path, startTime, endTime):
|
|||
|
import maya.mel as mel
|
|||
|
import os
|
|||
|
mel.eval(
|
|||
|
f'file -force -options ";exportUVs=1;exportSkels=none;exportSkin=none;exportBlendShapes=0;exportDisplayColor=0;;exportColorSets=1;exportComponentTags=1;defaultMeshScheme=catmullClark;animation=1;eulerFilter=0;staticSingleSample=0;startTime={startTime};endTime={endTime};frameStride=1;frameSample=0.0;defaultUSDFormat=usda;parentScope=;defaultPrim={};shadingMode=useRegistry;convertMaterialsTo=[UsdPreviewSurface];exportRelativeTextures=automatic;exportInstances=1;exportVisibility=1;mergeTransformAndShape=1;stripNamespaces=0;worldspace=0;excludeExportTypes=[]" -typ "USD Export" -pr -es "{path}";'
|
|||
|
)
|
|||
|
os.rename(path, path + 'a')
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
from pxr import Usd, UsdGeom, Sdf
|
|||
|
import maya.cmds as cmds
|
|||
|
import maya.mel as mel
|
|||
|
|
|||
|
# 创建一个新的USD Stage
|
|||
|
stage = Usd.Stage.CreateNew('C:/Users/Jcen/Desktop/USD/yourStage10.usda')
|
|||
|
|
|||
|
# 在Maya中创建一个代表这个Stage的节点
|
|||
|
mayaUsdNode = cmds.createNode('mayaUsdProxyShape', name='MyUSDStage')
|
|||
|
cmds.setAttr(f'{mayaUsdNode}.filePath', 'C:/Users/Jcen/Desktop/USD/yourStage10.usda', type='string')
|
|||
|
|
|||
|
# 将sublayer文件添加到主Stage的层级中
|
|||
|
stage.GetRootLayer().subLayerPaths.append("C:/Users/Jcen/PycharmProjects/USD/assembly/cube.usda")
|
|||
|
# 创建一个新的USD Stage
|
|||
|
sublayer1 = Usd.Stage.CreateNew('C:/Users/Jcen/Desktop/USD/sublayer7.usda')
|
|||
|
|
|||
|
stage.GetRootLayer().subLayerPaths.append('C:/Users/Jcen/Desktop/USD/sublayer7.usda')
|
|||
|
|
|||
|
Sdf.Layer.FindOrOpen("C:/Users/Jcen/PycharmProjects/USD/assembly/cube.usda").SetPermissionToEdit(False)
|
|||
|
|
|||
|
# 假设你已经知道要操作的层的名字或路径
|
|||
|
layer_path = 'C:/Users/Jcen/Desktop/USD/sublayer7.usda'
|
|||
|
|
|||
|
# 使用MEL命令选中层
|
|||
|
# 注意:这里的命令可能需要根据实际的UI组件和层次结构进行调整
|
|||
|
mel.eval(f'''mayaUsdEditTarget -edit -editTarget "{layer_path}" "|mayaUsdProxy1|MyUSDStage";''')
|
|||
|
|
|||
|
|
|||
|
# 添加一个Xform和一个Cube
|
|||
|
# xformPath = Sdf.Path('/World')
|
|||
|
# cubePath = xformPath.AppendChild('Cube')
|
|||
|
|
|||
|
# xform = UsdGeom.Xform.Define(stage, xformPath)
|
|||
|
# cube = UsdGeom.Cube.Define(stage, cubePath)
|
|||
|
|
|||
|
# 设置Cube的属性
|
|||
|
# cube.GetSizeAttr().Set(1.0)
|
|||
|
|
|||
|
# 保存Stage
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
|
|||
|
# 刷新Maya视图以显示新的USD内容
|
|||
|
cmds.refresh()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
from pxr import Usd, UsdGeom, Sdf
|
|||
|
import maya.cmds as cmds
|
|||
|
import maya.mel as mel
|
|||
|
|
|||
|
# 创建一个新的USD Stage
|
|||
|
stage = Usd.Stage.CreateNew('C:/Users/Jcen/Desktop/USD/yourStage10.usda')
|
|||
|
|
|||
|
# 在Maya中创建一个代表这个Stage的节点
|
|||
|
mayaUsdNode = cmds.createNode('mayaUsdProxyShape', name='MyUSDStage')
|
|||
|
cmds.setAttr(f'{mayaUsdNode}.filePath', 'C:/Users/Jcen/Desktop/USD/yourStage10.usda', type='string')
|
|||
|
|
|||
|
# 将sublayer文件添加到主Stage的层级中
|
|||
|
stage.GetRootLayer().subLayerPaths.append("C:/Users/Jcen/PycharmProjects/USD/assembly/cube.usda")
|
|||
|
# 创建一个新的USD Stage
|
|||
|
sublayer1 = Usd.Stage.CreateNew('C:/Users/Jcen/Desktop/USD/sublayer7.usda')
|
|||
|
|
|||
|
stage.GetRootLayer().subLayerPaths.append('C:/Users/Jcen/Desktop/USD/sublayer7.usda')
|
|||
|
|
|||
|
Sdf.Layer.FindOrOpen("C:/Users/Jcen/PycharmProjects/USD/assembly/cube.usda").SetPermissionToEdit(False)
|
|||
|
|
|||
|
# 假设你已经知道要操作的层的名字或路径
|
|||
|
layer_path = 'C:/Users/Jcen/Desktop/USD/sublayer7.usda'
|
|||
|
|
|||
|
# 使用MEL命令选中层
|
|||
|
# 注意:这里的命令可能需要根据实际的UI组件和层次结构进行调整
|
|||
|
mel.eval(f'''mayaUsdEditTarget -edit -editTarget "{layer_path}" "|mayaUsdProxy1|MyUSDStage";''')
|
|||
|
|
|||
|
|
|||
|
# 添加一个Xform和一个Cube
|
|||
|
# xformPath = Sdf.Path('/World')
|
|||
|
# cubePath = xformPath.AppendChild('Cube')
|
|||
|
|
|||
|
# xform = UsdGeom.Xform.Define(stage, xformPath)
|
|||
|
# cube = UsdGeom.Cube.Define(stage, cubePath)
|
|||
|
|
|||
|
# 设置Cube的属性
|
|||
|
# cube.GetSizeAttr().Set(1.0)
|
|||
|
|
|||
|
# 保存Stage
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
|
|||
|
# 刷新Maya视图以显示新的USD内容
|
|||
|
cmds.refresh()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
from pxr import Usd, UsdGeom, Sdf
|
|||
|
import maya.cmds as cmds
|
|||
|
import maya.mel as mel
|
|||
|
|
|||
|
path = 'C:/Users/Jcen/Desktop/USD/yourStage15.usda'
|
|||
|
main = "C:/Users/Jcen/PycharmProjects/USD/assembly/cube.usda"
|
|||
|
edit = 'C:/Users/Jcen/Desktop/USD/sublayer13.usda'
|
|||
|
|
|||
|
# 创建一个新的USD Stage
|
|||
|
stage = Usd.Stage.CreateNew(path)
|
|||
|
|
|||
|
# 在Maya中创建一个代表这个Stage的节点
|
|||
|
mayaUsdNode = cmds.createNode('mayaUsdProxyShape', name='MyUSDStage')
|
|||
|
cmds.setAttr(f'{mayaUsdNode}.filePath', path, type='string')
|
|||
|
|
|||
|
# 将sublayer文件添加到主Stage的层级中
|
|||
|
# workingLayer = Sdf.Layer.FindOrOpen(main)
|
|||
|
# stage.SetEditTarget(workingLayer)
|
|||
|
|
|||
|
# workingLayer1 = Sdf.Layer.FindOrOpen("C:/Users/Jcen/Desktop/USD/sublayer8.usda")
|
|||
|
# stage.SetEditTarget(workingLayer1)
|
|||
|
|
|||
|
stage.GetRootLayer().subLayerPaths.append(main)
|
|||
|
# 创建一个新的USD Stage
|
|||
|
sublayer1 = Usd.Stage.CreateNew(edit)
|
|||
|
sublayer1.GetRootLayer().Save()
|
|||
|
stage.GetRootLayer().subLayerPaths.append(edit)
|
|||
|
|
|||
|
Sdf.Layer.FindOrOpen(main).SetPermissionToEdit(False)
|
|||
|
|
|||
|
Sdf.Layer.FindOrOpen(path).SetPermissionToEdit(False)
|
|||
|
# 假设你已经知道要操作的层的名字或路径
|
|||
|
layer_path = edit
|
|||
|
# 使用MEL命令选中层
|
|||
|
# 注意:这里的命令可能需要根据实际的UI组件和层次结构进行调整
|
|||
|
mel.eval(f'''mayaUsdEditTarget -edit -editTarget "{layer_path}" "|mayaUsdProxy1|MyUSDStage";''')
|
|||
|
|
|||
|
|
|||
|
# 添加一个Xform和一个Cube
|
|||
|
# xformPath = Sdf.Path('/World')
|
|||
|
# cubePath = xformPath.AppendChild('Cube')
|
|||
|
|
|||
|
# xform = UsdGeom.Xform.Define(stage, xformPath)
|
|||
|
# cube = UsdGeom.Cube.Define(stage, cubePath)
|
|||
|
|
|||
|
# 设置Cube的属性
|
|||
|
# cube.GetSizeAttr().Set(1.0)
|
|||
|
|
|||
|
# 保存Stage
|
|||
|
# stage.GetRootLayer().Save()
|
|||
|
|
|||
|
# 刷新Maya视图以显示新的USD内容
|
|||
|
cmds.refresh()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
from pxr import Usd, UsdGeom, Sdf
|
|||
|
|
|||
|
|
|||
|
|
|||
|
stage = Usd.Stage.Open(r"C:\Users\Jcen\Desktop\test11111.usd")
|
|||
|
|
|||
|
rootPrim = stage.GetPrimAtPath('/pCube3')
|
|||
|
|
|||
|
stAttr = rootPrim.GetPrim().CreateAttribute("primvars:arnold:visibility:camera", Sdf.ValueTypeNames.Bool, False)
|
|||
|
stAttr.Set(False)
|
|||
|
|
|||
|
stage.GetRootLayer().Save()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
import maya.app.renderSetup.model.renderSetup as renderSetup
|
|||
|
|
|||
|
rs = renderSetup.instance()
|
|||
|
|
|||
|
selectedLayer = rs.getVisibleRenderLayer()
|
|||
|
|
|||
|
print("当前选择的 Render Setup 层是:", selectedLayer.name())
|
|||
|
|
|||
|
|
|||
|
import maya.cmds as cmds
|
|||
|
|
|||
|
def customCallback():
|
|||
|
print("Custom callback function executed before rendering")
|
|||
|
# 在这里可以添加你想要在渲染前执行的操作
|
|||
|
|
|||
|
# 注册渲染前的回调函数
|
|||
|
jobNum = cmds.scriptJob(event=["renderLayerManagerChange", customCallback], protected=True)
|
|||
|
|
|||
|
# 在这里可以添加其他需要执行的操作
|
|||
|
|
|||
|
# 删除回调函数
|
|||
|
# cmds.scriptJob(kill=jobNum)
|
|||
|
|
|||
|
|
|||
|
import ufe
|
|||
|
|
|||
|
for i in range(100):
|
|||
|
print(i)
|
|||
|
|
|||
|
|
|||
|
globalSelection = ufe.GlobalSelection.get()
|
|||
|
|
|||
|
print(globalSelection)
|
|||
|
tt = globalSelection.front()
|
|||
|
print(tt.path())
|
|||
|
|
|||
|
import mayaUsd.ufe
|
|||
|
stage = mayaUsd.ufe.getStage(str(tt.path()).split('/')[0])
|
|||
|
print(stage)
|
|||
|
s = stage.GetRootLayer().realPath
|
|||
|
|
|||
|
print(s)
|
|||
|
|
|||
|
python("exec(open('C:/Users/Jcen/PycharmProjects/USD/renderseting/tstmel.py').read())");
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
from pxr import Usd, Sdf
|
|||
|
|
|||
|
# 创建源Stage并添加一个Prim
|
|||
|
source_stage = Usd.Stage.CreateNew("source.usda")
|
|||
|
source_prim = source_stage.DefinePrim("/SourcePrim", "Xform")
|
|||
|
source_prim.CreateAttribute("exampleAttr", Sdf.ValueTypeNames.String).Set("Hello, USD")
|
|||
|
|
|||
|
# 创建新的Stage
|
|||
|
new_stage = Usd.Stage.CreateNew("target.usda")
|
|||
|
|
|||
|
# 获取源Stage和新Stage的根Layer
|
|||
|
source_layer = source_stage.GetRootLayer()
|
|||
|
target_layer = new_stage.GetRootLayer()
|
|||
|
|
|||
|
# 复制Spec从源Layer到目标Layer
|
|||
|
if Sdf.CopySpec(source_layer, source_prim.GetPath(), target_layer, "/TargetPrim"):
|
|||
|
print("复制成功")
|
|||
|
else:
|
|||
|
print("复制失败")
|
|||
|
|
|||
|
# 保存新Stage
|
|||
|
new_stage.GetRootLayer().Save()
|