1.obj所在目录要有与之对应的mtl文件才行
2.场景中有摄像机,并调整好渲染角度
3.场中中调整好灯光设置
4.运行代码
代码:
import bpy # 导入Blender的Python API接口 import pathlib # 导入pathlib模块,用于操作文件路径 # 设置OBJ文件所在的目录路径 obj_root = pathlib.Path('D:\\ceshi') # 注意Windows路径中的斜杠需要转义 # 取消选择场景中的所有物体,以便导入时不会与已选择的物体冲突 bpy.ops.object.select_all(action='DESELECT') # 取消选择所有物体 render = bpy.context.scene.render # 获取当前场景的渲染设置 for obj_fname in obj_root.glob('*.obj'): # 遍历指定目录下所有的OBJ文件 print("jin ru ") # 打印信息,表明开始导入某个OBJ文件 # 导入OBJ文件 bpy.ops.wm.obj_import(filepath=str(obj_fname)) # 执行OBJ文件导入操作 # 设置渲染输出的文件路径,使用OBJ文件的名称(不包含扩展名)作为基础 render.filepath = f'//renders/obj-{obj_fname.stem}' # 使用f-string简化字符串格式化 bpy.ops.render.render(write_still=True) # 执行静态图像渲染 # 记住刚刚导入的网格,以便稍后从内存中删除它们 meshes_to_remove = [] for ob in bpy.context.selected_objects: # 遍历所有被选择的对象 meshes_to_remove.append(ob.data) # 将对象的数据(网格)添加到待删除列表 # 删除场景中的物体,注意use_global=False表示仅在当前场景删除物体 bpy.ops.object.delete(use_global=False) # 从内存中删除这些网格,以避免内存泄漏 for mesh in meshes_to_remove: # 遍历待删除的网格列表 bpy.data.meshes.remove(mesh) # 从Blender的数据存储中移除网格 # 如果需要测试单个文件处理,可以在此处取消注释break语句 # break # 仅在测试时使用,用于中断循环 # 如果需要导出OBJ文件,可以取消注释以下语句 # bpy.ops.wm.obj_export(filepath=obj_path) # 导出OBJ文件
请注意,我使用了原始字符串(r'D:\ceshi'
)来表示Windows路径,这是因为在字符串前面加上了r
,表示这是一个原始字符串,其中的反斜杠不会被当作转义字符。
另外,我使用了f-string来简化字符串的格式化,这是一种更现代和更简洁的字符串格式化方法。
此外,我还保留了break
和bpy.ops.wm.obj_export
操作符的注释,因为它们可能在测试或导出OBJ文件时有用,但在当前的代码中它们被注释掉了,以避免在运行时执行。
如果你不需要这些操作,可以完全删除这些行。