Otto_ninja-1 <<
Previous Next >> OpenDuck
Simplify
以下程式碼是一個專為 Blender 設計的 Python 程式,其目的是將複雜的 3D 模型零件簡化為凸包(Convex Hull),並在簡化後保留原始物件的物理屬性,最後將簡化後的模型匯出。
由於利用 CAD 繪出的零件,轉入 Webots 進行剛體動力學模擬運算時,若能將幾何外形轉換為網格資料較為簡單的凸包,可大幅減少物理引擎的運算負擔,進而提升模擬的流暢度和穩定性。
以下是程式碼的設計原理與主要流程:
設計原理:
分離設定與核心邏輯:程式碼將使用者可修改的參數(如檔案路徑、格式、簡化比率)放在程式開頭的「使用者設定」區塊,而將實際執行的功能封裝在獨立的函式中。這種設計使程式易於修改和維護,使用者不需要理解複雜的內部邏輯就能快速調整參數。
模組化函式:每個函式負責一個單一且明確的任務,例如 clear_scene() 清空場景、import_all_parts() 匯入模型、get_physics_properties() 獲取物理屬性等等。這種模組化設計使程式碼結構清晰,易於除錯和理解。
穩健的錯誤處理:在 import_all_parts()、get_physics_properties() 等函式中,程式碼都包含了對異常情況(如檔案夾不存在、物件無效)的檢查和錯誤訊息輸出。這確保了腳本在遇到問題時不會無故崩潰,而是能給出有用的提示。
複製-簡化-匹配三階段工作流程:
複製:為每個原始零件建立一個副本。這樣可以避免直接修改原始物件。
簡化:對這個副本執行凸包(Convex Hull)運算。凸包是一個包含原始物體所有頂點的最小凸多面體,可以將複雜的幾何體轉化為簡單的凸體。
匹配:將簡化後的凸包賦予原始物件的物理屬性,包括位置、旋轉和質量。
匯出:最後,刪除原始物件,只匯出簡化後的凸包。
利用 Blender scripting 簡化 OBJ 組立檔中的個別零件: blender_simplify_obj_parts.7z
simplify_parts_v2.py
Otto_ninja-1 <<
Previous Next >> OpenDuck