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檔案時有用,但在當前的程式碼中它們被註釋掉了,以避免在執行時執行。
如果你不需要這些操作,可以完全刪除這些行。