импортируйте maya.cmds как cmds
def _connect_place2d(substance_node):
" "" Соединяет узел текстуры Place2d с узлом Substance """
place_node = cmds.shadingNode('place2dTexture', asUtility=True)
Код: Выделить всё
connect_attrs = [('outUV', 'uvCoord'), ('outUvFilterSize', 'uvFilterSize')]
for out_attr, in_attr in connect_attrs:
cmds.connectAttr('{}.{}'.format(place_node, out_attr),
'{}.{}'.format(substance_node, in_attr))
""" Обходит граф шейдера, чтобы найти группу шейдеров """
result = None
Код: Выделить всё
connections = cmds.listConnections(node, source=False)
if connections:
for connection in connections:
if cmds.nodeType(connection) == 'shadingEngine':
result = connection
else:
result = _find_shading_group(connection)
if result is not None:
break
return result
""" Импортирует сетку в Maya и применяет к ней шейдер из
рабочего процесса Substance """
geometry = cmds.ls(geometry=True)
Код: Выделить всё
# Create the substance node and connect the place2d texture node
substance_node = cmds.shadingNode('substanceNode', asTexture=True)
_connect_place2d(substance_node)
# Load the Substance file
cmds.substanceNodeLoadSubstance(substance_node, substance_file)
# Apply the workflow
cmds.substanceNodeApplyWorkflow(substance_node, workflow=workflow)
# Acquire the shading group and apply it to the mesh
shading_group = _find_shading_group(substance_node)
""" Получает sbsar из диалогового окна файла, загружает и применяет его к
любой выбранной сетке """
file_filter = 'Вещество (*.sbsar);;'
Код: Выделить всё
files = cmds.fileDialog2(cap='Select a Substance file', fm=1, dialogStyle=2,
okc='Open', fileFilter=file_filter)
if files:
substance_file = files[0]
_apply_substance_workflow_to_selected(substance_file,
cmds.substanceGetWorkflow())
demo_load_sbsar_workflow()
Я был полностью уверен, что выбранная текстура будет применена сразу к выбранной мной сетке, а не к каждому объекту.
Подробнее здесь: https://stackoverflow.com/questions/782 ... hon-script