adp001 opened this issue on Apr 04, 2021 ยท 3 posts
adp001 posted Mon, 05 April 2021 at 1:03 AM
Update: Set the correct render engine in Shadertree.
def copy_material(source_material, target_material, clean=True):
assert isinstance(source_material, poser.MaterialType)
assert isinstance(target_material, poser.MaterialType)
target_layer_names = [l.Name() for l in target_material.Layers()]
for source_idx, source_layer in enumerate(source_material.Layers()):
if source_layer.Name() not in target_layer_names:
target_material.CreateLayer(source_layer.Name())
target_layer_names = [l.Name() for l in target_material.Layers()]
target_idx = target_layer_names.index(source_layer.Name())
source_tree = source_material.LayerShaderTree(source_idx)
target_tree = target_material.LayerShaderTree(target_idx)
if clean:
for node in target_tree.Nodes():
if not node.Type() in "PoserSurface CyclesSurface":
node.Delete()
copy_shadertree(source_tree, target_tree)
for renderengine in (poser.kRenderEngineCodeFIREFLY,
poser.kRenderEngineCodeSUPERFLY,
poser.kRenderEngineCodePOSER4):
root_node = source_tree.RendererRootNode(renderengine)
if root_node:
troot = target_tree.NodeByInternalName(root_node.InternalName())
target_tree.SetRendererRootNode(renderengine, troot)