X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=blender%2Fio_mspgl%2Fexport_material.py;h=0860c28bbc2061a0cf1ed0c31b8689175504d7d9;hp=46b571a9202e3408662b95f79a11debc8d9c8e8d;hb=bde3ec824d300e9aff11914406fb76dd9016e387;hpb=a42739b48ffbd0247a3b3bb6fc67160494959b5b diff --git a/blender/io_mspgl/export_material.py b/blender/io_mspgl/export_material.py index 46b571a9..0860c28b 100644 --- a/blender/io_mspgl/export_material.py +++ b/blender/io_mspgl/export_material.py @@ -1,18 +1,5 @@ import os -def linear_to_srgb(l): - if l<0.0031308: - return 12.92*l - else: - return 1.055*(l**(1/2.4))-0.055 - -def get_colormap(srgb): - if srgb: - return linear_to_srgb - else: - return lambda x: x - - class MaterialExporter: def __init__(self): self.single_file = True @@ -96,7 +83,9 @@ class MaterialExporter: mat_res = Resource(material.name+".mat") statements = mat_res.statements + from .util import get_colormap cm = get_colormap(material.srgb_colors) + if any(s.use_map_color_diffuse for s in material.texture_slots if s): statements.append(Statement("diffuse", 1.0, 1.0, 1.0, 1.0)) amb = cm(material.ambient) @@ -111,3 +100,60 @@ class MaterialExporter: statements.append(Statement("shininess", material.specular_hardness)) return mat_res + + +class MaterialMapExporter: + def __init__(self): + self.single_file = True + + def export_technique_resources(self, material_map, resources): + from .datafile import Resource, Statement, Token + diffuse_name = material_map.name+"_diffuse.tex2d" + if diffuse_name not in resources: + diffuse_res = Resource(diffuse_name) + + fmt = 'SRGB_ALPHA' if material_map.srgb_colors else 'RGBA' + + diffuse_res.statements.append(Statement("min_filter", Token('NEAREST'))) + diffuse_res.statements.append(Statement("mag_filter", Token('NEAREST'))) + diffuse_res.statements.append(Statement("storage", Token(fmt), *material_map.size)) + diffuse_res.statements.append(Statement("raw_data", material_map.diffuse_data)) + + resources[diffuse_name] = diffuse_res + + if "basic_white.mat" not in resources: + mat_res = Resource("basic_white.mat") + mat_res.statements.append(Statement("diffuse", 1.0, 1.0, 1.0, 1.0)) + + resources["basic_white.mat"] = mat_res + + def export_technique(self, material_map, *, resources=None): + from .datafile import Resource, Statement + tech_res = Resource(material_map.name+".tech") + + mat_res = resources["basic_white.mat"] + diffuse_res = resources[material_map.name+"_diffuse.tex2d"] + + if material_map.technique: + if self.single_file: + raise Exception("Can't export inherited technique to a single file") + + st = Statement("inherit", material_map.technique) + st.sub.append(tech_res.create_reference_statement("texture", "diffuse_map", diffuse_res)) + st.sub.append(tech_res.create_reference_statement("material", "surface", mat_res)) + tech_res.statements.append(st) + else: + st = Statement("pass", "") + if self.single_file: + st.sub.append(tech_res.create_embed_statement("material", mat_res)) + else: + st.sub.append(tech_res.create_reference_statement("material", mat_res)) + ss = Statement("texunit", 0) + if self.single_file: + ss.sub.append(tech_res.create_embed_statement("texture2d", diffuse_res)) + else: + ss.sub.append(tech_res.create_reference_statement("texture", diffuse_res)) + st.sub.append(ss) + tech_res.statements.append(st) + + return tech_res