houdini一键上材质代码

import hou

def getGalleries(node_typename = 'materialbuilder', keyword_pattern = 'Mantra'):
galLists = []
node_type = hou.nodeType(hou.vopNodeTypeCategory(), node_typename)
galLists = list(hou.galleries.galleryEntries(keyword_pattern=keyword_pattern, node_type=node_type))
return galLists

def showMatUi():
type_choices = ('materialbuilder', 'principledshader', 'pyroshader')
type_index = hou.ui.selectFromList(choices=type_choices, default_choices=[0], exclusive=True)[0]
node_typename = type_choices[type_index]<span id="more-298"></span>
return node_typename

def showGalUi(matlists):
gal_choices = []
for each in matlists:
gal_choices.append(each.name())

gal_index = hou.ui.selectFromList(choices=gal_choices, default_choices=[0], exclusive=True)[0]
mat_gal = matlists[gal_index]
return mat_gal

def getMousePos():
mouseInfo = []
plane = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor)
pos = plane.selectPosition()
parent = plane.pwd()
mouseInfo.append(pos)
mouseInfo.append(parent)
return mouseInfo

def createNode(node, node_typename, mat_gal, isgeo = 0):
mat = hou.node('/mat')
if isgeo:
material_mat = mat.createNode(node_type_name=node_typename, node_name=mat_gal.name())
mat_gal.applyToNode(material_mat)
path = material_mat.path()
node.parm('shop_materialpath').set(path)
if not isgeo:
mouseInfo = getMousePos()
material_sop = mouseInfo[1].createNode('material')
material_mat = mat.createNode(node_type_name=node_typename, node_name=mat_gal.name())
mat_gal.applyToNode(material_mat)
path = material_mat.path()
material_sop.setFirstInput(node)
material_sop.setPosition(mouseInfo[0])
material_sop.parm('shop_materialpath1').set(path)
material_sop.setDisplayFlag(1)
material_sop.setRenderFlag(1)
mat.layoutChildren()

def main():
nodes = hou.selectedNodes()
if len(nodes):
node = nodes[0]
node_typename = showMatUi()
matlists = getGalleries(node_typename=node_typename)
mat_gal = showGalUi(matlists)
if node.type().name() == 'geo':
createNode(node=node, node_typename=node_typename, mat_gal=mat_gal, isgeo=1)
else:
createNode(node=node, node_typename=node_typename, mat_gal=mat_gal, isgeo=0)
else:
print('至少选择一个sop节点或者geo节点~~!!')
点赞

发表回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像