X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=blender%2Fio_mspgl%2Fmaterial.py;h=dc6d934bedfdcc5c5e968cbbdf2fd878844d7709;hp=842261303ddb01c0ea412fc5e5bde2a6f3b6973f;hb=893c0645802c46eb60b04a87e79a5a4d69e32ea2;hpb=d9fbb830ddf5c9b69a046a641b16d6ae25d216b1 diff --git a/blender/io_mspgl/material.py b/blender/io_mspgl/material.py index 84226130..dc6d934b 100644 --- a/blender/io_mspgl/material.py +++ b/blender/io_mspgl/material.py @@ -18,7 +18,9 @@ class PropertyNode: self.input = None checks = [self.check_group, + self.check_scale, self.check_gray, + self.check_extract, self.check_normal, self.check_invert_channels, self.check_additive_blend, @@ -50,11 +52,28 @@ class PropertyNode: self.data = inner.data return self.set_input_from_linked(self.node.inputs[0]) + def check_scale(self): + if self.node.type!='MATH': + return + + if self.node.operation=='MULTIPLY': + for i in range(2): + if not self.node.inputs[i].is_linked: + self.type = 'SCALE' + self.data = self.node.inputs[i].default_value + return self.set_input_from_linked(self.node.inputs[1-i]) + def check_gray(self): if self.node.type=='RGBTOBW': self.type = 'GRAY' self.set_input_from_linked(self.node.inputs["Color"]) + def check_extract(self): + if self.node.type=='SEPRGB': + self.type = 'EXTRACT' + self.data = self.socket.name[0] + return self.set_input_from_linked(self.node.inputs["Image"]) + def check_normal(self): if self.node.type=='NORMAL_MAP': self.type = 'NORMAL' @@ -132,6 +151,7 @@ class MaterialProperty: self.value = value self.texture = None self.tex_channels = None + self.scale = 1.0 def set_from_input(self, node_tree, input_socket, alpha_socket=None): if self.keyword: @@ -157,8 +177,12 @@ class MaterialProperty: channels = ['R', 'G', 'B'] elif n.type=='GRAY': channels = ['Y'] + elif n.type=='EXTRACT': + channels = [n.data] elif n.type=='INVERT': channels = ['~'+c if c in n.data else c for c in channels] + elif n.type=='SCALE': + self.scale = n.data elif n.type=='TEXTURE': self.texture = n.node n = n.input @@ -168,7 +192,12 @@ class MaterialProperty: if alpha_from and alpha_from!=self.texture: raise Exception("Separate textures for color and alpha are not supported") - if self.texture: + if self.scale==0.0 and self.keyword and type(self.value)!=tuple: + self.texture = None + self.value = self.scale + elif self.scale!=1.0: + raise Exception("Unsupported material property scale {}".format(self.scale)) + elif self.texture: if channels: self.tex_channels = channels elif alpha_from: