if l.technique!=prev_tech[0]:
same_tech = False
if i==0 or not same_tech:
- self.export_object_technique(l, mesh, out_file, i)
+ self.export_object_technique(l, out_file, i)
prev_tech = (l.technique, mat)
if i>0:
return mesh
- def export_object_technique(self, obj, mesh, out_file, lod_index):
+ def export_object_technique(self, obj, out_file, lod_index):
material = None
if obj.material_slots:
material = obj.material_slots[0].material
if self.shared_tech and material:
name = material.name+".tech"
tech_out = open_output(os.path.join(path, name))
- self.export_technique_definition(material, mesh, tech_out)
+ self.export_technique_definition(material, tech_out)
out_file.write("technique", '"{}"'.format(name))
else:
out_file.begin("technique")
- self.export_technique_definition(material, obj.material_tex, mesh, out_file)
+ self.export_technique_definition(material, out_file)
out_file.end()
- def export_technique_definition(self, material, material_tex, mesh, out_file):
+ def export_technique_definition(self, material, out_file):
out_file.begin("pass", '""')
if material:
- if material_tex:
- out_file.begin("material")
- out_file.write("diffuse", 1.0, 1.0, 1.0, 1.0)
- out_file.end()
- out_file.begin("texunit", 0)
- out_file.begin("texture2d")
- out_file.write("min_filter", "NEAREST")
- out_file.write("mag_filter", "NEAREST")
- out_file.write("storage", "RGB", len(mesh.materials), 1)
- texdata = '"'
- for m in mesh.materials:
- cm = get_colormap(m.srgb_colors)
- color = [int(cm(c)*255) for c in m.diffuse_color*m.diffuse_intensity]
- texdata += "\\x%02X\\x%02X\\x%02X"%tuple(color)
- texdata += '"'
- out_file.write("raw_data", texdata)
- out_file.end()
- out_file.end()
- else:
- out_file.begin("material")
- self.export_material(material, out_file)
- out_file.end()
+ out_file.begin("material")
+ self.export_material(material, out_file)
+ out_file.end()
if self.textures!="NONE":
diffuse_tex = None
for g in v.groups:
g.group = group_index_map[g.group]
- def prepare_uv(self, obj, progress):
- if obj.material_tex and self.use_uv!='NONE':
- layer = UvLayer("material_tex")
-
- if self.use_uv=='UNIT0':
- self.uv_layers = [layer]
- layer.unit = 0
- else:
- self.uv_layers.append(layer)
- layer.unit = max((u.unit+1 for u in self.uv_layers if u.unit is not None), default=0)
-
- layer.uvs = [None]*len(self.loops)
- for f in self.faces:
- uv = mathutils.Vector(((f.material_index+0.5)/len(self.materials), 0.5))
- for i in f.loop_indices:
- layer.uvs[i] = uv
-
+ def prepare_uv(self, progress):
# Form a list of UV layers referenced by materials with the array atlas
# property set
array_uv_layers = [t.uv_layer for m in self.materials if m.array_atlas for t in m.texture_slots if t and t.texture_coords=='UV']
progress.set_task("Vertex groups", 0.5, 0.6)
mesh.prepare_vertex_groups(obj)
progress.set_task("Preparing UVs", 0.6, 0.8)
- mesh.prepare_uv(obj, progress)
+ mesh.prepare_uv(progress)
progress.set_task("Render sequence", 0.8, 1.0)
mesh.prepare_sequence(progress)
self.layout.prop(obj, "inherit_tech")
if obj.inherit_tech:
self.layout.prop(obj, "override_material")
- self.layout.prop(obj, "material_tex")
self.layout.prop(obj, "compound")
self.layout.prop(obj, "lod_for_parent")
if obj.lod_for_parent:
bpy.types.Object.technique = bpy.props.StringProperty(name="Technique", description="Name of the technique to use for rendering")
bpy.types.Object.inherit_tech = bpy.props.BoolProperty(name="Inherit technique", description="Inherit from the technique to customize textures")
bpy.types.Object.override_material = bpy.props.BoolProperty(name="Override material", description="Override material in the inherited technique as well", default=True)
- bpy.types.Object.material_tex = bpy.props.BoolProperty(name="Material texture", description="Generate a texture based on material colors", default=False)
bpy.types.Object.compound = bpy.props.BoolProperty(name="Compound with parent", description="Join this object to its parent when exporting")
bpy.types.Object.lod_for_parent = bpy.props.BoolProperty(name="LoD for parent", description="This object is a level of detail for its parent")
bpy.types.Object.lod_index = bpy.props.IntProperty(name="LoD index", description="Index of the level of detail", min=1, max=16, default=1)