return get_linked_node_and_socket(node_tree, red.inputs["Image"])
+def get_unlit_inputs(node_tree, node):
+ if node.type=='GROUP':
+ return check_group(node_tree, node, get_unlit_inputs)
+ elif node.type=='MIX_SHADER':
+ from .util import get_linked_node_and_socket
+
+ shader1, _ = get_linked_node_and_socket(node_tree, node.inputs[1])
+ shader2, _ = get_linked_node_and_socket(node_tree, node.inputs[2])
+ if shader1.type=='BSDF_TRANSPARENT' and shader2.type=='EMISSION':
+ factor_input = node.inputs["Fac"]
+ factor_from, _ = get_linked_node_and_socket(node_tree, factor_input)
+ color_input = shader2.inputs["Color"]
+ color_from, _ = get_linked_node_and_socket(node_tree, color_input)
+ if factor_from==color_from:
+ return (color_input, factor_input)
+ elif node.type=='EMISSION':
+ return (node.inputs["Color"], None)
+ return (None, None)
+
class MaterialProperty:
def __init__(self, keyword, tex_keyword, value):
self.keyword = keyword
roughness.set_from_input(material.node_tree, surface_node.inputs["Roughness"])
normal.set_from_input(material.node_tree, surface_node.inputs["Normal"])
emission.set_from_input(material.node_tree, surface_node.inputs["Emission"])
- elif surface_node.type=='EMISSION':
+ elif surface_node.type=='EMISSION' or surface_node.type=='MIX_SHADER':
+ color_input, alpha_input = get_unlit_inputs(material.node_tree, surface_node)
+ if not color_input:
+ raise Exception("Unsupported configuration for unlit material {}".format(self.name))
+
self.type = "unlit"
color = self.create_property("color", "texture", (1.0, 1.0, 1.0, 1.0))
- color.set_from_input(material.node_tree, surface_node.inputs["Color"])
+ color.set_from_input(material.node_tree, color_input, alpha_input)
else:
raise Exception("Unsupported surface node type {} on material {}".format(surface_node.type, self.name))