self.scale = 1.0
self.tint = None
- def set_from_input(self, node_tree, input_socket, alpha_socket=None):
+ def set_from_input(self, node_tree, input_socket, *, alpha_socket=None, strength_socket=None):
if self.keyword:
if type(self.value)==tuple:
if alpha_socket:
self.value = input_socket.default_value[:len(self.value)-1]+(alpha_socket.default_value,)
+ elif strength_socket:
+ self.value = tuple(c*strength_socket.default_value for c in input_socket.default_value[:len(self.value)])
else:
self.value = input_socket.default_value[:len(self.value)]
else:
from .util import get_linked_node_and_socket
from_node, from_sock = get_linked_node_and_socket(node_tree, input_socket)
+ if strength_socket:
+ if not from_node:
+ if input_socket.default_value[:3]!=(1.0, 1.0, 1.0):
+ raise Exception("Unsupported material property scale {}".format(input_socket.default_value))
+ from_node, from_sock = get_linked_node_and_socket(node_tree, strength_socket)
+ elif strength_socket.is_linked:
+ raise Exception("Separate inputs for value and strength are not supported")
+ elif strength_socket.default_value!=1.0:
+ raise Exception("Unsupported material property scale {}".format(strength_node.default_value))
+
alpha_from = None
if from_node:
channels = None
normal = self.create_property("normal_map")
emission = self.create_property("emission", (0.0, 0.0, 0.0))
- base_color.set_from_input(node_tree, from_node.inputs["Base Color"], from_node.inputs["Alpha"])
+ base_color.set_from_input(node_tree, from_node.inputs["Base Color"], alpha_socket=from_node.inputs["Alpha"])
if base_color.tint:
tint.value = base_color.tint
metalness.set_from_input(node_tree, from_node.inputs["Metallic"])
roughness.set_from_input(node_tree, from_node.inputs["Roughness"])
normal.set_from_input(node_tree, from_node.inputs["Normal"])
- emission.set_from_input(node_tree, from_node.inputs["Emission"])
+ emission.set_from_input(node_tree, from_node.inputs["Emission Color"], strength_socket=from_node.inputs["Emission Strength"])