Beispiel #1
0
    def draw(self, context):
        material = context.active_object.active_material
        mmd_material = material.mmd_material

        layout = self.layout

        fnMat = FnMaterial(material)

        col = layout.column()
        col.label(text='Texture:')
        r = col.row(align=True)
        tex = fnMat.get_texture()
        if tex:
            if tex.type == 'IMAGE' and tex.image:
                r.prop(tex.image, 'filepath', text='')
                r.operator('mmd_tools.material_remove_texture',
                           text='',
                           icon='PANEL_CLOSE')
            else:
                r.operator('mmd_tools.material_remove_texture',
                           text='Remove',
                           icon='PANEL_CLOSE')
                r.label(icon='ERROR')
        else:
            r.operator('mmd_tools.material_open_texture',
                       text='Add',
                       icon=ICON_FILE_FOLDER)

        col = layout.column()
        col.label(text='Sphere Texture:')
        r = col.row(align=True)
        tex = fnMat.get_sphere_texture()
        if tex:
            if tex.type == 'IMAGE' and tex.image:
                r.prop(tex.image, 'filepath', text='')
                r.operator('mmd_tools.material_remove_sphere_texture',
                           text='',
                           icon='PANEL_CLOSE')
            else:
                r.operator('mmd_tools.material_remove_sphere_texture',
                           text='Remove',
                           icon='PANEL_CLOSE')
                r.label(icon='ERROR')
        else:
            r.operator('mmd_tools.material_open_sphere_texture',
                       text='Add',
                       icon=ICON_FILE_FOLDER)
        col.row(align=True).prop(mmd_material,
                                 'sphere_texture_type',
                                 expand=True)

        col = layout.column()
        row = col.row()
        row.prop(mmd_material, 'is_shared_toon_texture')
        r = row.row()
        r.active = mmd_material.is_shared_toon_texture
        r.prop(mmd_material, 'shared_toon_texture')
        r = col.row()
        r.active = not mmd_material.is_shared_toon_texture
        r.prop(mmd_material, 'toon_texture')
    def __importMaterials(self):
        self.__importTextures()

        pmxModel = self.__model

        self.__materialFaceCountTable = []
        for i in pmxModel.materials:
            mat = bpy.data.materials.new(name=i.name)
            self.__materialTable.append(mat)
            mmd_mat = mat.mmd_material
            mat.diffuse_color = i.diffuse[0:3]
            mat.alpha = i.diffuse[3]
            mat.specular_color = i.specular
            if mat.alpha < 1.0 or mat.specular_alpha < 1.0 or i.texture != -1:
                mat.use_transparency = True
                mat.transparency_method = 'Z_TRANSPARENCY'

            mmd_mat.name_j = i.name
            mmd_mat.name_e = i.name_e
            mmd_mat.ambient_color = i.ambient
            mmd_mat.diffuse_color = i.diffuse[0:3]
            mmd_mat.alpha = i.diffuse[3]
            mmd_mat.specular_color = i.specular
            mmd_mat.shininess = i.shininess
            mmd_mat.is_double_sided = i.is_double_sided
            mmd_mat.enabled_drop_shadow = i.enabled_drop_shadow
            mmd_mat.enabled_self_shadow_map = i.enabled_self_shadow_map
            mmd_mat.enabled_self_shadow = i.enabled_self_shadow
            mmd_mat.enabled_toon_edge = i.enabled_toon_edge
            mmd_mat.edge_color = i.edge_color
            mmd_mat.edge_weight = i.edge_size
            mmd_mat.sphere_texture_type = str(i.sphere_texture_mode)
            if i.is_shared_toon_texture:
                mmd_mat.is_shared_toon_texture = True
                mmd_mat.shared_toon_texture = i.toon_texture
            else:
                mmd_mat.is_shared_toon_texture = False
                if i.toon_texture >= 0:
                    mmd_mat.toon_texture = self.__textureTable[i.toon_texture]
                else:
                    mmd_mat.toon_texture = ''
            mmd_mat.comment = i.comment

            self.__materialFaceCountTable.append(int(i.vertex_count/3))
            self.__meshObj.data.materials.append(mat)
            fnMat = FnMaterial(mat)
            if i.texture != -1:
                texture_slot = fnMat.create_texture(self.__textureTable[i.texture])
                texture_slot.texture.use_mipmap = self.__use_mipmap
                self.__imageTable[len(self.__materialTable)-1] = texture_slot.texture.image
            if i.sphere_texture_mode == 2:
                amount = self.__spa_blend_factor
            else:
                amount = self.__sph_blend_factor
            if i.sphere_texture != -1 and amount != 0.0:
                texture_slot = fnMat.create_sphere_texture(self.__textureTable[i.sphere_texture])
                texture_slot.diffuse_color_factor = amount
                if i.sphere_texture_mode == 3 and getattr(pmxModel.header, 'additional_uvs', 0):
                    texture_slot.uv_layer = 'UV1' # for SubTexture
                    mmd_mat.sphere_texture_type = mmd_mat.sphere_texture_type # re-update
    def __clean_toon_edge(self, obj):
        if 'mmd_edge_preview' in obj.modifiers:
            obj.modifiers.remove(obj.modifiers['mmd_edge_preview'])

        if 'mmd_edge_preview' in obj.vertex_groups:
            obj.vertex_groups.remove(obj.vertex_groups['mmd_edge_preview'])

        FnMaterial.clean_materials(obj, can_remove=lambda m: m and m.name.startswith('mmd_edge.'))
Beispiel #4
0
 def execute(self, context):
     obj = context.active_object
     current_idx = obj.active_material_index
     next_index = current_idx + 1
     try:
         FnMaterial.swap_materials(obj, current_idx, next_index,
                                   reverse=True, swap_slots=True)
     except MaterialNotFoundError:
         self.report({'ERROR'}, 'Materials not found')
         return { 'CANCELLED' }
     obj.active_material_index = next_index
     return { 'FINISHED' }
    def draw(self, context):
        material = context.active_object.active_material
        mmd_material = material.mmd_material

        layout = self.layout

        fnMat = FnMaterial(material)

        col = layout.column(align=True)
        row = col.row(align=True)
        row.label('Texture:')
        r = row.column(align=True)
        tex = fnMat.get_texture()
        if tex:
            if tex.type == 'IMAGE' and tex.image:
                r2 = r.row(align=True)
                r2.prop(tex.image, 'filepath', text='')
                r2.operator('mmd_tools.material_remove_texture', text='', icon='PANEL_CLOSE')
            else:
                r.operator('mmd_tools.material_remove_texture', text='Remove', icon='PANEL_CLOSE')
                col.label('Texture is invalid.', icon='ERROR')
        else:
            r.operator('mmd_tools.material_open_texture', text='Add', icon='FILESEL')

        col = layout.column(align=True)
        row = col.row(align=True)
        row.label('Sphere Texture:')
        r = row.column(align=True)
        tex = fnMat.get_sphere_texture()
        if tex:
            if tex.type == 'IMAGE' and tex.image:
                r2 = r.row(align=True)
                r2.prop(tex.image, 'filepath', text='')
                r2.operator('mmd_tools.material_remove_sphere_texture', text='', icon='PANEL_CLOSE')
            else:
                r.operator('mmd_tools.material_remove_sphere_texture', text='Remove', icon='PANEL_CLOSE')
                col.label('Sphere Texture is invalid.', icon='ERROR')
        else:
            r.operator('mmd_tools.material_open_sphere_texture', text='Add', icon='FILESEL')
        r = col.row(align=True)
        r.prop(mmd_material, 'sphere_texture_type')

        col = layout.column(align=True)
        c = col.column()
        r = c.row()
        r.prop(mmd_material, 'is_shared_toon_texture')
        if mmd_material.is_shared_toon_texture:
            r.prop(mmd_material, 'shared_toon_texture')
        else:
            r = c.row()
            r.prop(mmd_material, 'toon_texture')
Beispiel #6
0
def _toggleUseSphereTexture(self, context):
    root = self.id_data
    rig = mmd_model.Model(root)
    use_sphere = self.use_sphere_texture
    for i in rig.meshes():
        for m in i.data.materials:
            if m is None:
                continue
            FnMaterial(m).use_sphere_texture(use_sphere, i)
def clear_temp_materials(self):
    for mesh in tools.common.get_meshes():
        mats_to_delete = []
        for mat in mesh.data.materials:
            if mat and "_temp" in mat.name:
                mats_to_delete.append(mat)
        for temp_mat in reversed(mats_to_delete):
            base_mat_name = temp_mat.name.split('_temp')[0]
            if FnMaterial.swap_materials(mesh, temp_mat.name, base_mat_name) is None:
                self.report({'WARNING'}, 'Base material for %s was not found' % temp_mat.name)
            else:
                temp_idx = mesh.data.materials.find(temp_mat.name)
                mat = mesh.data.materials.pop(index=temp_idx)
                if mat.users < 1:
                    bpy.data.materials.remove(mat)