X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Fmaterial.py;h=3b79036181d0d45ab6af0da226ef39cecb59e2d6;hb=fb5f83c2e3f8f8a6a6444a33bec15e9477a487d1;hp=0c021c2227a9b2a8f704148d33a52fbe453c993d;hpb=bc1675de82ea5c4a07bea4c5afa9c59c497464d2;p=libs%2Fgl.git diff --git a/blender/io_mspgl/material.py b/blender/io_mspgl/material.py index 0c021c22..3b790361 100644 --- a/blender/io_mspgl/material.py +++ b/blender/io_mspgl/material.py @@ -20,7 +20,7 @@ class MaterialProperty: self.value = input_socket.default_value[:len(self.value)-1]+(alpha_socket.default_value,) else: self.value = input_socket.default_value[:len(self.value)] - else: + elif self.value is not None: self.value = input_socket.default_value from_node, _ = get_linked_node_and_socket(node_tree, input_socket) @@ -48,12 +48,8 @@ class MaterialProperty: class Material: def __init__(self, material): self.name = material.name - - self.base_color = MaterialProperty((0.8, 0.8, 0.8, 1.0)) - self.metalness = MaterialProperty(0.0) - self.roughness = MaterialProperty(0.5) - self.normal = MaterialProperty((0.0, 0.0, 0.1)) - self.emission = MaterialProperty((0.0, 0.0, 0.0)) + self.type = None + self.properties = {} self.render_mode = material.render_mode self.technique = material.technique @@ -75,20 +71,28 @@ class Material: surface_node, _ = get_linked_node_and_socket(material.node_tree, out_node.inputs["Surface"]) if not surface_node: - raise Exception("Material has no surface node") + if self.render_mode=='BUILTIN': + raise Exception("Empty material can't use builtin rendering mode") + return elif surface_node.type!='BSDF_PRINCIPLED': raise Exception("Unsupported surface node type "+surface_node.type) - self.base_color.set_from_input(material.node_tree, surface_node.inputs["Base Color"], surface_node.inputs["Alpha"]) - self.metalness.set_from_input(material.node_tree, surface_node.inputs["Metallic"]) - self.roughness.set_from_input(material.node_tree, surface_node.inputs["Roughness"]) - self.normal.set_from_input(material.node_tree, surface_node.inputs["Normal"]) - self.emission.set_from_input(material.node_tree, surface_node.inputs["Emission"]) + self.type = "pbr" + + base_color = self.properties["base_color"] = MaterialProperty((0.8, 0.8, 0.8, 1.0)) + metalness = self.properties["metalness"] = MaterialProperty(0.0) + roughness = self.properties["roughness"] = MaterialProperty(0.5) + normal = self.properties["normal"] = MaterialProperty(None) + emission = self.properties["emission"] = MaterialProperty((0.0, 0.0, 0.0)) - self.properties = (self.base_color, self.metalness, self.roughness, self.normal, self.emission) + base_color.set_from_input(material.node_tree, surface_node.inputs["Base Color"], surface_node.inputs["Alpha"]) + metalness.set_from_input(material.node_tree, surface_node.inputs["Metallic"]) + 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"]) sampler_settings = None - for p in self.properties: + for p in self.properties.values(): if p.texture: settings = (p.texture.default_filter, p.texture.interpolation, p.texture.use_mipmap, p.texture.max_anisotropy) if sampler_settings is None: