def METHOD_NAME(rpr_context: RPRContext, material: bpy.types.Material, input_socket_key='Surface', *,
         obj: bpy.types.Object = None):
    """
    If material exists: returns existing material unless force_update is used
    In other cases: returns None
    """
    log(f"sync {material} '{input_socket_key}'; obj {obj}")
    mat_key = key(material, obj, input_socket_key)
    rpr_material = rpr_context.materials.get(mat_key, None)
    if rpr_material:
        return rpr_material
    output_node = get_material_output_node(material)
    if not output_node:
        log("No output node", material)
        return None
    data = {'material_key': mat_key, 'object': obj}
    node_parser = ShaderNodeOutputMaterial(rpr_context, material, output_node, None, data=data)
    rpr_material = node_parser.final_export(input_socket_key)
    if rpr_material:
        rpr_material.set_id(material.pass_index)
        rpr_context.set_aov_index_lookup(material.pass_index, material.pass_index,
                                         material.pass_index, material.pass_index, 1.0)
        rpr_context.set_material_node_as_material(mat_key, rpr_material)
    return rpr_material