def METHOD_NAME(self, n_block, b_obj):
    b_mesh = b_obj.data
    # get all valid properties that are attached to n_block
    bs_properties = [getattr(n_block, prop_name, None) for prop_name in ("shader_property", "alpha_property")]
    props = list(prop for prop in itertools.chain(n_block.properties, bs_properties) if prop is not None)
    # we need no material if we have no properties
    if not props:
        return
    # just to avoid duped materials, a first pass, make sure a named material is created or retrieved
    for prop in props:
        if prop.name:
            name = prop.name
            if name and name in bpy.data.materials:
                b_mat = bpy.data.materials[name]
                NifLog.debug(f"Retrieved already imported material {b_mat.name} from name {name}")
            else:
                b_mat = bpy.data.materials.new(name)
                NifLog.debug(f"Created material {name} to store properties in {b_mat.name}")
            break
    else:
        # bs shaders often have no name, so generate one from mesh name
        name = f"{n_block.name}_nt_mat"
        b_mat = bpy.data.materials.new(name)
        NifLog.debug(f"Created material {name} to store properties in {b_mat.name}")
    # do initial settings for the material here
    self.nodes_wrapper.b_mat = b_mat
    self.nodes_wrapper.clear_default_nodes()
    # link the material to the mesh
    b_mesh.materials.append(b_mat)
    # set the vars on every processor
    for processor in self.processors:
        processor.n_block = n_block
        processor.b_obj = b_obj
        processor.b_mesh = b_mesh
        processor.b_mat = b_mat
        processor.nodes_wrapper = self.nodes_wrapper
    # run all processors
    for prop in props:
        NifLog.debug(f"{type(prop)} property found")
        self.process_property(prop)
    self.nodes_wrapper.connect_to_output(b_mesh.vertex_colors)