Blender 3D:從新手到專業/高階教程/Python 指令碼/簡介
|
|
適用的 Blender 版本:2.67。 |
Python 是一種功能強大、高階、動態的語言。Blender 2.67 中使用的 Python 版本是 3.3。如果您不熟悉 Python,請先閱讀 Python 書籍。如果您熟悉舊版本的 Python (2.x),此頁面 總結了 3.x 中的新增內容。
如果您熟悉舊版 Blender 中的 Python 指令碼,請注意 2.5x/2.6x 是完全不同的;舊的 Blender 模組已不存在。許多功能現在可以透過 bpy 模組獲得,但不要期望完全的 1:1 對應關係。
開啟一個新的預設 Blender 文件。如果您沒有自定義設定,底部將有一個時間軸
視窗;將其更改為 Python 控制檯
。也許可以增加它的高度,以便您可以一次看到更多行。
首先,讓我們找出文件中存在哪些物件。在“>>>”提示符下,鍵入
bpy.data.objects
您應該會看到響應
<bpy_collection[3], BlendDataObjects>
這實際上並沒有那麼有資訊量。實際上,您這裡有一個迭代器;要檢視其內容,只需執行通常的 Python 操作,將其轉換為列表。嘗試輸入以下內容
list(bpy.data.objects) #or bpy.data.objects[:]
這次響應應該是
[bpy.data.objects["Camera"], bpy.data.objects["Cube"], bpy.data.objects["Lamp"]]
這向您展示瞭如何在 3D 檢視視窗中引用三個預設物件。
讓我們獲取對 Cube 物件的引用,以便更方便地訪問它:鍵入
Cube = bpy.data.objects["Cube"]
現在讓我們嘗試查詢其一個屬性的值:鍵入
Cube.delta_location
您應該會看到響應
Vector((0.0, 0.0, 0.0))
Vector 型別來自 Blender 提供的 mathutils 模組。但與 bpy 不同,它不會自動匯入到 Python 控制檯中。因此,讓我們將其匯入以供後續使用:鍵入
import mathutils
好的,現在讓我們嘗試更改預設 Cube 的位置:鍵入
Cube.delta_location += mathutils.Vector((1, 1, 1))
(請注意雙括號:mathutils.Vector 接受一個引數,它是一個 X、Y 和 Z 座標值的元組。)
當您按下 ENTER 時,您是否在觀看 3D 檢視?您應該會看到立方體跳到另一個位置。要使其再次移動,請按 UPARROW 將上面的命令帶回來,以便您可以使用 ENTER 再次執行它。這樣做後,立方體將像以前一樣再跳一步。就這樣——您正在編寫指令碼!
bpy 模組的內容分為多個子模組,其中包括
bpy.data— 這裡您會找到當前文件的內容。bpy.types— 有關bpy.data中物件型別的詳細資訊。bpy.ops— 運算子執行 Blender 的實際功能;這些可以附加到熱鍵、選單項和按鈕。當然,它們也可以從指令碼中呼叫。當您編寫外掛指令碼時,它通常會定義新的運算子。每個運算子必須有一個唯一的名稱。bpy.context— 包含設定,例如當前的 3D 模式、哪些物件被選中等等。也可以透過全域性變數C在控制檯視窗中訪問。bpy.props— 用於定義屬性的函式。這些允許您的指令碼將自定義資訊附加到場景,例如使用者可以透過介面元素調整這些資訊來控制指令碼的行為。
mathutils 模組定義了幾個重要的類,這些類在 Blender API 的其餘部分中被大量使用。
Vector:表示 2D 或 3D 座標。Matrix:表示任何型別的線性變換的最通用方式。Euler:一種直接的方式,將旋轉表示為一組尤拉角,尤拉角是繞 X、Y 和 Z 軸的旋轉角。易於出現著名的陷阱,例如 萬向節鎖。Quaternion:從表面上看,這是一種更抽象的數學方法,用於表示旋轉。但實際上,它具有許多很好的特性,例如沒有萬向節鎖,並且在兩個任意旋轉之間插值更平滑。後者在角色動畫中尤為重要。Color:表示 RGB 顏色,並轉換為/從 HSV 空間(沒有 alpha 通道)。
- Blender 的指令碼編寫和擴充套件 高階
- Blender 2.67.0 r56533 API 參考
- Blender 網站 Python 指令碼 目錄