def METHOD_NAME(obj, face_size, apply=True, min_remesh_size=None, attributes=None):
    logger.debug(f'remesh_with_attrs on {obj.name=} with {face_size=:.4f} {attributes=}')
    temp_copy = deep_clone_obj(obj)
    remesh_size = face_size if min_remesh_size is None else max(face_size, min_remesh_size)
    butil.modify_mesh(obj, type='REMESH', apply=True, voxel_size=remesh_size)
    transfer_attributes.transfer_all(source=temp_copy, target=obj, attributes=attributes, uvs=True)
    bpy.data.objects.remove(temp_copy, do_unlink=True)
    if remesh_size > face_size:
        subdivide_to_face_size(obj, remesh_size, face_size, apply=True)
    return obj