import bpy def make_mesh(obj_name, set_normals, access_uv_layer_again_after_set_normals): mesh = bpy.data.meshes.new("mesh") # One triangle verts = [ (0, 0, 0), (0, 1, 0), (0, 0, 1), ] faces = [ (0,1,2), ] mesh.from_pydata(vertices=verts, edges=[], faces=faces) uv_layer = mesh.uv_layers.new() uv_layer_data = uv_layer.data uv_layer_name = uv_layer.name del uv_layer if set_normals: mesh.use_auto_smooth = True mesh.normals_split_custom_set([(0,0,1),]*3) if access_uv_layer_again_after_set_normals: uv_layer_data = mesh.uv_layers[uv_layer_name].data for i in range(3): uv_layer_data[i].uv = (0,0) obj = bpy.data.objects.new(obj_name, mesh) bpy.context.scene.collection.objects.link(obj) obj.show_name = True return obj make_mesh("no_set_normals", False, False).location = (0,0,0) make_mesh("with_set_normals_and_reaccess_uv", True, True).location = (1,0,0) make_mesh("with_set_normals_but_no_reaccess_uv", True, False).location = (2,0,0)